漏洞挖掘CheatSheet

0x00 前言

漏洞挖掘技巧的一个小备份,打√表示技巧成功测试过的。

0x01 逻辑漏洞

未授权接口

  1. 一般app.js为主文件,JS格式化后一行一行看。如果有混淆可以用jsnice反混淆一下。

  2. 前端的JS和登录后的JS可能不一样,可以互相拼接尝试。

  3. 通过ctrl+F搜索url,path,location等关键词,或者搜索routes,data,home,secret等。 [√]

  4. 访问网站时预加载的js文件可能不是全部,可以ctrl+F搜索.js等关键词。

  5. 如果接口提示缺少参数,如{msg:params error},可尝使用字典模糊测试构造参数,进一步攻击。 [√]

  6. 后台登陆后js文件也可以看一看。 [√]

  7. 针对Webpack等前端打包工具:https://github.com/rtcatc/Packer-Fuzzer
    专门针对前端vue框架的JavaFx图形化GUI漏洞扫描工具:https://github.com/zangcc/Aakian-v1.0
    前端加密Fuzz插件:https://github.com/c0ny1/jsEncrypter

  8. 常见接口:

    添加 删除 修改 查询
    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
  9. 以及其他常见未授权:

    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/

  10. 如果当前目录http://www/wwwxx/login.html无法进行渗透下去,可以尝试转到上层目录查看http://www/wwwxx/,访问时需要关注加载的数据包。 [√]

  11. 接口程序溢出,int最大值为2147483647,可尝试使用该值进行整数溢出,观察现象。

  12. 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

越权

  1. 多注意cookie中,请求参数中,可疑的加密值,例如:id值,value值等,修改可能就很造成越权;如果加密值无法解密,有条件下可以尝试使用另一个账号的加密值替换看看。

  2. POST提交数据中的name值,txtNumber值,id值,应用中心修改ROLE_1值,个人中心GET请求的参数值,还有其它可疑的参数等。

  3. 同一个请求包更换普通用户cookie或者token去请求看返回结果,是否跟管理员一样。

  4. 如果接口的响应包JSON中含有提交数据包中不包含的数据,可以尝试提交修改。比如修改个人资料界面,回显返回JSON数据显示手机或积分等数据,可以测试修改手机或积分。

登录逻辑

  1. 尝试拦截响应包修改其中的ret值,看是否存在逻辑绕过的情况(一般可以尝试true、success、200、0、1、ok等) [√√]
  2. 同一系统登录返回包复用

验证码

  1. 图片验证码可尝试设置为空,如:code=undefined
  2. 返回包可能会存在验证码,或者直接写到cookie里。 [√]
  3. 请求的验证码如果包含尺寸参数,可尝试拒绝服务攻击。
  4. 万能验证码,例如:四位数的时候,可能四个0000,6666,1111,8888,9999;六位数可能是000000,666666,111111,888888等。 [√]
  5. [?]观察Cookie中,参数中是否有发送给用户的内容,可以尝试更改,可以构造钓鱼链接。
  6. 删除验证码或cookie里的值可以直接爆破账号密码 [√]
  7. 如果验证码有实效,可尝试一段时间内重复发送获取验证码,因为有实效,所以有可能会延长验证码的时长。
  8. 短位数验证码且无防护可以尝试爆破。 [√]

短信轰炸

  1. 纵向短信轰炸
    • 短时间内多次重发数据包
    • 多次加入手机号,例如phone=13333333333&phone=133333333333,或者phone=13333333333,133333333333
    • 修改cookie重放数据包
    • 手机号前后加空格,86,086,0086,+86,0,00,/r,/n, +,以及特殊符号等 [√]
    • 手机号输入邮箱,邮箱处输入手机号
    • 请求参数更改大小写,或增加请求参数,例如&id=1
    • 多测试接口,登录处可能做了防护,但是找回密码处没做,或者注册流程中也没做
    • 修改回显
    • 位数不够,138888888889:12位经过短信网关取前11位,导致短信轰炸
  2. 横向短信爆破:phone=13333333333,13888888888… [√]
  3. 获取短信验证码时,用逗号隔开两个手机号,有可能两个手机号能获取到同一个验证码。 [√√]

