ssh [email protected] -p <port>
查看test.c
源碼,
這裏過濾了'nepbushiflag|/$-<>.'
這些字符,如果繞過直接調用system(user_input)
當前用戶ctf
屬於ctf組
,
這裏要注意test設置了特殊權限位g位,而且flag文件與test同屬於同一個用戶組ctf_pwn
,設置了g位,當test程序運行的時候,它的有效用戶組
(egid)就會變成文件的所屬用戶組即ctf_pwn
。
對於flag文件,它所在用戶組的的成員是具備讀的權限的,所以只要我們通過test
能拿到shell,就一定可以讀取到flag(以有效用戶組ctf_pwn
的身份)
現在目標就轉變爲繞過這麼多字符拿到一個shell
ls /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games | grep -v -E "n|e|p|u|s|h|i|f|l|a|g"
x86_64
是一個指向setarch
的鏈接
在拿到shell後,egid即有效用戶組就是ctf_pwn
,也驗證了我們前面說的理論。