php代碼注入裸聊app下載php代碼注入
2021-11-21
打開鏈接發(fā)現(xiàn)是裸聊app下載,夜神+burp抓包,
獲取URL,通過(guò)js的文件特性找到源文件。
根據(jù)代碼,發(fā)現(xiàn)他是一個(gè),然后去官網(wǎng)下載源碼審計(jì)
sql注入
在::方法中,執(zhí)行SQL語(yǔ)句的點(diǎn)有很多
這里的注入需要滿足$['']的可控性。發(fā)現(xiàn)$變量調(diào)用了當(dāng)前類的()方法。跟進(jìn)此方法:
() {$ = ();$cont = ("php://");//$cont = (."/test.txt");if(($cont)) $;$ = g($cont ,'', );$ = ::($); $;)
發(fā)現(xiàn)$cont是通過(guò)post數(shù)據(jù)流獲取的,傳入的xml,繼續(xù)跟進(jìn)::
($cont) {if(($cont) == "") $cont = ($cont);$arr = ()$cont;($arr as $item=>$key) {if(($key) =='') {$key = self::($key);} else if(($key) ==''){$key = self::($key);}$arr[$item] = $key;} $arr;}
這里不重要,只是將xml的值轉(zhuǎn)換成數(shù)組,這樣方法中的$是可控的,也就是可以產(chǎn)生SQL注入。經(jīng)過(guò)本地測(cè)試,發(fā)現(xiàn)方法中的很多數(shù)據(jù)查詢表中并不存在,這里找到了一個(gè)點(diǎn):
跟進(jìn)::方法,參數(shù)$key是我們可以控制的,參數(shù)$沒(méi)有關(guān)系
全局搜索::在根目錄.php中調(diào)用該方法
("inc.php");if(($_GET[""])) {echo $_GET[""];exit;}::();
現(xiàn)在只需要構(gòu)造,這里進(jìn)入::方法,需要輸入:
($[''])->($[''])->$[''] ==''->$['']) ==''
這一點(diǎn)只能是盲注時(shí)間。我本地測(cè)試的時(shí)候,可以使用(1,if(({}),0x7c,1),1) 實(shí)現(xiàn)時(shí)間盲注到布爾注入)的方法,目標(biāo)環(huán)境問(wèn)題不能可以實(shí)現(xiàn),所以我寫了一個(gè)腳本來(lái)運(yùn)行帳戶密碼。
我發(fā)現(xiàn)自己很愚蠢。目錄文件中將生成數(shù)據(jù)庫(kù)錯(cuò)誤文件。路徑為:/data///.txt(.txt)
知道表結(jié)構(gòu)和字段,直接去目標(biāo)站注入,得到后臺(tái)密碼hash,發(fā)現(xiàn)無(wú)法解密??赐甏aphp代碼注入,有salt,通過(guò)md5(pass+salt)加密。在這里,鹽也可以在密碼表中看到。到了才發(fā)現(xiàn)無(wú)法解密。
偽造
在登錄站點(diǎn)發(fā)現(xiàn)sum是用來(lái)登錄的,感覺(jué)是可以偽造的。下面我就跟著代碼看看是怎么生成的,驗(yàn)證登錄碼:
() {$ = $this->(); ::json($);}
跟進(jìn)方式
() {$ = ("code" => 0, "id"=>0, "msg" => ::get(""));$ = ("" => ::post("")," "=> ::post("pwd"),"" => ::get(""),"" => ::get(""));if(!::pwd($[""]) ) {$["code"] = 7;$["msg"] = ::("tips"); $;}$arr = ::get("")->($);if( $arr[ "code"] != 0) {$ = $arr; $;} $;}
獲取$數(shù)組中的登錄賬號(hào)密碼,繼續(xù)跟進(jìn)
$通過(guò)::方法來(lái)的,現(xiàn)在只需要看看$['sid']是怎么來(lái)的,跟進(jìn)查了一下,沒(méi)有發(fā)現(xiàn)什么,這里,我直接把self::$['sid的值打印出來(lái)'] ,發(fā)現(xiàn)是ip+時(shí)間戳+隨機(jī)數(shù)的形式
echo self::$['sid'];exit;
發(fā)現(xiàn)數(shù)據(jù)存放在數(shù)據(jù)庫(kù)表的一個(gè)字段中,表示是否登錄,1表示登錄,0表示退出。
我們有一個(gè)注入點(diǎn)php代碼注入,我們可以通過(guò)注入獲得,現(xiàn)在跟進(jìn)::方法,看中的是如何加密
跟蹤 $ 變量以查看它的來(lái)源。跟進(jìn)::,發(fā)現(xiàn)它來(lái)自data\\cfg.env..php中的一個(gè)常量。而這個(gè)常數(shù)是安裝時(shí)隨機(jī)的五位數(shù)
最后得到的$由$、($)、$三部分組成,所以這個(gè)$變量需要我們繼續(xù)爆破,并且知道方法的$參數(shù)是ip+時(shí)間戳+隨機(jī)數(shù)的形式,并且該漏洞將在下面重現(xiàn)。.
漏洞復(fù)發(fā)
首先抓取目標(biāo)站的后臺(tái)登錄,如:,假設(shè)我的ip地址是104.192.225.86,傳為=,去掉=。經(jīng)過(guò)本地測(cè)試,發(fā)現(xiàn)ip++ 編碼后是36位網(wǎng)站制作,所以上面的加密密文為:
我們通過(guò)注入獲取$參數(shù)和登錄狀態(tài)
>>>>1' 和 (1,(0x7e,( (,0x7e,) from `` by desc 0,1),0x7e),1)#>note>
成功閱讀后,這里需要爆破。這是一個(gè)五位數(shù)的數(shù)字。用他的代碼修復(fù)php爆破腳本。
($,$="",$ =''){ // 192.168.50。$ = $;$ = ($);$ = md5($);$ = ($, 0, 1);$ = ($, -1, 1);$ = ord($) ;$ = ord($);$ = ($,-1,1);if($> 9) {$ = (($, -2, 1)) + $; }else{$ = $ * 2;}$ = (($, $, $));$ = ($, -1, 1);if($> 9){$ = ((( $, -2, 1)) + $;}else{$ = $ * 2;}$ = (($, -$)); if($ == ""){$ = ($); $ = $。
$. $;$ = ("=", "", $);}else{$ = ("=", "", $);$ = ("=", "", $);$ = ($); $ = ($);$ = ($);if($
($=1,$end=){for ($i=$; $i