安全测试-SQL注入
一 概述
SQL注入是针对一种数据库而言的,而不是针对网页语言。在任何使用了数据库查询环境下都可能存在。常见的数据库包括:MySQL、Oracle、Db2等。针对不同的数据库系统使用的一些函数会有所不同,不过从测试是否存在SQL注入的角度考虑,只需要进行几个最基本的判断语句就可以了。
由于SQL注入有可能造成信息泄漏,在严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断。因此必须发现所有存在的注入点
二 说明
1、页面或者URL可能接受多个参数,需对每个参数都进行测试
2、如果客户端script对输入数据进行合法行校验,阻止非法数据,可以通过抓包拦截的方法修改输入数据,绕过客户端数据校验。
3、POST、AJAX以及隐藏域提交参数也需要测试,方法是通过抓包工具拦截HTTP请求,找到提交的参数并参照下面的方法修改参数值
三 手工测试方法
搜索型参数
http://127.0.0.1/sql.php?Parameter=James #正常查询数据
http://127.0.0.1/sql.php?Parameter=James' #页面异常或数据查询为空
http://127.0.0.1/sql.php?Parameter=James’and‘%’=' #正常查询数据
http://127.0.0.1/sql.php?Parameter=James' and‘a%’='b #查询数据为空或提示列表为空
数字型参数
http://127.0.0.1/sql.php?Parameter=10001 #正常查询数据
http://127.0.0.1/sql.php?Parameter=10001' #页面异常或数据查询为空
http://127.0.0.1/sql.php?Parameter=10001 and 1=1 #正常查询数据
http://127.0.0.1/sql.php?Parameter=10001 and 1=2 #查询数据为空或提示列表为空
字符型参数
http://127.0.0.1/sql.php?Parameter=James #正常查询数据
http://127.0.0.1/sql.php?Parameter=James' #页面异常或数据查询为空
http://127.0.0.1/sql.php?Parameter=James’and‘1’=‘1 #正常查询数据
http://127.0.0.1/sql.php?Parameter=James' and‘1’=‘2 #查询数据为空或提示列表为空
手工测试举例
前置条件:
Web业务运行正常
已知待测目标URL,假设为GET http://test.pub.cn/api/v3/groups
待测目标存在参数输入,假设为groupid=45678
测试步骤:
观察参数的值value是否为数字型。如果是数字型进行数字型测试,否则跳到第4步进行字符型测试(例如如果出现a那说明是字符型,如果出现2则将其当做数字型测试)
将被测参数后加上测试语句“and 1=1”,即:地址栏中填入“http://test.pub.cn/api/v3/groups?groupid=45678 and 1=1”, 如果返回正确页面则进行下一步操作,否则是数字型测试,请跳到第4步。
将被测参数后加上测试语句“and 1=2”(这里以第n个参数为例),其他参数保持不变,即:地址栏中填入“http://test.pub.cn/api/v3/groups?groupid=45678 and 1=2”, 如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试
将被测参数后加上测试语句“’ and ‘1’=’1”,即:地址栏中填入“http://test.pub.cn/api/v3/groups?groupid=45678’ and ‘1’=’1”, 如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试
将被测参数后加上测试语句“’ and ‘1’=’2”,即:地址栏中填入“http://test.pub.cn/api/v3/groups?groupid=45678’ and ‘1’=’2”, 如果返回正确页面则不存在漏洞,否则该参数存在注入漏洞,完成测试
总结:如果参数后加的内容导致页面返回错误或者不可访问,那表明存在可注入点
四 sqlmap工具扫描
工具安装
本地安装python版本无需最新,2.7.16版本即可,下载Python官网地址:https://www.python.org/downloads/release
Python下载安装操作方法:https://www.duote.com/tech/202112/221762.html
下载sqlmap官网地址:https://sqlmap.org/ 选择zip文件下载
基于上一步中下载zip文件至本地python安装目录,并将文件夹名称修改为sqlmap-->cmd命令行进入sqlmap目录下,执行sqlmap.py -h即可安装成功
工具测试举例
前置条件:
Web业务运行正常
已知待测目标URL,假设为GET http://test.pub.cn/api/v3/groups
待测目标存在参数输入,假设为groupid=45678
测试步骤:
测试用机安装了sqlmap测试工具" "1、启动命令行,win+R cmd
进入到sqlmap.py的安装目录命令:cd F:\test\sqlmap
输入命令 Python -u “http://test.pub.cn/api/v3/groups?groupid=45678” --cookie=wps_sid=” --batch
回车执行扫描
观察输出结果"
工具常用命令
get接口:python sqlmap.py -u “URL” --cookie=“cookie” --batch
post接口:python sqlmap.py -u “URL” --cookie=“cookie” --data=“body” --batch
工具常用参数
基本选项: -h 查看基本帮助 -hh 查看详细帮助 –version 查看sqlmap版本 -v LEVEL 扫描详细级别,LEVEL取值0-6,默认为1 |
目标选择 -u URL 指定测试URL –url=URL 指定测试URL,同上 -m FILE 批量接口注入,FILE为本地保存了多个接口的.txt文件路径,一行一个URL -l FILE 批量接口注入,FILE为本地保存了多个接口的文件路径,接口间用分隔符分割 -r FILE 批量接口注入,表示加载一个文件 |
请求设置 –data=DATA 指定post接口的body –cookie=COOKIE 指定接口的cookie –random-agent 使用随机选择的HTTP User-Agent标头值 –proxy=PROXY 指定接口的代理 –tor 使用Tor匿名网络 –check-tor 检查Tor是否正确使用 |
注入设置 -p TESTPARAMETER 指定测试接口的某几个参数 –dbms=DBMS 指定测试的数据库类型 |
枚举注入: -a 检索所有内容 –current-user检索数据库当前用户 –current-db检索当前数据库 –passwords枚举数据库用户密码哈希值 –tables枚举数据库表 –columns枚举数据库表列 –schema枚举数据库架构 –dump查询出某个数据库下所有数据表的数据 –dump-all查询出所有数据库下所有数据表的数据 -D DB 查询指定的数据库的数据 -T TBL 查询数据库中指定的表数据 -C-要枚举的COL 查询数据库中指定的表列数据 |
其他设置: –batch 自动选择默认选项,不需要用户输入 –smart 智能判断选择,只有在积极启发式的情况下进行彻底测试 |
原文链接:https://blog.csdn.net/weixin_39740094/article/details/103511476
常见结果分析
参考:https://blog.csdn.net/qq_51524329/article/details/121720816
安全测试-SQL注入相关推荐
- 渗透测试SQL注入——Sqlilabs关卡详解
目录 报错函数floor的利用 利用select into outfile写一句话木马 利用load_file 读敏感文件 利用sqlmap探测 sql盲注 get基于时间的盲注应用 post基于时间 ...
- Web安全性测试—SQL注入
Web安全性测试-SQL注入 因为要对网站安全性进行测试,所以,学习了一些sql注入的知识. 在网上看一些sql注入的东东,于是想到了对网站的输入框进行一些测试,本来是想在输入框中输入<scri ...
- 渗透测试——sql注入进阶/基于时间的盲注/一看就会/
目录 一.注入点判断 注入类型 SQL注入的类型 二.基于时间的时间盲注 什么是时间盲注 sleep()函数 常用函数 三.bWAPP基于时间的盲注实战 一.注入点判断 1.输入一个单引号',因为语句 ...
- 渗透测试-SQL注入之Fuzz绕过WAF
WAF绕过原理之Fuzz绕过 文章目录 WAF绕过原理之Fuzz绕过 前言 一.什么是Fuzz 二.利用Fuzz绕过WAF获取数据库信息 1.Fuzz绕过方法 2.利用Fuzz绕过WAF获取数据库信息 ...
- web测试-sql注入漏洞
1.web程序三层结构 2.什么是sql注入 SQL注入 是将Web页面的原URL.表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令. 注入攻击 ...
- 渗透测试-SQL注入之sqlmap的使用方法及实战案例
SQL注入之sqlmap的使用方法及实战案例 文章目录 SQL注入之sqlmap的使用方法及实战案例 前言 一.sqlmap的使用方法 查库,表,列,以及相关的字段的信息 万能密码汇总 判断是否为字符 ...
- kali linux扫描sql注入,Kali Linux系统利用DVWA靶场进测试SQL注入漏洞:
手工盲注:手工盲注分为基于布尔的盲注.基于时间的盲注以及基于报错的盲注,手工盲注步骤:1.判断是否存在注入,注入是字符型还是数字型;2.猜解当前数据库名;3.猜解数据库中表名;4.猜解表中的字段名;5 ...
- 84.网络安全渗透测试—[SQL注入篇23]—[高级注入技巧-dnslog无回显注入]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.高级注入技巧 dnslog无回显注入 1.原理 2.dnslog平台 3.MySQL dnslog无回显注入 ...
- 77.网络安全渗透测试—[SQL注入篇16]—[SQLSERVER+ASP-延时注入]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.SQLSERVER+ASP 延时注入 1.简介 2.判断注入 3.猜解长度.个数.字符 4.以上总结:`12 ...
最新文章
- pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax
- 【HDU】1251统计难题 (字典树:二维数组,结构体数组,链表,map)
- 微信正在用的深度学习框架开源!支持稀疏张量,基于C++开发
- 利用python+seleniumUI自动化登录获取cookie后再去测试接口,今天终于搞定了
- bzoj3524 [Poi2014]Couriers
- react native仿微信性别选择-自定义弹出框
- ORA-02291: 违反完整约束条件 …… - 未找到父项关键字
- yum 快速安装 LAMP
- C++ 获取类成员虚函数地址
- java day15 【Map】
- java web相对路径_java(Web)中相对路径,绝对路径问题总结
- Luogu2730 魔板 Magic Squares
- 使用sklearn不同方法在digits手写数字数据集上聚类并用matplotlib呈现
- 【最全攻略】拼多多商家自研系统接入流程
- 经典laravel后台管理系统
- 学习笔记:微波遥感反演土壤水分——理论模型和经验模型(1)
- 计算机管理显示磁盘未知,磁盘未知,未初始化或未分配问题的解决方案
- java robot 游戏_JAVA制作游戏脚本(1)---Robot机器人
- 微信js 已经填写JS接口安全域名了,仍然报invalid url domain
- 用anaconda下载安装pytorch1.8.1+cudatoolkit11.1