1、远程系统命令执行:一般出现这种漏洞,是因为应用系统在设计上需要给用户提供指定的远程命令接口,比如我们常用的防火墙、路由器、入侵检测等设备的web管理页面上一般给用户提供一个ping操作的web界面;用户从web界面输入目标ip,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。而设计者在完成该功能时,没有做严格的安全控制,那么攻击者就可以通过该接口提交“意想不到”的命令,从而让后台执行,从而控制整个后台服务器。
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"
2、远程代码执行:同理,因为需求设计,后台也会把用户的输入作为代码的已部分进行执行,也就造成了远程代码执行漏洞。代码执行原理:没有对对接口输入的内容进行严格判断,造成攻击者精心构造的代码非法执行。不管是用了代码执行的函数,还是使用了不安全的反序列化等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
你可以通过“RCE”对应的测试栏目,来进一步的了解该漏洞。
容易出现在哪些地方:
1.只要带参数的地方都有可能存在执行漏洞
2.路由器、防火墙、入侵检测等设备的 web 管理界面上
命令执行测试方法:
说明:一个符号可以理解为or ,两个符号可以理解为and。
& 无论左边是 false 还是 true,右边都执行
&& 具有短路效果,左边 false,右边就不执行;左边是 true,右边就执行
| 无论左边是 false 还是 true,右边都执行
|| 具有短路效果,左边 false,右边就不执行;左边是 true,右边就执行
如何挖命令执行漏洞
禁用函数:disable_functions=system、shell_exec、exec、popen
1。 执行系统命令 assert(这是个定 bai 义在 中的宏, 用来测试断言)、system(Windows 页面内存管 理进程)、passchu(密码)、exec(数据库存储过程)、``反单引号等
2。 代码执行与加密 eval(执行)、assert、base64_decode.gzinflate(压缩编码和压缩解码)、call_user_func(php 函数被调用)等
3。 文件包含与生成 require(引入)、require_once(引入一次)、include(包含)、include_once(包含一次)、 file_get_contents(把文件的内容读入到一个字符串中)、file_put_contents(把一个字符串写入 文件)
4。.htaccess (Apache 中分布式配置文件) 、sethandler(处理程序的意思)、auto_prepend_file (修改顶部或底部 require 的文件路径)、auto_append_file(在所有页面的顶部和底部 require 文件
Struts2 框架命令执行漏洞原理
1.Struts是Java的web框架
2.采取 OGNL 表达式,处理 view 层数据字符串到 controller 层转换成 java 对象
S2-046 和 S2-045 一样(巧记 45 46) (S2-045 影响范围较大—-通过 Content-Type 这个 header 头,进而执行命 令,通过 Strus2 对错误消息处理进行回显)
S2-016 影响范围非常大
使用 tomcat 中间件 8080 .action .do 远程代码执行漏洞 低于 2.3.1
防御:
1。 安全配置好 php 相关参数 通过 php.ini 配置文件里有个 database_funcitions 配置,禁止某些函数,服务器便是用这 个禁止 PHP 的执行命令函数
2。 升级中间件
3)。严格控制传入变量,严谨使用魔法函数
序列化就是把一个对象变成可以传输的字符串,目的就是为了方便传输。假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到这个变量,如果我们让这个class一直不销毁,等着下一次要用它的时候再一次被调用的话,浪费系统资源。当我们写一个小型的项目可能没有太大的影响,但是随着项目的壮大,一些小问题被放大了之后就会产生很多麻烦。这个时候PHP就和我们说,你可以把这个对象序列化了,存成一个字符串,当你要用的时候再放他出来就好了。在我们讲PHP反序列化的时候,基本都是围绕着serialize(),unserialize()这两个函数。
反序列化:字符串转化为对象
反序列化基本都是围绕 serialize()和 unserialize()这两个函数
注:serialize() 方法通过序列化表单值创建 URL 编码文本字符串。 您可以选择一个或多个表单元素(如输入和/或文本区),或表单元素本身。 序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中。
漏洞原理
Serialize()unserialize()在 PHP 内部实现上本来是没有漏洞的,之所以产生漏洞的原因 是:应用程序在处理对象、魔术函数以及序列化相关问题时导致的,当传给 unserialize 可挖 的参数时,就可以注入 payload 进行反序列化,触发对象中的一些魔术方法。
分类: PHP反序列化漏洞
O:1:"S":1:{s:4:"test";s:29:"";}
->在php里是调用对象方法很或者属性的运算符。在一个类中,类的函数需要调用自身的方法或者属性需要用$this->来调用,而在类的实例中,也是通过->来调用的,只是前面的变量不是$this
O:1:"s":1:{s:4:"test";s:3:"123";}
jboss反序列化漏洞
默认后台地址:http://localhost:8080/jmx-console
jboss默认端口:8080 帐号和密码admin
Weblogic反序列化漏洞
启动weblogic startweblogic.cmd
http://192.168.32.104:7001/console/login/LoginForm.jsp
1. weblogic 弱口令(账号密码都是 weblogic)
2.Java 反序列化操作漏洞(cve2018-2016)
Java 反序列化原理: (1)Java 序列化指 Java 对象转换为字节序列的过程 (2)Java 反序列化指字节序列恢复为 Java 对象的过程 (3) Commons-collections 爆出第一个漏洞开始,Java 反序列化漏洞的 事件就层出不穷。 (4)在 Java 中,利用 ObjectInputStream 的 readObject 方法进行对象读取 (5)可以深入了解 ysoserial 有哪些 gadgets
3.任意文件上传漏洞操作(CVE-2018-2894)
未授权访问路径:http://192.168.0.127:7001/ws_utc/config.do
Weblogic默认路径:
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\tmp\WSTestPageWorkDir
我们改成以下路径
C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\wstestclient\i7n5e1\war\css
木马上传上去之后,访问方式如下:
http://192.168.0.127:7001/ws_utc/css/config/keystore/1616725680949_whoami.jsp
1604376329959_whoami.jsp
1631931837067_xxx.jsp
4.XML Decoder 反序列化漏洞操作(CVE-2017-10271)
5.SSRF 漏洞(需要安装Weblogic时选择UDDI组件)、
6.反序列化漏洞(CVE-2019-2725
工具:序列化反序列化转码
在线反序列化工具:https://www.w3cschool.cn/tools/index?name=unserialize
防御:
1) 安全配置好 PHP 相关参数,通过 php.ini 文件里 disable_functions=配置 禁止某些 php 执行的命令函数
2) 升级中间件
3) 严格控制传入变量,严谨使用魔法函数