SQL注入漏洞-SQL盲注

盲注,从字面意思理解就是看不见的注入,其实这还是属于注入的一种,只是表现形式不同。盲注是不能通过直接显示的途径来获取数据库数据的方法。在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。也就是说执行插入的语句后,不管是否执行,是否成功,都不会回显详细的错误信息,不像普通注入一样那么容易判断。但是,注入攻击还是发生了,只是错误信息被屏蔽掉了,请记住这个就好。一般情况下,盲注可分为三类:

  • Booleanbase  普通盲注
  • Timebase       基于时间的盲注
  • Errorbase       基于报错的盲注

LOW实验的关键代码:

SQL注入漏洞-SQL盲注_第1张图片

可以和上一个注入的代码对比会发现多了一条语句,盲注之所以比普通注入困难,就是因为这句代码把返回的错误信息屏蔽掉了,攻击者就无法判断,因此增加了注入的难度,但这不是根本解决的方法,因为它并没有阻止注入的发生,只是把注入的结果屏蔽而已。

现在可以构造攻击语句,先查询数据库名、用户名、数据库版本等基本信息,然后获取表明列名等数据。

其实用的原来的语句是这样的

UNION SELECT 1,CONCAT_WS(CHAR(32,58,32),user(),database(),version())

Concat_ws就是一个字符串连接函数,为了更简单理解就去掉了这个函数,分开测试,并不影响测试结果。

SQL注入漏洞-SQL盲注_第2张图片

 

现在可以查询表名列名和数据了,利用的是Mysql的系统函数,很容易查询出想要的数据

查询表名

union select 1,table_name from information_schema.tables where table_schema=0x64767761 limit 0,1

SQL注入漏洞-SQL盲注_第3张图片

 查询列名

union select 1,column_name from information_schema.columns where table_name=0x7573657273 and table_schema=0x64767761

SQL注入漏洞-SQL盲注_第4张图片

column_name要查询的存储列名

table_name=0x7573657273这里多了一个这个,这是表名的十六进制,也就是users表

表名列名都出来了,查数据大家都会,不再赘述。

你可能感兴趣的:(SQL注入,sql,数据库)