[BJDCTF 2nd]test
ssh ctf@node3.buuoj.cn -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
,也验证了我们前面说的理论。
还没有评论,来说两句吧...