0x01 分析
1 |
|
在这个程序中如果要执行到system("/bin/cat flag")
需要突破5重关卡:
- 必须是100个参数,其中第
'A'
是"\x00"
(空字符串),第'B'
是”\x20\x0a\x0d”; - 从标准输入中读4个字节
"\x00\x0a\x00\xff"
,从标准错误中读4个字节"\x00\x0a\x02\xff"
; - 设置环境变量
"\xde\xad\xbe\xef = \xca\xfe\xba\xbe"
; - 打开名为
\x0a
的文件,并从中读4个字符"\x00\x00\x00\x00"
; - 建立socket,并向服务端发送
"\xde\xad\xbe\xef"
;
0x02 利用代码
1 | #!/usr/bin/env python |
0x03 执行
由于文件无法复制到
/home/input2
(没有写的权限),因此将文件复制到pwnable.kr的/tmp
目录(有写的权限)1
$ scp -P 2222 input_exp.py input2@pwnable.kr:/tmp
由于
input.c
的system("/bin/cat flag")
使用的是相对目录,因此要找个办法让在/tmp
执行的程序也能找到/home/input2/flag
文件,使用建立软链接的方法:1
$ ln /home/input/flag flag # 在这个目录中访问flag就相当于访问/home/input2/flag
执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17input2@prowl:/tmp/drinkwater$ ls
input_exp.py
input2@prowl:/tmp/drinkwater$ ln -s /home/input2/flag flag
input2@prowl:/tmp/drinkwater$ ls -l
total 4 lrwxrwxrwx 1 input2 input2 17 Nov 18 07:48 flag -> /home/input2/flag
-rw-rw-r-- 1 input2 input2 772 Nov 18 07:36 input_exp.py
input2@prowl:/tmp/drinkwater$ python input_exp.py
Welcome to pwnable.kr
Let's see if you know how to give input to program
Just give me correct inputs then you will get the flag :)
Stage 1 clear!
Stage 2 clear!
Stage 3 clear!
Stage 4 clear!
input2@prowl:/tmp/drinkwater$ Stage 5 clear!
Mommy! I learned how to pass various input in Linux :)
input2@prowl:/tmp/drinkwater$