编辑: 笔墨随风 | 2019-08-12 |
分享自己的思路与常用技巧,欢迎同道中 人一起交流思路. 注:本文有一定的攻击性操作,仅为安全从业人员渗透测试思路交流,请在法律条规 允 许的范围内进行安全测试. ###?正面冲锋 ? 《突破封闭 Web 系统的技巧》由两篇文章组成.这是
第一篇文章 正面冲锋 . 遇到需要登录才能进一步测试的系统,又没登录口令?没关系,我们有不少正面冲锋 的小技巧,相信你看完一定会有所收获. ####?0x00:登录绕过 ? 如果能绕过系统认证,直接登录,那就万事大吉了!目前绕过登录认证的方法主要 有:
1、SQL 注入万能密码登录,语句: a'
or '
1'
='
1'
--
2、XSS 获取到已登录系统的用户 Cookie,替换后进入系统
3、通过列目录漏洞、google hacking、目录文件扫描等手段,发现可以未授权访问 的管理页面,可以直接进行操作
4、通过抓包,更改用户id、登录名或 Cookie 中的敏感认证字段值,可越权登录访 问
5、通过已知的后门链接或代码中固化的后门管理口令,直接登录 ####?0x01:密码猜解 ? 大部分系统登录是绕不过的,最常用的还是猜解已知用户名的密码,用合法的凭证登 录系统. Web 系统进行密码猜解,大部分人喜欢叫密码爆破,因为猜解一个人的密码,通常需 要成千上万条的密码来尝试.密码猜解的目的是准确、高效的获得已知用户的正确密 码.
1、用来发送 HTTP/S 协议爆破密码的工具主要使用 Burpsuite. 其它的就是用一些脚本,自己造轮子或用已经写好的较为通用的发包脚本,如htpwdScan https://github.com/lijiejie/htpwdScan
2、高效的保证就是猜解时使用的密码字典要合适. 一般是先尝试TOP
500、TOP1000: https://github.com/LandGrey/pydictor/blob/master/wordlist/SEDB/ ChineseWeakPass1000.txt TOP10000 系列的 通用弱口令字典: https://github.com/danielmiessler/SecLists/tree/master/Password s 不必要太大,合适就好.
3、没有猜解成功的话,就需要自己根据目标的信息构造针对性的字典来爆破了. 可以自己写脚本生成,但是费时费力,对于比较急的任务往往不适用.推荐一下自己 写的一个高级字典生成工具 pydictor: https://github.com/LandGrey/pydictor 可以直接配置里面的规则生成字典,也支持高级玩家根据API写自己的密码生成插 件,一劳永逸. 其它的一些比较好的字典生成工具推荐 crunch: https://sourceforge.net/projects/crunch-wordlist/files/ Cewl: https://github.com/digininja/CeWL/ Cupp: https://github.com/Mebus/cupp ####?0x02:管理员猜解 ? 在不能判断系统中存在什么样的用户名时,通常先进行管理员用户名的猜解,然后再 根据存在的用户名进行密码破解.我总结了一个常见系统管理和测试用户名字典 AwesomeSystemTestUsername https://github.com/LandGrey/pydictor/blob/master/wordlist/NiP/A wesomeSystemTestUsername.txt 可以做为管理员用户名的猜解使用. 另外,如果系统对存不存在某用户名无任何提示时,可以直接使用上面的字典,加上 弱口令 TOP1000 https://github.com/LandGrey/pydictor/blob/master/wordlist/SEDB/ ChineseWeakPass1000.txt 同时爆破常见管理员和测试用户的用户名和密码,常有意外收获! ####?0x03:普通用户猜解 ? 如果封闭系统是个多(几十或几百个)业务员系统,那么此时最好用一个普通用户名字 典进行猜解.常见的是使用姓名拼音字典.比如 TOP500: https://github.com/rootphantomer/Blasting_dictionary/blob/maste r/top500%E5%A7%93%E5%90%8D%E7%BB%84%E5%90%88.txt TOP10w: https://github.com/rootphantomer/Blasting_dictionary/blob/maste r/top10W.txt 等等.高级点的可以自己从中文姓名用脚本转化为拼音字典,不再赘述. 同样,如果一个系统对存不存在某用户无任何有用提示,要猜解的用户名又非常多的 情况下,可以只选几个弱口令
123456 , abc123 ,
1234 ,
1111 , 同时 爆破用户名和密码,效果会非常好. 另外,多用户系统也常有初始化的默认密码,通常比较简单.如果能找到的话,配合 10w姓名拼音字典,相信会赚的盆满钵满! ####?0x04:突破加密传输的口令 ? 有些业务系统的口令传输到后端前,为了安全和老板的要求,通常是由前端 js 进行 编码或加密后再传输的.常见的 Web 系统编码和加密方式有 base64 编码、md5 加密、sha1 加密、DES 加密、AES 加密、RSA 加密.这时候,我总结了以下三种爆破 方法: 一:用爆破工具的内置功能,按照加密方法先加密后发包. Burpsuite 的 Payload Processing 功能在此方面有明显优势. 二:用字典生成工具生成加密好的字典,然后爆破工具直接加载字典 在生成加密字典方面,pydictor 是不二之选. encode 功能内置支持多种加密方法,并且支持自定义加密方法,直接调用 js 文件 中的加密方法进行加密等.另外,还可以用内置工具 handler,加密自己现有的明 文字典,让字典适用本次爆破场景. 当然,也可以自己写轮子直接调用可以解析 js 语法的组件并执行,例如 python 的execjs 模块、pyv8 模块等,原理和 pydictor 调用 js 文件中的加密方法相 同. 三:用selenium+webdriver 模拟浏览器提交登录口令 对于某些动态加密或难以还原加密算法的场合,可以用 selenium+webdriver 模拟 浏览器操作,自动填写密码提交.具体实现和应用可参考文章 《基于 SELEINUM 的 口令爆破应用》 http://sm0nk.com/2017/11/27/%E5%9F%BA%E4%BA%8ESeleinum%E7%9A%84 %E5%8F%A3%E4%BB%A4%E7%88%86%E7%A0%B4%E5%BA%94%E7%94%A8/ ####?0x05:突破登录?IP?地址限制 ? 如果对方系统设置了可以登录系统的IP地址白名单,是不是就不能登录了? 也不一定,可以尝试用下面的
9 个HTTP 头字段,伪造下 IP 地址碰碰运气. 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 伪造后也不行,可以试试将正常的 IP 地址部分改成 sql 注入语句、xss 语句.可 能触发不了漏洞,但我确实遇到过异常字符使当前处理流程异常的.欧洲人直接登录 成功,真是无 fuck 说. ####?0x06:图形验证码绕过 ? 对于上面的几种情况,一旦出现验证码,我们就不能愉快的爆破口令了,那么有什么 方法可以绕过验证码进行密码猜解呢? 1. 图形验证码不刷新或无效 手工尝试一次登录后,在某一时间段内无论登录失败多少次,只要不刷新页面 Session 不过期,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行 暴力猜解;
登录失败之后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失 败,点击确定后返回登录界面且验证码刷新.这种情况下,只要我们不关闭新窗口或 弹窗,验证码就不会失效;
还有就是不管输入什么数据,验证码都会判断通过的极少数情况. 2. 图形验证码值可直接获取 验证码通常会被他们隐藏在网站的源码中或者在请求的 Cookie 中,或在 response 数据包中返回: 可以写脚本正则匹配也可以用 Burpsuite 的macros 功能 http://blog.csdn.net/d_pokemon/article/details/78194351 来匹配返回数据包中数据. 3. 图形验证码参数绕过 对于请求数据: user=admin&
pass=1234&
vcode=brln,有两种绕过方法,一是验证 码空值绕过,改成 user=admin&
pass=1234&
vcode=;
一是直接删除验证码参数,改成user=admin&
pass=1234. 另外有时修改或删除 Cookie 中的一些值也可以绕过,导致不需要填写验证码也可 以登录. 4. 存在无验证码页面 经过测试,如果我们发现网站验证码自身并不存在缺陷,那我们接下来就可以尝试寻 找一些其他的登录页面或接口来尝试暴力破解.如隐藏的页面、测试页面、老旧版本 的页面等. 5. 万能验证码 渗透测试的过程中,有时候会出现这种情况,系统存在一个万能验证码,如
0000、 9999,只要输入万能验证码,就可以无视验证码进行暴力破解. 6. 验证码数量有限 多见于计算类型的验证码,如1+2=?,这种类型的验证码严格意义上来说不能叫做 验证码,多刷新几次验证码,我们可能会发现系统中的算数题目只有那么几道,这种 情况下只要将验证码全部下载下来,生成一个 md5 库,然后将前端生成的验证码与 本地文件进行对比即可. 7. 简单验证码识别 在平常的漏洞挖掘过程中,如果我们发现登录的验证码非常简单且易于识别,那我们 就可以尝试使用自动化工具来进行登录破解了,如PKAV 的HTTP Fuzzer、python 调用 tesseract-ocr 库等. 8. 使用高级算法识别验证码 还没有仔细研究过,主要是对特定网站的图形验证码训练识别模型,达到一定的准确 率就可以调用进行模拟提交图形验证码的值了.可参考以下三篇文章进行学习: 使用KNN算法识别验证码: http://nladuo.github.io/2016/09/22/%E9%AA%8C%E8%AF%81%E7%A0%81% E7%A0%B4%E8%A7%A3%E6%8A%80%E6%9C%AF%E5%9B%9B%E9%83%A8%E6%9B%B2% E4%B9%8B%E4%BD%BF%E7%94%A8K%E8%BF%91%E9%82%BB%E7%AE%97%E6%B3%95 / 卷积神经网络识别验证码 http://nladuo.github.io/2016/09/23/%E9%AA%8C%E8%AF%81%E7%A0%81% E7%A0%B4%E8%A7%A3%E6%8A%80%E6%9C%AF%E5%9B%9B%E9%83%A8%E6%9B%B2% E4%B9%8B%E4%BD%BF%E7%94%A8%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F% E7%BD%91%E7%BB%9C/ 使用 TensorFlow 训练验证码 http://nladuo.github.io/2017/04/10/%E4%BD%BF%E7%94%A8TensorFlow %E8%AE%AD%E7%BB%83Weibo-cn%E9%AA%8C%E8%AF%81%E7%A0%81/ ####?0x07:短信验证码绕过 ? 对于网站要求输入手机号,接收手机短信并校验短信验证码是否正确进行登录的系 统,突破的主要思路有: 1.短信验证码生命期限........