一个风和日丽的下午,突然来了个测试项目。
打开领导给我发的地址,发现是一个再熟悉不过的登录框。
先看了一下网站框架和操作系统之类的,发现没啥可以直接利用的点。
于是先对登录框动手,直接一手admin/123456然后登录失败。
不过也还行,起码用户名有了。那就直接扔到Intruder里爆密码,将返回包中的结果进行筛选。很遗憾,没发现有除了2以外的数字。
没弱口令我就挖个SQL注入去找管理员密码呗,加上单引号,没报错。
延时注入也无果。
无奈对网站目录进行扫描,看有没有旁挂的系统、目录遍历和上传接口之类的,但是天都黑了也没发现可利用的点。
僵持了一阵后,把目光放在了前端的JS上,那就硬刚JS吧。发现登录按钮绑定了点击事件,调用了doLogin函数。
Ctrl+Shift+F进行全局搜索函数名。
找到函数定义的地方。
查看代码发现通过switch判断很明显可以看出当Info为1时,是没有错误提示的,并且加载了一些内容。
因为Info是通过返回包赋值的,于是使用BP拦截登录请求的返回包,并修改该数据包进行一次前端绕过。
将返回包中的2直接改成1,假装自己登陆成功了。
发包后发现还真成功了!!!
正当我开心的以为再点一下就到管理后台了,一个302,登录框他又回来了。。。
欢迎登录~
不信邪的我又使用不同的姿势绕了好几次,始终看不到后台页面(哪怕是框架也好啊)。
又僵持了一阵后,发现修改完返回包伪造登录成功后,是多了几个数据包的,于是对那几个新数据包进行测试。
一个单引号报语法错误!!!
延时注入。
直接上sqlmap一把梭。
正当我想去--search -C "username"找用户表、查管理员密码进后台的时候。突然惊醒Mssql+DBA=起飞不是吗,直接拿数据库服务器他不香么。
查询是否为DBA,返回True无疑是最开心的。“select host_name();”,“select @@servername;”结果一样,不是站库分离,那就更简单了。
借助sqlmap开启xp_cmdshell成功执行命令,上线CS,Web测试结束。
原文始发于微信公众号(雁行安全团队):记一次前端绕过getshell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论