转自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
感谢各位前辈分享的经验