這題是 shellshock 漏洞的實(shí)際應(yīng)用局齿,之前在整理 web 滲透的時(shí)候接觸過,但是沒有利用過橄登,現(xiàn)在遇到了就記下來抓歼。
之前的文章里對 shellshock 簡單介紹 過,這里再推薦一篇 shellshock 詳細(xì)介紹
題目是這樣的:
直接 ssh 上去看一下
目錄下有 4 個(gè)文件拢锹,其中 shellshock 是設(shè)置了 s 標(biāo)識的谣妻。
看看源碼
代碼很簡單,一開始調(diào)用 setresuid 和 setresgid 把進(jìn)程的 ruid卒稳、euid 和 suid 設(shè)置為進(jìn)程當(dāng)前的 egid蹋半,由于設(shè)置了 s 標(biāo)識,因此 egid 實(shí)際上是 root 所在用戶組的 id充坑。接著調(diào)用了 bash减江,注意到這里是以 root 的身份調(diào)用的闻蛀。
既然是 shellshock,先試試最簡單的
發(fā)現(xiàn)輸出了 test您市。分析一下這條指令實(shí)際上做了什么觉痛。首先在當(dāng)前環(huán)境中定義了一個(gè) X 函數(shù),函數(shù)體是 { :; }
茵休,實(shí)際上類似于 return true
薪棒,之后在函數(shù)體外多加了一條語句 echo "test"
,這條語句會在后面調(diào)用 /home/shellshock/bash
fork 新的 bash 進(jìn)程時(shí)被調(diào)用榕莺,這里的調(diào)用是在初始化環(huán)境的時(shí)候調(diào)用的俐芯,換句話說,就是 fork 出來的新 bash 進(jìn)程會在初始化自己的環(huán)境時(shí)執(zhí)行函數(shù)定義后面的語句
我們知道 shellshock 中以 root 身份調(diào)用了 bash钉鸯,那只要用同樣的方法吧史,讓這個(gè) bash 進(jìn)程在初始化環(huán)境的時(shí)候輸出 flag 就行了,于是可以:
得到結(jié)果