今年是挖洞的一年了,也对web
安全产生了感情,之前盲目于一直挖洞每天技术都没什么增长,多的仅是那么一点点的经验,而且通过这次的护网行动,也看出了自己的很多不足,说白了就是很菜然后自己还没看清自己,所以接下来的日子里,自己都会尽量去接触一些自己的知识盲区来扩大自己的知识面。
都是自己的一些心得,并非炒作于哪儿
针对url
跳转漏洞
1、在登录\注册\找回密码\退出处
2、站内跳(如在当前页面下写一个链接,然后我们点击的话就会以这种形式<a href='http://www.站内.com/?tourl=写下的链接'>写下的链接</a>
)还有404
页面跳,成功执行某操作的跳
3、退回(比如有些页面有返回的功能,就是跳转到上一个页面,而且是根据referer
值来跳的)
登录\注册\找回密码\退出
这些点我们可以考虑利用fuzz
来对其进行探查出跳转漏洞
我的fuzz
中理解为分 2 种
- 盲
fuzz
来找跳转参数 - 针对性找跳转参数
一个栗子(登陆处fuzz
)
这是一个登陆系统
1 | https://www.xxx.xxx/account/signin |
那么我们可以选择第一种办法来对其进行fuzz
来爆破出跳转参数,比如url
、go
、re
等,但是这种不一定有效而且高效,所以我一般会先尝试第二种办法 针对性 找跳转参数
1.审查源代码
因为很多跳转参数都是在前端构造的
2.查询hidden
、url
之类的参数(因为很多系统都会把要跳转的参数放在input
上,并且设置其为隐藏,这样子可以不影响界面美观,然后把value
的值作为跳转参数,登陆后读取其值来确认要跳转的地儿~)
那么我们就提取出这个returnUrl
构造在url
里
1 | https://www.xxx.abc/account/signin?returnUrl=http://www.xxx.abc/123321 |
这里第一步测试的时候是先填他的主域名(因为如果你一上来就填写你想跳转的url
他可能有过滤的可能直接将其替换为空或者是主站域名),后面的123321
是个人的日常习惯,用户定位源代码处的,这个小小小技巧也可以用在测试xss
漏洞上,快速定位源代码的回显处
3.查看效果
4.尝试直接输入想跳转的url
,看他是否有过滤
然后登陆后就成功跳转了~
再举一个栗子
一个管理员才可以登录的系统,可是俺没有账号密码如何判断他是否存在url
跳转呢o v o~,(我爆破不出来,我捡你一个洞总可以吧╭(╯^╰)╮)
如下是一个管理员的登录系统(只要不能注册的界面,俺都叫他管理员的登录系统)
1 | http://xxx.admin.xxx/supplier_web/login?returnUrl=http%3A%2F%2F127.0.0.1 |
可以看到这里不能注册,我们也不知道密码,那么怎么测试他是否可以跳转?
其实很简单
- 登录的时候抓包
- 修改状态码(把
flase
改成true
这些) - 然后就会跳转,因为这里的逻辑是,服务器通过判断状态码来给你构造一个登录流程,而这个登录流程支持跳转,那么就可以成功的测试出来啦~
本来服务器返回的
statusCode
是500
的,我将其修改为200
接着就有这么一个请求过来
成功跳转~
然后还有站内跳,成功提示后跳都是一样的,对参数进行fuzz
,然后绕过,如果绕不过就砸电脑一气呵成即可;
还有一个是adrian
师傅和我分享过的,把登录处的login
改成logout
,然后对跳转参数进行过滤的功能就不存在了,因为开发者都不会想到在logout
参数那里做参数过滤,然后就导致了可以直接导致url
跳转漏洞的产生
退回功能的跳转导致了反射xss
之前遇到过,但是忘记记录了,也是比较好玩的我大概讲解一下
1、打开http://www.111.com/back
他会跳转到referer
的值(而且这里可以解析html
,并且referer
值在script
脚本里<script>url = 'referer值';window.location.href=url</script>
)
2、我在自己的网站创建了一个文件(only_free.php
),然后其功能是跳转到www.111.com/back
,那么我可以这样子请求
1 | http://www.only_free.com/only_free.php?name=';alert(1);b='1 |
最后http://www.111.com/back
里的js
代码就变成
1 | url = '';alert(1);b='1';window.location.href=url |
然后就成功弹窗了。
作者微信:refuel_iamfree
有兴趣的朋友可以加我一起交流