Интересно, что на safecurl.fin1te.net/#url=http://0x25.0x30.0x5A.0xC4/btc.txt выдается ошибка о невозможности отрезолвить… а по идеи должна быть ошибка о blacklist…
А как в третьем случае атакующий получил содержимое btc.txt? Так можно обойти валидацию по URL, но ведь curl отправит запрос на один из ip Google, а не на внутренний адрес?
И может мог бы кто объяснить, как во втором случае воспользовались уязвимостью?
Судя по описанию этот url некорректно парсится. Функция parse_url в PHP видит там хост google.com, который валиден. В то же время cURL использует домен safecurl.fin1te.net, обходя таким образом проверку.
В том то и дело, что не понятно, каким образом safecurl.fin1te.net попадает в curl, т.к. он потом вызывает функцию RebuildURL, которая возьмет все тот-же IP гугла
Так может проблема в том, что parse_url парсил по кривым частям, собрав по которым через buildUrl получали то же самое, а curl собранное уже по-взрослому интерпретировал.
Сломайте SafeCurl и получите 0.25 Bitcoin