查找sql注入
首先在登录处查找
不啰嗦 直接seay查看源码
分析:
判断action这个参数是否ck_login
一开始不知道ck_login是什么,抓包发现请求这个url来登录
之后对于user、password进行了赋值,值得注意的是fl_value、fl_html这两个函数,经过定位发现是过滤。
f1_value将关键字替换成了空。
f1_html将字符转换为 HTML 实体。
判断submit是否存在,正常登录是有这个数据的。
!isset($submit)
isset 判断这个参数是否设置,是则返回true,不是则返回false.
!isset($submit)则返回false
然后接着if判断
empty判断参数是否为空 空则返回false
empty($user) || empty(&password) 则需要两个都不为空,才能进入下一个if判断
开始判断验证码
直接全局搜索sys的话会搜索出来很多,这里作者选择全局搜索safe_open
明显轻松了很多
继续追踪找到了信息
是一个数组
通过foreach循环了3次才开始判断
if($v=='3'){
if($code!=$s_code){msg("验证码不正确!");}
接着追踪$s_code
这里判断了session是否有验证码,如果没有则生成,这里由于作者对于验证码的生成不了解就不继续看下去了。
最后使用check_login($user,$password)传递参数开始了对比数据库。
查找check_login函数
匹配密码的逻辑为:
首先通过传递过来的账号查询是否存在,如果不存在则提示不存在改管理用户
如果账号存在,则将传递过来的密码进行md5加密和数据库查询出来进行匹配,如果不一样则提示该账号已经锁定,无法登录。
最后查询是否被锁定。
可以看出来安全意思还是很强,下面获取ip均使用了过滤。
这里的话明显的可以看出对XSS和SQL注入进行了防护,过滤了很多SQL注入的字符,但是吧,它是直接替换掉了,这里其实可以考虑双写绕过,但是想到联合查询在这里即使成功也只是返回一个密码不正确,没啥用,所以不再尝试,这里的话可以考虑布尔盲注和报错注入,我这里试一下报错注入,因为and被ban,所以用or,因为updatexml
中的update
被ban,所以在这里用extractvalue
来进行
1' or (extractvalue(1,concat(0x7e,(select database()),0x7e)))#
数据库为bees
成功!
标签:审计,判断,这里,code,是否,验证码,bees,login,cms From: https://www.cnblogs.com/me123/p/16814811.html