JSP:从入门到st2漏洞环境本地搭建

转自i春秋

一、前言

本想写个st2系列漏洞的,但是发现自己太菜了,就算有一堆exp也看不懂Orz,就只能写个简单的环境搭建+工具使用就到此完结了,老老实实地做个脚本小子Orz

二、正文

环境说明:虚拟机 win7 + jdk 1.7.0_45 + tomcat 8.5.11 + struts-2.1.8.1

st2下载地址:
http://archive.apache.org/dist/struts/binaries/

从入门到helloworld

1、配置环境变量

下载安装jdk,下载解压tomcat,配置环境变量java和tomcat的环境变量,参考百度经验
http://jingyan.baidu.com/article/870c6fc33e62bcb03fe4be90.html
执行命令如下,观察环境变量是否有出错 (注意斜杠)
这里写图片描述
此时访问127.0.0.1:8080可以看到tomcat说明安装成功
这里写图片描述

2、编写helloworld并访问之,注意路径要对

这里写图片描述

从helloworld到struts2

参考参考资料,撸起袖子就是干

1、修改8080端口为80,修改物理路径

修改tomcat的conf文件
C:\apache-tomcat-8.5.11\conf\server.xml
修改port8080为80,修改appBase

<Connector port="80" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" />  
<Host name="localhost"  appBase="www" 
      unpackWARs="true" autoDeploy="true">

创建文件”C:\apache-tomcat-8.5.11\www\ROOT\message.jsp” (注意路径,注意ROOT是根目录的意思)

this is message.jsp  
</br>  
<%  
StringBuffer uri = request.getRequestURL();  
uri.append("?");  
uri.append(request.getQueryString());  
out.print(uri);  
%>  

重启tomcat并访问message.jsp,如图所示
这里写图片描述
这里写图片描述

2、st2入门without IDE

下载解压struts-2.1.8.1-all如图所示
这里写图片描述

①使用st2模版

以rar方式打开空白模版C:\struts-2.1.8.1-all\apps\struts2-blank-2.1.8.1.war如图所示
这里写图片描述
解压至ROOT目录下
这里写图片描述
重启tomcat,再使用浏览器访问即可看到模版已部署成功
这里写图片描述

②参考模版实现简单的login.action

如有做①,删掉www\ROOT下除message.jsp外的所有文件

创建如下文件。可在模版对应处复制过来并修改

C:\apache-tomcat-8.5.11\www\ROOT\login.html
C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\web.xml
C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\classes\struts.xml
C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\classes\LoginAction.java
C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\lib\*
\www\ROOT\login.html
<html>  
<body>  
<form action="login" method="post">  
<table>  
<tr>  
    <td>user:</td><td><input type="text" name="uname"></td>  
</tr>  
<tr>  
    <td>pass:</td><td><input type="password" name="passwd"></td>  
</tr>  
<tr>  
    <td><input type="submit"></td>  
</tr>  
</table>  
</form>  
</body>  
</html>
\www\ROOT\WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>  
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee [url]http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd[/url]">  

    <filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    </filter>  

    <filter-mapping>  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

</web-app>
\www\ROOT\WEB-INF\classes\struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="default" namespace="/" extends="struts-default">
        <action name="">
            <result>
                /message.jsp
            </result>
        </action>
        <action name="login" class="LoginAction">
            <result name="success">/message.jsp?success</result>
            <result name="error">/message.jsp?error</result>
        </action>
    </package>

</struts>
\www\ROOT\WEB-INF\classes\LoginAction.java

这里set和get方法的命名需要注意大小写,具体规则请百度

public class LoginAction{  
    private String uname;  
    public String getUname(){  
        return uname; 
    }     
    public void setUname(String uname){  
        this.uname=uname; 
    }  

    private String passwd;  
    public String getPasswd(){  
        return passwd; 
    }  

    public void setPasswd(String passwd){  
        this.passwd=passwd; 
    }  

    public String execute(){  
        if("admin".equals(getUname())&&"123456".equals(getPasswd())){ 
            return "success"; 
        }else{ 
            return "error"; 
        } 
    }  
}  
\www\ROOT\WEB-INF\lib*
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
部署运行

编译LoginAction.Java

