1. 程式人生 > >Jarvis OJ-PWN-[XMAN]level0 wp

Jarvis OJ-PWN-[XMAN]level0 wp

地址:nc pwn2.jarvisoj.com 9881

第一次做pwn的題目 先準備一下環境
1.pwntools sudo pip install pwntools
2.python sudo apt install python-pip

先開啟虛擬機器 把檔案放進去用checksec看一下
在這裡插入圖片描述
發現是64位的 程式編譯時關了棧不可執行保護
這說明我們可以在buf裡面輸入shellcode和填充字元
並且讓函式的返回地址覆蓋成buf的棧上地址 來實現棧溢位攻擊

下面我們用IDA64來分析一下這個檔案
F5檢視虛擬碼
在這裡插入圖片描述
我們看到在主函式中輸出了一個Hello,World
接下來我們跟進vulnerable_function()函式
在這裡插入圖片描述


可以看出來是通過read函式把標準輸入的200位寫入buf中
很顯然是洩露記憶體(づ′▽)づ
接下來我們看一下buf
在這裡插入圖片描述
    
    -  -  -  -loading  -  -  -

在這裡插入圖片描述
從第一個01到第80個 由於是16進位制 所以是 16x8=128個數
所以我們只需要將128填滿 然後再進行跳轉就可以啦
那麼我們要跳轉到哪裡呢(◍•ᴗ•◍)ゝ
先用shift+F12看一下字串 找一下比較關鍵的
在這裡插入圖片描述
我們看到了一個/bin/sh
函式就是執行system("/bin/sh")
所以前面棧溢位的位置可以直接跳到這個函式
我們點進去看看(っ●ω●)っ
在這裡插入圖片描述
看到了一群這樣的東西
那我們從Export中開啟callsystem
在這裡插入圖片描述


這一行對應的Address是0000000000400596
構造payload=0x88*‘a’+p64(0000000000400596)
(*゚ー゚)
前面說需要128個空間覆蓋buf,這裡我們用128個‘a’來覆蓋buf,用p64打包這個函式地址,用payload進行漏洞利用。
◝( ゚∀ ゚ )◟

我們有了大概思路以後就可以在Ubuntu裡面新建一個文字檔案了 先用touch OJ0建立了一個名字為OJ0的檔案 然後就可以往裡面寫程式碼了

✧◝(⁰▿⁰)◜✧
在這裡插入圖片描述

1.第三行就是用來建立一個遠端連線,url或者ip作為地址,然後指明埠。由於題目在一開始就告訴了我們地址 於是我們就用題目來做遠端連線,將9881作為埠儲存在變數r中
2.倒數第二行就是 利用漏洞發入該埠中 獲取控制權
3.r.close()就是利用好關閉
在這裡插入圖片描述


寫好了大概是這樣子的 我們儲存並將它的字尾名改為.py即可
然後我們在虛擬機器中執行該檔案
在這裡插入圖片描述
看來我們已經獲取了控制權 那麼就是Flag了
輸入cat flag
在這裡插入圖片描述
成功找到flag (´ΘωΘ`)
CTF{713ca3944e92180e0ef03171981dcd41}