前言 遇到一种注入点,存在于POST参数中,却不能用sqlmap扫出: 分析 request参数格式: %24Q_value1=test1&orderCol=&order=+ASC+&_query_code=0&_%24Qvalue2=test2&rowCount=10000¤tPage=21 转换为sql语句: select * from xxx where value1=test1 and value2=test2; 该系统查询的参数类似上面
如果数据库运行返回结果时只反馈对错不会返回数据库当中的信息 此时可以采用逻辑判断是否正确的盲注来获取信息 盲注是不能通过直接显示的途径来获取数据库数据的方法 1.布尔盲注 2.时间盲注 3.报错型盲注 布尔盲注 某些查询是不需要返回结果的,金判断查询语句是否正确执行,所以其返回可以看做一个布尔值,正常显示为true,报错或是其他不正常显示为false. SELECT userid FROM member WHERE u_name=$name AND u_pass=$pass; 注入语句 name
SQL盲注 [SQL注入介绍] SQL盲注:不显示数据库内建的报错信息[内建的报错信息帮助开发人员发现和修复问题],但由于报错信息中提供了关于系统的大量有用信息.当程序员隐藏了数据库内建报错信息,替换为通用的错误提示,SQL注入将无法依据报错信息判断注入语句的执行结果,即为盲注. 思路:既然无法基于报错信息判断结果,基于逻辑真假的不同结果来判断 a. 1' and 1=1--+ b. 1' and 1=2--+ [输入前真后假,无返回,页面没被执行] ###a与b比较,表明存在SQL注
思考1:当# --+都被过滤时,只能考虑闭合处理 思考2:union联合注入时必须先判断字段长度 eg. id=1' order by 3 and '1'='1 sqli5: 首先判断出对id经过了'处理 其次发现结果不再回显 ok那就盲注了,先判断mysql版本,版本过低可优先考虑dns边信道攻击. bool盲注(and逻辑)的脚本(substr) # -*- coding: utf- -*- """ Created on Sat Mar :: @author: kensh
本文作者:Mochazz 如果所查询的用户id在数据库中,可以发现页面显示”You are in”,而不像前4关那样会显示出具体的账号密码. 如果sql语句查询结果不存在,则不会显示”You are in” 这种类型的SQL注入属于盲注型,使用id=1’观察报错信息,如下图 可以看到报错信息是”1” LIMIT 0,1′,也就是说后台代码可能是这样写的:SELECT * FROM users WHERE id=‘$id’ LIMIT 0,1, 下面,我们进行手工盲注测试,需要用到substr()
http://www.xxx.cn/cp.asp?classid=3http://www.xxx.cn/cp.asp?classid=3 and //有拦截关键字http://www.xxx.cn/cp.asp?classid=3 AND 1=1 //大写绕过http://www.xxx.cn/cp.asp?classid=3 AND 1=2http://www.xxx.cn/cp.asp?classid=3 ORDER BY 8%16 //正常http://www.xxx.cn/cp.asp?
SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联合查询不能用了. 绕过 在显示位上替换为常见的注入变量或其它语句 union select 1,2,3; union select * from ((select 1)A join (select 2)B join (select 3)C); union select * from ((select