从零开始写网站登录爆破(一)
0x00简述
本文从零开始介绍一个网站登录爆破脚本的编写过程,通过脚本模拟网站登录的作用有以下几点:
1,web类安全工具需要一个强大的爬虫爬取目标网站的所有页面,以确认漏洞利用点。
如果遇到需要登录才能爬取的情况,可以爬虫直接模拟登录过程。
2,已知部分信息,爆破网站后台,为下一步的渗透做准备。
关于登录爆破在《blackhat python》这本书中有一个例子,但是我用requests和beautifulsoup做了一些修改,后续还会以此为基础添加更多的功能。
0x01网站的认证过程
要模拟登录网站就要知道网站的登录认证过程,这里以joomla这款开源cms为例。
配置浏览器使用代理,本地127.0.0.1 8080端口,我使用了owasp zap
这款工具,其他的工具如Burpsuite或者直接F12 都可以查看到包的信息。
第一步,首先访问后台登录页面,抓包查看发现返回包中包含“SetCookie”响应头,cookie此时作为认证用户身份的凭据,且每次访问都会改变。
第二步,接着POST方法提交登录信息,同样抓包查看
可以看到包里的参数不只有账号密码,还有token(用于防御CSRF)还有task等等。
认证的同时要抓取页面表单的其他input标签的name和value。joomla的较为简单,网站一般不会明文传输用户名和密码,遇到这种情况需要分析引入的js文件,模拟加密算法。
第三步,可以通过代理历史页面看到,post请求触发了303跳转跳回了原url相当于又实现了一次GET请求,可以查看到这次请求携带了之前设置的cookie。
到这里网站的基本认证流程就结束了,接着我们用工具自动化
0x02HTTP方法
登录过程中用到了两种方法,GET和POST方法,用reqeusts实现很简单
import requests res_get=requests.get(url) res_post=requests.post(url,data=data,cookies=cookies,headers=headers)
其中data属性接收一个dict作为post的数据,cookies和headers
请求头都可以自己定义,将准备好的请求头用dict封装就可以伪造一个firefox浏览器的请求
cookie处理的两种方法
cookie值在第一次请求目标url的时候就已经设定好了
res_get.headers['Set-Cookie']读取响应头取出set-cookie字段解析成dict
另一种 cookies=res.cookies 自动处理可以直接传入
