Web安全攻防:08---SQL注入之时间注入、堆叠查询注入、二次注入、宽字节注入、cookie注入、base64注入、XFF注入
一、时间注入
- 与Boolean注入不同的之处在于,时间注入是利用sleep()或benchmark()等函数让MySQL的执行时间边长
- 时间盲注多于MySQL中的IF语句结合使用。IF(expr1,expr2,expr3)语句含义为:如果expr为true,则IF返回expr2,否则返回expr3
演示案例
- 时间注入攻击的测试地址:http://www.xxx.com/sql/time/time.php?id=1
- 第一步:下面我们判断数据库库名长度是否大1,如果大于1,MySQL语句延迟5秒返回,否则返回1。从图中可以看出时间为5267毫秒,也就是5.267秒,因此执行了sleep(5)函数,所以可以得出数据库库名长度大于1
- 第二步:我们接着判断数据库名长度是否大于10,结果显示执行时间为404毫秒,因此可以知道IF没有执行sleep(5)函数,所以数据库库名长度是不大于10的
- 第三步:接着我们判断数据库库名的第一个字符是否等于“s”,结果显示执行的时间为5176毫秒,因此可以知道数据库库名是以字符“s”开头的
- 第四步:后面我们就可以以此类推,的哦出数据库的库名、表名、字段名和具体数据了
时间注入代码分析
- 程序获取GET参数ID,通过preg_match判断参数ID是否存在Union等危险字符,然后将参数ID拼接到SQL语句中。从数据库中查询SQL语句,如果有结果返回yes,否则返回no
- 但是由于此处没有过滤sleep等字符,因此我们可以使用时间盲注
no