C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\classes>dir 
 驱动器 C 中的卷没有标签。  
 卷的序列号是 4AD2-49A6  

 C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\classes 的目录  

2017/02/26  13:31    <DIR>          .  
2017/02/26  13:31    <DIR>          ..  
2017/02/26  13:31               470 LoginAction.java  
2017/02/26  13:31               558 struts.xml  
               2 个文件          1,028 字节  
               2 个目录 38,257,307,648 可用字节  

C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\classes>javac LoginAction.java  

C:\apache-tomcat-8.5.11\www\ROOT\WEB-INF\classes>

重启tomcat并浏览器访问login.html再登录即可看到自己的LoginAction
这里写图片描述
这里写图片描述

从struts2到S2-005

使用K8拉登哥哥写的st2利用工具,直接打即可。
http://qqhack8.blog.163.com/blog/static/1141479852014631102759126/
工具的使用方法比较简单,百度也有下载,注意校验sha1即可(反正我是丢进虚拟机运行的)

这里说一下怎么使用wireshark来抓取本地127.0.0.1的数据包来提取exp

参考百度配置wireshark抓取127.0.0.1的数据包
这里写图片描述
http://www.mobibrw.com/2016/5256/comment-page-1

先安装最新版wireshark(注意要勾选安装WinPcap,这样接下来安装Npcap的时候才能卸掉这个,不然会蹦)
再安装npcap
https://github.com/nmap/npcap/releases
这里我多次重启+回滚快照才配置成功..

运行wireshark,选择Npcap Loopback Adapter
这里写图片描述

打exp后能看到tomcat疯狂报警告
wireshark过滤器输入http
即可看到exp
这里写图片描述
提取出来丢burpsuite里如图所示
这里写图片描述

三、小结或者结束语

主要是想写一个JSP从入门到helloworld,这样以后研究JSP+oracle的注入也好一点,看到st2的就顺手做了。网上的大多是IDE一键部署的例如eclipse和myeclipse,我这里的不用IDE部署st2也是绕了好久才做成。感谢百度的各位前辈

四、参考资料

环境变量的配置
http://jingyan.baidu.com/article/870c6fc33e62bcb03fe4be90.html
沉重的手 – 不用IDE,进行struts2开发的简单实例
http://7131961.blog.51cto.com/7121961/1628103/
网易云课堂 尚学堂马士兵struts2入门到精通章节一
http://study.163.com/course/introduction/1060010.htm
超级阿尼玛 – 关于Struts has detected an unhandled exception这个异常
http://blog.csdn.NET/communicate_/article/details/8276145
(注:这里我修改struts.xml里的为true,也重启了tomcat和我的虚拟机,至于具体是哪个起效的就不得而知了。)
如何使用wireshark抓取127.0.0.1的数据包
http://www.mobibrw.com/2016/5256/comment-page-1

感谢各位前辈分享的经验

struts2漏洞exp利用工具, 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 此漏洞影响范围非常小,要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,说以,目前exp只是基于S2-045改写的,所以exp并不是所有版本都能用,正常情况下Struts 2.3.5-2.3.31,Struts 2.5-2.5.10版本可以使用此exp。 2017-07-07: 增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2-045漏洞引发原因一样,只是利用漏洞的位置发生了变化,S2-046方式可能绕过部分WAF防护,存在S2-045就存在S2-046。http://struts.apache.org/docs/s2-046.html 2017-03-07: 增加安恒信息研究员nike.zheng发现的S2-045,jakatar处理复杂数据类型时,异常处理不当,导致OGNL代码执行,通过在请求的Content-Type头中构造OGNL表达式来执行Java代码。http://struts.apache.org/docs/s2-045.html 2016-04-26: 增加最新的S2-032远程代码执行漏洞,和S2-019很相似。 参考:http://seclab.dbappsecurity.com.cn/?p=924 2015-12-01: 采用scanner读数据流,再也不用担心s16不能执行net user/ipconfig/netstat -an等命令了。 增加复杂数据包(multipart/form-data)提交方式进行漏洞利用,可绕过部分防护。可执行命令,暂时无法上传文件。 2014-11-12: 最近遇到s19这个debug模式开启导致代码执行,这个有点少,但还是有一些,为了方便大家把13版本修改了一下。可以利用这个漏洞执行命令、上传shell。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值