最近项目上跟Struts2框架打交道比较多,整理一下比较经典的几个漏洞的测试以及Bypass姿势。首先是S2-016。
PS:升级迁移这个东西真的很费劲。
Struts 2.3.15.1之前的所有版本
一般可以通过在对应的接口,使用如下Payload触发302重定向来进行判断:
会触发302跳转并且执行对应的算数表达式:
利用application(Struts2自带的ActionContext类特性)确定可以执行代码:
通过执行application对象(Web服务器启动时,会自动会每个Web服务目录都创建一个application对象)的 *** ,尝试读取项目中的临时存储目录来判断是否可以执行代码:
主要思路就是绕过关键字检测。
跟Spring框架不一样,Struts2的multipart提交方式并不能通过删除from-data或者大小写变换Content-Type的内容来进行提交。以下是struts2的处理方式:
绕过方式主要是修改成multipart提交方式:
因为是startsWith的检查,所以也可以修改相关内容为multipart/form-databypass进行绕过。
可以通过新建字符串变量的方式,创建超长的字符变量,尝试绕过waf(一般waf对于超大数据包有buffer防守,超过buffer防守的话,即可绕过防护):
创建字符串变量的方式:
payload变形:
针对一些敏感字符例如start()之类的检测拦截,可以考虑调用Java的js引擎进行编码解码操作来进行绕过。
js引擎调用:
payload变形:
针对一些敏感字符例如start()之类的检测拦截,可以考虑调用Java的Base64引擎进行编码解码操作来进行绕过。
前提条件要满足Struts2 version<=2.0.14
主要是这两个编码引擎:
com.sun.xml.internal.messaging.saaj.util.Base64():
sun.misc.BASE64Decoder():
Base64编码部分:
将以下poc写入想要执行的命令,Base64编码然后放入到编码引擎poc中即可:
举例:
com.sun.xml.internal.messaging.saaj.util.Base64:
针对某些waf可能检测类似start、readline等命令关键字。可以通过反射结合byte字节转换来绕过。
这里通过反射调用ProcessBuilder的start *** ,以及BufferedReader的readline *** 。通过结合byte字节转换来屏蔽对应关键字:
概念帕加尼手表价格表价格查询购买销售公司 帕加尼手表铁黄版报价 215900/元 北京凿谱商贸公司 阿迪达斯学生手表暗洋红款什么价 722600/元 岳阳养德异国钟表...
六安网站优化:5个步调做好网站优化 值得一看 你能做些什么来确保该网站呈此刻百度、360或神马搜索上?固然提高搜索排名好像是一项难题的任务,但搜索引擎优化是提高网站搜索可见性的独一途径。 1.为了辅佐...
每一个维族出世的第一个“家” 维族的每一个家中 ,都免不了一张小摇床。这类高60厘米,长一米,宽40厘米的木质驼轿式摇床 ,制做非常注重,富有装饰艺术,床帮和床腿都雕有精美的纹路 ,喷成红、绿...
能不能在空余的情况下,去看书,散散步,登山,陪小孩,沒有埋怨,沒有争吵,好好地享有远离手机的日子,为自己多一点的時间。针对父母而言陪小孩的时间比较有限的,可是许多的情况下教育孩子的日常生活反倒充满了诗...
一是数据分析类大数据人才, 二是系统研发类大数据人才, 三是应用开发类大数据人才。 他们的基础岗位分别是大数据系统研发工程师、大数据应用开发工程师、大数据分析师。 在学习大...
现有技能是针对一般的脚本后门、以操控服务器为意图、一般包括较为显着的静态特征或许行为形式,不能对保密型后门进行有用检测。 package burp;PWN暂时不说,WEB肯定会触及一些体系服务:web...