今天继续给大家介绍渗透测试相关知识,本文主要内容是RCE攻击绕过WAF详解。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
针对RCE类型的攻击,有时WAF会进行拦截,如下所示:

上图是安全狗对网页木马的拦截页面。对于不同的WAF而言,对RCE攻击拦截的原理是不同的,有的是检测用户输入的内容,有的是检测用户访问页面的内容。对于RCE漏洞而言,我们无法控制页面本身的内容,通常管理员会进行合理的设置,避免WAF对页面本身内容的拦截,因此WAF对RCE攻击的拦截通常是在用户输入上。例如,用户输入了phpinfo()、system等关键字符串。
针对RCE的WAF拦截问题,我们首先想到的解决方式就是通过编码的方式来进行绕过。
我们尝试将phpinfo()这样的敏感信息,通过Base64加密后,作为base64_decode()函数的输入。例如,构造payload如下所示:
base64_decode('cGhwaW5mbygpOw==')
payload中的“cGhwaW5mbygp”是phpinfo()的Base64加密后的值。
然而,这样的方式,却并不能达到我们预定的效果。
原因在于,上述payload与eval函数拼接成如下的代码:
eval("base64_decode('cGhwaW5mbygpOw==')")
eval函数可以将输入当作命令来执行,但是我们的输入是一个base64_decode()函数,因此eval函数会执行base64_decode()函数,该函数执行的结果是phpinfo(),但是该函数执行后的结果并没有执行。相当于上述代码得到的是“phpinfo()”的字符串,并不是执行了phpinfo()函数的效果。
因此,这种以编码和解码的方式绕过WAF是不可行的。
但是,我们可以采用以下的方式,即在base64_decode()函数的外面,加上一个assert()函数,payload如下所示:
assert(base64_decode('cGhwaW5mbygpOw=='))
这样的话,assert()函数与最外层的eval()函数组合后就会形成如下代码片段:
eval(assert(base64_decode('cGhwaW5mbygpOw==')))
这样,该函数就可以成功执行了。
当然,我们也可以使用分号,将上述payload拆分成等效的payload,如下所示:
$exp=base64_decode('cGhwaW5mbygp');assert($exp);
该payload执行后结果如下所示:

除了Base64编码以外,我们还可以使用16进制编码。解码函数为pack()函数,构造的payload如下所示:
x=assert(pack(%27H*%27,%27706870696e666f28293b%27));
由分号构成的等效payload如下所示:
x=$exp='706870696e666f28293b';assert(pack('H*',$exp));
上述payload执行后结果如下所示:

除了上述方式绕过以外,我们还可以通过替换和拼接方式来绕过WAF。替换的方式就是在phpinfo这个易被检测到的关键字中间添加其他的字符,再使用str_replace()函数将添加的字符替换为空,这样的方式构造的payload如下所示:
x=$exp=str_replace('abc','','phpabcinfo();');assert($exp);
上述payload执行结果如下所示:

除了使用替换的方式以外,我们还可以用拼接的方式,将原来的敏感字符替换成两部分,然后再把这两部分拼接起来,就可以达到效果了,根据这种方式构造的payload如下所示:
x=$exp1='php';$exp2='info()';$exp3=$exp1.$exp2;assert($exp3);
上述payload执行结果如下所示:

以上的payload,大多都含有assert关键字。当我们使用上述payload的时候,尽管可以绕开对phpinfo();等关键字的限制,但是却使用了另一种assert关键字。如果要避免使用assert()关键字,那么我们可以将assert关键字也通过上述方式,来进行拼接或者替换,然后执行。通过这种方式构造的payload如下所示:
x=$exp1='ass';$exp2='ert';$exp3='php';$exp4='info();';$exp5=$exp1.$exp2;$exp5($exp3.$exp4);
上述payload执行结果如下所示:

除了上述方法外,我们还可以采用其他的方式来绕过WAF。比如,我们采用其他的上述方式来绕过WAF。WAF对用户输入的检测是存在一定限制的,这个限制来源于WAF的资源,如果WAF占用太多的资源,就会影响业务系统正常运行,因此WAF再很多时候都会放松对cookie等方式的检验。因此,我们就可以利用这个原理,构造payload,让代码接收cookie方式的变量,然后把敏感字符以cookie的方式上传。这样构造的payload如下所示:
x=$exp=$_COOKIE['exp2'];assert($exp);
exp2=phpinfo();
上述payload执行结果如下所示:

上述讲了很多的payload及其原理,这些payload的构造思想,可以联合起来使用,或许会起到更好的效果!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
我正在按照MicahelHartl的Rails教程构建示例应用程序。我试着探索了一下并添加了一些不同的东西——所以在用户表中我添加了一个account_balance列。问题是User模型内置了一堆验证:validates:name,presence:true,length:{maximum:50}validates:username,presence:true,length:{maximum:50}VALID_EMAIL_REGEX=/\A[\w+\-.]+@[a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/ivalidates:email,presence
开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建
文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就
WAF可以对网站进行扫描,识别API漏洞。API安全如何设置API安全_Web应用防火墙-阿里云帮助中心API安全如何划分API业务用途?登录认证手机验证码认证数据保存数据查询数据导出数据分享数据更新数据删除数据增加下线注销信息发送信息认证邮件信息发送邮箱验证码认证账号密码认证账号注册API安全支持检测哪些敏感数据?敏感数据级别敏感数据类型非敏感数据(N)不涉及。特级敏感数据(L0)与一级敏感数据(L1)或二级敏感数据(L2)相同。单次响应中一级敏感数据(L1)较多时,升级为特级敏感数据(L0)。单次响应中二级敏感数据(L2)较多时,升级为一级敏感数据(L1)或特级敏感数据(L0)。一级敏感数
HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca
如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1. 创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1. 创建SpringBoot项目 打开IDEA,选择NewProject创建项目。 填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。 选择springboot版本以及需要的包,此处只选择了springweb。 此处需特别注意,若你使用的是jdk1
前言上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解。从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状态和全局属性的,以下是关于该模块的介绍,请大家指正。目录前言本系列提要一、粒子系统主模块1.阅读前注意事项2.参考图3.参数讲解DurationLoopingPrewarmStartDelayStartLifetimeStartSpeed3DStartSizeStartSize3DStartRotationStartRotationFlipRotationStartColorGravityModif