CTFshow-java系列

web279-web300

前言

java基础学了一段时间了也跟着白日梦组长学了一点java反序列化了,说实话,白日梦组长讲的确实好,一个类一个类带着你捋,领着你看看怎么是找到某个函数某个方法的,来做一下CTFshow的题,一方面看看java在ctf题中的应用,也来继续学习一下java。本篇文章跟着海神的文章学习的,我的神!

此篇文章里全是Struts2框架漏洞Struts2是用Java语言编写的一个基于MVC设计模式的Web应用框架

判断网站是否基于Struts2的方法链接

通过页面回显的错误消息来判断,页面不回显错误消息时则无效
通过网页后缀来判断,如.do .action,有可能不准
    如果配置文件中常数extension的值以逗号结尾或者有空值,指明了action可以不带后缀,那么不带后缀的uri也可能是struts2框架搭建的
    如果使用Struts2的rest插件,其默认的struts-plugin.xml指定的请求后缀为xhtml,xml和json
判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true

web279

开题一个where is flag?点了跳转到这里

image-20240319191113164

看了海神的wp,是Struts2漏洞

漏洞原理

struts2漏洞 S2-001是当用户提交表单数据且验证失败时,服务器使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据

如果在密码处输入的是%{1+1}相应的会变成2说明存在S2-001漏洞

海神在博客中还说了OGNl表达式的用法

了解下OGNL表达式中三个符号 %,#,$ 的含义

​ %的用途是在标志的属性为字符串类型时,计算OGNL表达式%{}中的值

‘#’的用途访主要是访问非根对象属性,因为Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀才可以调用

​ $主要是在Struts 2配置文件中,引用OGNL表达式

下面给出三条利用语句:

获取tomcat路径
%{“tomcatBinDir{“+@java.lang.System@getProperty(“user.dir”)+”}”}

tomcatBinDir{/usr/local/tomcat/webapps}

获取web路径
%