漏洞挖掘的两大技术和八大技巧

技术一、JS 加密参数逆向以及利用

技巧 1: JS 在漏洞挖掘中的重要地位]

技巧 2: 浏览器控制台使用技巧和方式

技巧 3: JS 断点技巧以及 Hook 注入

技巧 4: Python 和 JS 结合解决加密难题

实战 1: 实战 MD5 加密逆向加密参数还原

技术二、FUZZ 的精美艺术，产出直线提升

技巧 5: 常见 FUZZ 姿势和工具以及字典

技巧 6: 未知目录，信息泄露，备份文件等漏洞中的 FUZZ

技巧 7: 弱口令，隐藏变量，未知参数中的 FUZZ 骚姿势

技巧 8: SQL，XSS，SSRF，CSRF 等漏洞中的 FUZZ 技巧

实战 2: 实战 FUZZ 渗透到远程 RCE 漏洞控制电脑 (百分之 80 的 src 会用到)

技术一、JS 加密参数逆向以及利用

1.1 技巧一、JS 在漏洞挖掘中的重要地位

1.1.1 JavaScript

JS：javascript 是 web 页面的脚本语言，主要用来向 HTML 页面添加交互行为，有以下几个作用：

嵌入动态文本于 HTML 页面；

对浏览器事件作出响应；

读写 HTML 元素；

在数据被提交到服务器之前验证数据；

检测访客的浏览器信息。

1.1.2 HTML、JS、CSS 区别

HTML：毛坯房

CSS：装修

JS：让家动起来，增加了智能家居

1.1.3 JS 在漏洞挖掘中的重要地位

JS 中存在插件名字，根据插件找到相应的漏洞直接利用

JS 中存在一些 URL 链接，根据 URL 找到相应的页面进一步测试和利用

JS 中存在一个子域名，可以直接访问子域名

JS 中的一些注释可能泄露账户密码或者其他的

1.1.4 Jsfind

使用 JsFind 查找 JS 中泄露的 url 链接和域名（京东）

Copy
python jsfind.py -u "http://www.jd.com"

1.2 技巧二、浏览器控制台使用技巧和方式

网络是对整个网络请求发起的一个监控，可以监控流量。

禁用缓存：如果打上勾，每次都会从浏览器获取数据。在渗透测试、漏洞挖取的过程中需要打开。

调试器 (源代码)：将网站的 js 代码存储起来

点击右下角{}可以格式化

可以进行断点挑食

控制台：可以对 js 中的函数进行一些操作

1.3 技巧三、JS 断点技巧以及 Hook 注入

Hook：使用 python 进行爬虫、渗透，绕过图片验证码需要使用到

1.3.1 JS 断点调试

JS 打断点，打到断点处就不运行了，选择单步步入就行。

1.3.2 怎么找断点

按照关键字在调试器中全局搜索，跳转到需要的位置，在 js 行点一下，变成蓝色即可。

注意：MD5 函数可以自定义，在破解密码的时候，需要找到真正使用的 MD5 的函数

1.4 技巧四、python 结合 JS 解决加密难题

JS 代码 test.js

Copy
# js 加密函数
function encryptByDES(message) {
var encrypted = message;
encrypted = encrypted + "asdfdsaf";
return encrypted;
}

通过 python 调用 js 文件中的的函数

Copy
# 安装execjs pip install pyexecjs
# pyexecjs 已于2018年停止维护，目前可以使用js2py代替
import execjs
with open('test.js', 'r') as f:
a = execjs.compile(f.read())
# 调用 test.js 文件中的 encryptByDES 函数，且传入的参数是 password
result1 = a.call('encryptByDES', 'password')
print(result1)

1.5 实战、MD5 加密逆向加密参数还原

使用 bp 拦截，获取信息

在浏览器控制台中根据关键词password搜索，找出对password进行处理的js函数；

使用python代码调用js中的处理password的函数，并根据错误提示补全function和其余的参数；

对比经过python跑出来的值和bp拦截得到的值，看是否相同；

如果相同，则可以使用python对密码字典进行处理，然后再使用bp进行暴力破解。

技术二、FUZZ 的精美艺术，产出直线提升（技术）

技巧五、常见 FUZZ 姿势和工具及字典（技巧）

2.1.1 FUZZ 模糊测试

FUZZ：作为名词时译为 “绒毛；模糊；细毛；警员”

核心思想：只知道一部分条件的情况下，需要进行一个很模糊的测试，使用不同的东西进行不断的测试，直到得到一个想要结果。

例如：支付宝大额转账，需要填写部分信息。

2.1.2 都可以在哪些地方用到fuzz的技巧呢？

破解密码的时候

扫描目录的时候

扫描参数的时候

测试漏洞的时候

过 WAF 的时候

看到的任何参数，其实都可以使用FUZZ去测试

。。。。很多很多，每个地方都可以fuzz

FUZZ用得好，漏洞少不了

目录扫描，暴力破解的核心思想就是FUZZ，很多时候，工具搞不定的问题 ，可以手动FUZZ一下，会有意想不到的结果。