0x02 数据库

Redis

如果开放了redis服务(1234端口),可以尝试使用/actuator/redis/info语句看是否能读取敏感信息,如:http://www.xxx.com:1234/actuator/redis/info

SQL注入

Mysql

  1. 可以尝试使用&&替换and,如:' && '1'='1' %26%26 '1'='1
  2. waf过滤了=,可尝试用like替代。如:and 1 like 1

万能密码

  • '=0#

0x03 信息搜集

资产

  1. 在搜狗搜索中选择微信可以搜索相关企业相关公众号资产。
  2. 获取账号:文库,QQ群,github泄露,借/租/买账号。[√]
  3. 可以通过图标哈希收集资产。

字典

  1. 拿baidu.cn举例,可以使用baidu生成字典,也可以使用生成字典,反正全称或者简称都可以尝试。

  2. 企业邮箱前缀也可以作为用户名或者密码的字典制作,如hx@huoxian.com

  3. 学号比较大的可能性是你的入学年份加上一系列编号;内部的工号可能与隶属部门关联,例如:老师可能是T2019001,t2019001。

  4. 还有人名可能也存在,如:zhangsan或者zs。

  5. 密码喷洒是用来收集用户名的。

  6. 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

口令复用

  1. 通过上述步骤获取一个账号密码后,可以使用该账号和密码去碰撞别的系统。例如账号是zhangsan,密码是123456;可以拿zhangsan/123456去登录,还可以尝试zhangsan/zhangsan去登录。
  2. 通过登录进去后如果有相关敏感信息,比如出生日期,手机号,身份证,可以尝试搜索资产看看有没有系统默认密码尝试去登录;还可以拿敏感信息去生成相关字典。

威胁情报

  1. 网盘
    1. 可以通过企业名+关键词的形式进行排查
      1. 常见关键词:合同、设计图纸、身份证、花名册、通讯录、报表、投标文件、入职
    2. 情报提交时说明网盘链接和截图,方便厂商排查
  2. 搜索引擎
    1. 关键词:机密等级、身份证号、PDF、index of、Backup、sfzh

敏感路径

结合任意文件读取任意文件下载漏洞使用。

Linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/redhat-release 系统版本
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/var/lib/mlocate/mlocate.db //全文件路径
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/porc/self/cmdline //当前进程的cmdline参数
/proc/sched_debug 配置文件可以看到当前运行的进程并可以获得对应进程的pid
/proc/pid/cmdline 则可以看到对应pid进程的完整命令行。
/proc/net/fib_trie 内网IP
/proc/self/environ 环境变量
/proc/self/loginuid 当前用户

0x04 文件上传

Zip目录穿越实现文件上传[√]:

  1. 在Linux系统下,在shell的当前目录新建若干个文件夹
  2. 进入到文件内,使用命令zip shell.zip ../../../shell.php将shell打包进zip
  3. 上传zip,观察shell是否实现穿越

0x05 其他

  1. Gitlab平台漏洞 - CVE-2020-10977
  2. 模板注入:以Python为例,列出当前目录下所有文件的Payload:{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir('.')}}
  3. 如果泄露阿里云的 AKSK,可以使用AKSKtools工具进一步利用。https://xz.aliyun.com/t/8429
  4. 最短xss测试:a

0x06 参考

SRC常用思路 - 原创文章发布(Original Article) - T00LS | 低调求发展 - 潜心习安全

Power7089/PenetrationTest-Tips: 渗透测试,渗透测试小技巧,渗透测试Tips,师傅们跟我一起维护更新吧~ (github.com)

越权漏洞(IDOR)测试技巧_culprits的博客-CSDN博客_接口越权测试


漏洞挖掘CheatSheet
https://k1nm0.com/2022/06/26/漏洞挖掘CheatSheet/
作者
K1nm0
发布于
2022年6月26日
许可协议