首发于白帽笔记
web渗透测试之攻破登录页面

web渗透测试之攻破登录页面

当我们在做渗透测试时,无论厂商项目还是src众测项目,都会遇到给一堆登录系统的URL,然后让我们自己去测,能不能进去全看天的状况,本文将讲一下怎么突破这种封闭的web系统,从而进行更深层次的渗透 ,学完后你会发现,其实你就是系统管理员。

0x0 0系统绕过:


如果能直接绕过登录系统界面,后面的就比较好做了,目前常见的登录系统绕过方法有:

  1. 利用xss获取到已经登陆用户或者是管理员的cookie,替换cookie后进入系统
  2. SQL注入利用万能密码登录,常见的万能密码有: 'or'='or' 'or 1=1/* admin' or 1=1/*
  3. 通过扫描系统目录,目录遍历,google hacking找到未授权访问的登陆页面,直接进入到系统内部
  4. 用burp抓取数据包,更改URL中的id参数,更改用户名密码字段(比如直接删去密码字段),更改cookie字段,可以越权登录到系统内部

0x01 密码爆破:


大部分情况下,系统登录页面都不存在xss,目录遍历,SQL注入等漏洞,这时候最常用的方法就是爆破和猜解登录口令,密码猜解最关键的就是字典要高效准确


  1. 在应用层http/https爆破密码的常用工具是burpsuite 安装教程请自行百度,burp最新破解版下载地址:

2.准确的用户名,密码字典是高效破解的重中之重 ,一般都是指定几个常见用户名 ,尝试 top500,top1000进行爆破 字典不必要太大,最重要的是针对性要强 ,下面是top1000:

链接: pan.baidu.com/s/1-XztuB 密码: 56pb


3.如果还是不能猜解成功,就要根据目标信息用字典生成器构造针对性的字典来猜解了,推 荐几个比较好的字典生成工具

pydictor:

crunch:

Cewl:

Cupp:

0x02系统管理员爆破


因为管理员权限较高,通常我都会先进行管理员口令的猜解,总结了一些常见的管理员用户名字典

链接: pan.baidu.com/s/1sOD1-u 密码: 3yqe


用此用户名字典,再加上弱口令top1000,同时爆破系统管理员用户名密码


链接: pan.baidu.com/s/1-XztuB 密码: 56pb


0x03普通用户爆破


常见的普通用户用户名是姓名拼音,总结了普通用户字典

TOP3000姓名


链接: pan.baidu.com/s/1qN9kCF 密码: hkzp


TOP10w姓名


github.com/rootphantome


通常可以选择几个弱口令密码,比如:123456,123abc,111111,然后配合top10w来猜解登陆口令,一些初始化的默认密码也很简单,如果能找到配合top10w通常也能爆出登录口令

0x04 突破加密传输


现在的业务系统口令传输到后端前都会进行加密处理 ,web常见的加密方式有 md5 加密、sha1 加密、RSA 加密,在此基础上总结了两种破解方式:

1.利用burpsuite的payload processing功能,把字典按照加密方式先加密再发包

2.用字典生成工具生成加密好的字典,然后burp直接加载加密字典

这里推荐的字典生成工具是pydictor,encode功能内置了多种加密算法,调用handler工具直接加密自己的明文字典

0x05 突破登录IP地址限制


如果登录系统设置了IP地址白名单,我们可以通过下面的几个http头字段伪造IP地址,用burp抓包后将下面的某个http头字段加入数据包发送到服务器

Client-Ip: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Forwarded-Host: 127.0.0.1


0x06 图形验证码绕过方式


如果在系统登陆界面加上了验证码,那么上面的方法基本上就都失效了,那有什么方法可以绕过验证呢


1.图形验证码不刷新

在一段时间内只要不刷新页面,无论登录失败多少次都不刷新验证码,这个时候就可以使用同一个验证码根据上面的方式进行暴力破解


2.验证码失效

不管在验证码表单输入什么样的数据,都会判断通过,但这种情况很少见


3.图形验证码可被识别,抓包直接可以获得验证码

很多网站的验证码都可以在请求数据包中找到,或者隐藏在request的cookie中,response的源码中,可以利用burpsuite的macros来匹配response中的相应数据,具体的爆破方法参见下文:


4.图形验证码参数直接绕过

对于request数据: user=admin&pass=1234&vcode=brln,有两种绕过方法:

一是验证码空值绕过,改成 user=admin&pass=1234&vcode=;

一是直接删除验证码参数,改成 user=admin&pass=1234。


5.万能验证码

渗透测试的过程中,有时候会出现这种情况,系统存在一个万能验证码,如0000、9999,只要输入万能验证码,就可以无视验证码进行暴力破解。


6. 验证码可被识别

有些图形验证码加入的像素线条过于简单,使用图形验证码识别工具可以识别出每次更换的验证码,在平常的漏洞挖掘过程中,如果我们发现登录的验证码非常简单且易于识别,那我们就可以尝试使用自动化工具来进行登录破解了,如 PKAV 的 HTTP Fuzzer

7.使用机器学习算法识别验证码

主要是对特定网站的图形验证码训练识别模型,达到一定的准确率就可以调用进行模拟提交图形验证码的值了。可参考以下三篇文章进行学习:

使用KNN算法识别验证码:

nladuo.github.io/2016/0

卷积神经网络识别验证码

nladuo.github.io/2016/0

使用 TensorFlow 训练验证码

nladuo.github.io/2017/0


0x07:短信验证码绕过


对于网站要求输入手机号,接收手机短信并校验短信验证码是否正确进行登录的系统,突破的主要思路有:

1.短信验证码生命期限内可暴力枚举

在验证码还未过期的时间段内,可枚举全部的纯四位数字、六位数字等较简单的短信验证码;


2. 短信验证码在数据包中返回

和图形验证码一样,在response中可以直接获取到短信验证码。


3. 修改请求数据包参数或 Cookie 值绕过

比如有 post 数据包:mobile=12435437658&userid=123456, Cookie中有:codetype=1

在特定步骤,修改 mobile=自己的手机号,自己手机就可以收到别人的验证码,后面再用别人的手机号和接收到的验证码登录;

修改 Cookie 中可疑的参数和值,进行绕过,比如上面修改 codetype=0;


4. 修改返回包绕过

提交错误的短信验证码,返回包中有: status=false,在Burpsuite中修改为 status=true,即可绕过前端判断,成功进入系统。具体还要结合实际的场景,灵活操作。



总结:

web系统登陆页面看似铜墙铁壁,但其实只要梳理一遍思路,右键看过每一行网站源码,弄懂每个参数的意义,查看每一个js文件,就会发现其实自己就是系统管理员,只是我把密码忘了,现在我要用上面的方式进入。

发布于 2018-04-03 15:33