本文共 2620 字,大约阅读时间需要 8 分钟。
引用文本通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
假设一个虚拟接口获取团队信息的接口http://www.baidu.com/api/groups?groupid=13634,服务端的SQL查询语句可能是“select * from groups where groupid=13634”。
假如把接口改为http://www.baidu.com/api/groups?groupid=-1’or ‘1’=’1,如果服务端没有对传入的参数做校验,就会执行这样一条SQL查询语句“select * from groups where groupid=-1 or 1=1”。由于这里控制groupid=-1的条件为假,1=1的条件为真,那这条SQL语句执行之后会把groups表内所有的数据都查询出来,如果接口返回没有控制,就会出现把所有的数据返回的现象。
上面举的例子属于最常见SQL注入手段,其实还有很多,例如注入SQL关联操作、注入注释符号#绕过验证、注入删除恶意操作、资源枚举等。一般来说,SQL注入是层层递进的,攻击者可以利用服务端返回的任何有效信息,特别是不引人注意的错误信息来进行下一步的攻击。有些还可以根据数据库的特性来获取数据库的信息,比如MySQL数据库自带的information_schema数据库就提供了当前mysql实例中所有数据库的信息,一旦攻击者可以获取到这个数据库的信息,那么意味着整个MySQL中的数据库都已经暴露了。
Sqlmap是一款自动化sql注入的工具,支持大部分主流数据库,包括mysql、oracle等,支持以下注入方式:
注意:使用sqlmap注入的接口必须带有参数或者body,否则无法进行注入操作。
样本1:get接口
URL:https://www.baidu.com/api/groups?groupid=13634 cookie:wps_sid=123456输入命令:python sqlmap.py -u “URL” --cookie=“cookie” --batch
——————————————————————————————————————————————— 样本2:post接口 URL:https://www.baidu.com/api/v3/groups/51183/files/351748 cookie:wps_sid=123456 body:{“fname”:“我的团队”}输入命令:python sqlmap.py -u “URL” --cookie=“cookie” --data=“body” --batch
输入后回车查看结果如下图
All tested parameters do not appear to be injectable——所有测试的参数似乎都不是可注入的
且返回的状态码均为4XX,说明对该接口的请求均失败了
以上结果均说明该接口通过了sql的注入测试
转载地址:http://tbczz.baihongyu.com/