今天突然想到了SQL防注入,于是想测试一下,顺便也把教程发出来
这里使用到的是sqlmap工具,一款用python编写的
请注意:这个sqlmap需要python2才可以正常执行,python3不行

前言:
一、什么是SQL防注入?

攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。

举例:’ OR ‘1’='1

这是最常见的 SQL注入攻击,当我们输如用户名 admin ,然后密码输如’ OR ‘1’=1=‘1的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是SELECT * FROM user WHERE username=’’ and password=’’,经过参数拼接后,会执行 SQL语句 SELECT * FROM user WHERE username=’’ and password=’’ OR ‘1’=‘1’,这个时候1=1是成立,自然就跳过验证了。
这样下来是很危险的
但是如果再严重一点,密码输如的是’;DROP TABLE user;–,那么 SQL命令为SELECT * FROM user WHERE username=‘admin’ and password=’’;drop table user;–’ 这个时候我们就直接把这个表给删除了。

二、如何预防SQL注入

在python中,我们可以使用参数字符串方法,这样的话即使我们使用 SQL语句伪造成参数,到了服务端的时候,这个伪造 SQL语句的参数也只是简单的字符,并不能起到攻击的作用。

对进入数据库的特殊字符(’"尖括号&*;等)进行转义处理,或编码转换。

在应用发布之前建议使用专业的SQL注入检测工具进行检测,以及时修补被发现的SQL注入漏洞。网上有很多这方面的开源工具,例如sqlmap、SQLninja等。
避免网站打印出SQL错误信息,比如类型错误、字段不匹配等,把代码里的SQL语句暴露出来,以防止攻击者利用这些错误信息进行SQL注入。

下面进入正题:如何使用检测工具进行测试

1、下载安装
在sqlmap的网站上下载对应的压缩文件

http://sqlmap.org/

2、解压到一个文件夹,如下

sql入侵检测 python 脚本 检测sql注入工具_sql


按住shift按键,在此处打开shell窗口,输入

python sqlmap.py

出现如下说明安装成功

sql入侵检测 python 脚本 检测sql注入工具_sql入侵检测 python 脚本_02


下面开始测试,先开启服务器,先使用GET请求测试:

python sqlmap.py -u "http://192.168.2.20:8800/server/doc/mydoc/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoiMTYwMzI2ODA0MC40ODkzMTc3IiwiYXV0aG9yaXR5IjozLCJ1aWQiOjF9.XLLvYYc5ygrcnL23325qfbDOWO7nLF_Q539tU0C3kwM&dim_doc_name=发布"  --method=GET

注意:token是服务端要求的,这里先传一个参数dim_doc_name,看看结果

sql入侵检测 python 脚本 检测sql注入工具_python_03


出现以上结果说明,注入没有成功,是安全的

下面我们写一个可以注入的接口,然后测试:

python sqlmap.py -u "http://192.168.2.20:8800/server/doc/test/?x=uid=888"  --method=GET

结果

sql入侵检测 python 脚本 检测sql注入工具_SQL_04


我们看到这样的信息,就是有注入的

下面通过这个注入来获取一些数据库的信息,加上参数 --dbs

python sqlmap.py -u "http://192.168.2.20:8800/server/doc/test/?x=uid=888"  --method=GET --dbs

结果

sql入侵检测 python 脚本 检测sql注入工具_SQL_05


我们看到获取到了所有的库

下面获取所有的表信息

python sqlmap.py -u "http://192.168.2.20:8800/server/doc/test/?x=uid=888"  --method=GET -D test_projects_doc --tables

-D 后面接库名 --tables获取表信息

结果

sql入侵检测 python 脚本 检测sql注入工具_python_06


再进一步获取表中的字段

python sqlmap.py -u "http://192.168.2.20:8800/server/doc/test/?x=uid=888"  --method=GET -D test_projects_doc -T doc_info --columns

结果

sql入侵检测 python 脚本 检测sql注入工具_python_07


完成

除此之外还可以携带cookie
拼接以下信息

--cookie="JSESSIONID=9446902e-703b-4c81-914a-9abbd90ed9ce" --method=POST

还可以拼接请求头

python sqlmap.py -u "http://192.168.0.192:8998/performance/parameter/name?pagesize=50¤tpage=1&query=%7B%22type%22:1,%22query%22:[]%7D&sorttype=asc&quicksearch=parameter_name&department=10&orgid=d10¶meter_classify=%E4%B8%AA%E4%BA%BA%E6%9C%88%E5%8F%82%E6%95%B0&total=570"  --method=GET --headers="Origin:192.168.2.20\nAuthorization:2280fa25-f66a-39c8-a88b-bd8d203cf754" --dbs