2.1.3 优秀的 FUZZ 案例

2.1.3.1 参数FUZZ实战漏洞

在某src漏洞挖掘过程中发现了一个有趣的文件http://36...*/upload_image.php，访问的时候内容为空白

对于这种页面，毫无疑问，要对参数进行FUZZ对其参数进行FUZZ，发现了一个参数字段为do

发现了 http://360...*/upload_image.php?do可以用

然后对do这个参数进行FUZZ，然后bp一下

构造出了http://xxxxx/image_upload.php?do=upload，并对其进行访问，成功出现上传表单，得到如下界面。

上传文件后FUZZ上传路径

Copy
http://36.*.*.*/uppload -------> 403
继续fuzz
http://36.*.*.*/upload/images ------->403
。。。。
发现文件路径，构造url
http://36.*.*.*/upload/images/skr_anti.php

然后使用远控工具连上对方服务器

2.1.3.2 FUZZ 隐藏参数和字段

对目录扫描发现如下的文件

对其文件进行定位

构造目录访问

Copy
将提示中的信息构造到url中进行访问
http://....../start/face_xxx
访问接口，提示Method Not Allow，405错误，那么显然，我们得换POST传参

POST随便传个参数过去，发现接口提示Request error, content-type was unsupported

继续FUZZ content-type head

FUZZ出来application/json的content-type头可用，那么简单了，构造JSON继续FUZZ JSON数据参数

利用本处SSRF完全可以批量对内网Redis进行密码喷洒 + 反弹shell对边界进行突破

2.1.3.3 JS 和 FUZZ 的结合

访问一个登录页面

设置账号密码开始暴力破解密码

测试出来的账号密码登录没有任何的反应，登录页面也只是登录页面

不可能放弃的继续FUZZ目录，发现存在/JS/目录，开始对里面的东西进行FUZZ

根据发现的链接，构造url并访问，发现了新的页面

发现此处有一个logout，根本没有登录过的地方，怎么会有？于是推测出，底下的账号密码显示的是刚才爆破的，但是发现好像没有什么用处。

接着发现JS的文件，发现如下规律

接着FUZZ域名，发现了一个 会展 页面

接着使用bp抓包，修改返回数据，登录成功。

成功访问站点

技巧六、未知目录，信息泄露，备份文件等漏洞中的 FUZZ（技巧）

2.2.1 未知目录

分别逐级FUZZ网站的目录与文件；

根据FUZZ出来的路径，分别FUZZ参数和路径；

循环反复的进行FUZZ，直到得到你想要的结果。

技巧七、隐藏变量，未知参数中的FUZZ骚姿势

根据得到的url进行初始目录和参数FUZZ；

然后根据FUZZ结果进行大胆的预测，并根据预测进行FUZZ；

根据上一步得到的结果，构造新的URL，进行访问，并再次FUZZ；

循环上述的操作，直到得到你想要的结果；

注意：重点是耐心、细心、大胆预测，并根据逐步的扩大字典的数量。

技巧八、SQL，XSS，SSRF，CSRF 等漏洞中的 FUZZ 技巧

靶场：phpStudy/PHPTurorial/www/pikaqiu/pikachu

在实际的渗透测试过程中，需要过 WAF，就可以使用FUZZ对内容进行过滤，只需要将所有的内容使用bp导入进行测试，在结果中就可以找出哪些东西是没有被WAF过滤的。

2.4.1 案例：挖掘pikaqiu靶场的sql注入漏洞

哪些参数可以FUZZ

可以FUZZ的参数：

GET行中的参数

Cookie行中的参数

其他的参数

使用bp，导入字典进行FUZZ

根据bp得出的结果，构造URL进行访问，获得想要的结果

实战二、实战 FUZZ 渗透到远程 RCE 漏洞控制电脑

使用浏览器访问指定的地址，并打开浏览器控制台

红色框中就是网站的目录文件以及JS文件，查看目录和文件中是否有我们需要的信息。

如果没有，可以FUZZ JS 目录（通常情况下，有JS目录，可以先FUZZ JS目录）

构造完整是JS URL;

使用bp进行拦截；

导入字典，进行攻击；

根据bp攻击的结果进行二次分析，如果没有想要的信息，可以继续进行二级FUZZ，并重复上面的步骤；

分析bp结果，构造URL，进行访问，得出结果。

bp结果展示

如果FUZZ JS 目录没有得到结果，就使用上述步骤，继续FUZZ其他目录。

注意：在FUZZ过程中，可能需要对不同的参数，不同的目录，不同的content-type等反复进行FUZZ，需要注意细心查看每次bp得出的结果。

最终的结果：获得网站的getshell权限，在得到可上传的的URL之后，修改bp中的请求数据，传入木马（例如：一句话木马），发送到对应的URL，然后在浏览器中进行访问，最终得到结果。

Copy
<?php
system("whoami")
?>

Copy
<?php
phpinfo();
?>