SQL注入原理:
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。(源自百度百科)
按数据提交类型可分为:
SQL注入的防御:
一般步骤:
简单的POST注入:
题目来源:Bugku CTF
使用工具:Firefox浏览器,Hackbar插件
步骤:
1.打开网站,发现输入数字可以显示学生成绩
2.使用Hackbar查看post data
3.输入 ' 发现正常显示id=1时的页面,故闭合字符为 '
4.输入 and 1=2 和 and 1=1 -- -查看显示页面(--为注释符,代表将后面的语句全部注释,后边要加空格,故写作-- -)
5.使用order by语句判断列数,从order by 1开始判断,发现当输入order by 1,2,3,4,5时无法正常显示成绩,故可判断列数为4
6.判断显示位,利用联合查询输入id=4' and 1=1 union select 1,2,3,4-- -,并使用version()函数爆出数据库版本(注意:前方的id要改为不能查询到成绩的id,这样后面才能显示出需要的信息)
7.使用database()函数爆出数据库名
8.使用group_concat()函数爆出表名(group_concat()函数作用见文末)
9.先爆出所有的列名
10.爆出fl4g表中的列名
11.爆出skctf_flag的字段名,得到flag
Tips:
--01.在MySQL5.0以上版本都存在information_schema数据库,相关结构如下
--02.group_concat()函数的作用是将group by产生的同一个分组中的值连接起来,返回一个字符串结果。