SQL联合查询注入的一般流程(sql-labs Less-1)

一、判断是否存在注入

1、在有传值得url后面输入’ , ”或者),通过返回错误,判断sql语句是用什么符号闭合的。在url后面输入 ’ 返回如图错误,初步判断是sql语句是通过’闭合。

SQL联合查询注入的一般流程(sql-labs Less-1)_第1张图片

2、然后在后面构建一个恒等式看我们的sql语句能不能正常执行。通过执行恒等式and 1=1 返回正常,and 1=2返回不正常,判断出此页面存在注入点 --+对数据库后面的查询语句做注释。

SQL联合查询注入的一般流程(sql-labs Less-1)_第2张图片
SQL联合查询注入的一般流程(sql-labs Less-1)_第3张图片

二、判断系统查询语句的字段的个数

1、通过order by n 判断本查询语句的字段的个数。Order by mysql的排序语句。如果n 大于表中的字段数就会报错。小于表中字段返回正常。Order by 4 返回错误,order by 3 返回正常,判断本查询语句有3个字段。

SQL联合查询注入的一般流程(sql-labs Less-1)_第4张图片
SQL联合查询注入的一般流程(sql-labs Less-1)_第5张图片

三、通过联合查询,查库,查表,查字段。

1、初步判断有url提交的查询语句有3个字段,union select 语句查询前后字段必须一样,我们通union select 1,2,3来判断哪个字段是显示的。通过and 1=2让union前面的数据不显示。通过执行后回显2,3。判断2,3是显示位。

SQL联合查询注入的一般流程(sql-labs Less-1)_第6张图片

2、查数据库名,在3位我们执行查所有数据库名,所有数据表名,所有字段名的操作。

数据库名存放在information_schema数据库的schemata表中的schema_name字段中.

查询语句:http://localhost/test/Less-1/?id=1' and 1=2 union select 1,schema_name,3 from information_schema.schemata limit 6,1  --+,然后通过limit n,N语句依次爆出存在的数据库名。

SQL联合查询注入的一般流程(sql-labs Less-1)_第7张图片

3、查表,同样的操作,表名存在information_schema数据库的tables的table_name字段中,并通过限制条件schema_name = ‘web’查询web数据库中存在的表名。

查询命令:http://localhost/test/Less-1/?id=1' and 1=2 union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 3,1  --+并通过limit依次列出所有表名。

SQL联合查询注入的一般流程(sql-labs Less-1)_第8张图片

4、查询数据库表中的所有字段。

表中的字段保存在,information_schema数据columns表中的column_name字段中。并通过限制查询条件where table_name = ‘user’ and table_schema = ‘web’精确的查出web数据库user表中的字段名。

查询命令:http://localhost/test/Less-1/?id=1' and 1=2 union select 1,column_name,3 from information_schema.columns where table_schema='security' and table_name='users' limit 1,1  --+   

然后同样通过limit命令查出所有的数据字段。

SQL联合查询注入的一般流程(sql-labs Less-1)_第9张图片

5、查询字段中的数据。通过普通的查询命令就可以实现。

命令:http://localhost/test/Less-1/?id=1' and 1=2 union select 1,username,password from security.users limit 0,1 --+

同样通过limit命令可以一个个显示所有的字段内容。

SQL联合查询注入的一般流程(sql-labs Less-1)_第10张图片

你可能感兴趣的:(SQL联合查询注入的一般流程(sql-labs Less-1))