软件测试 -- SQL注入测试跟JS注入测试

1. SQL注入的概念:

  1.1 概念: SQL注入就是将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的恶意SQL命令.

  1.2 SQL如何产生: 

    1) WEB开发人员无法保证所有的输入都已经过滤

    2) 数据库未做相应的安全配置

    3)攻击者利用发送给SQL服务器的输入参数构造可执行的SQL代码

  1.3 攻击方式: get请求、post请求、http头信息、cookie等

  1.4 如何预防(开发所做):

    1) 严格检查输入变量的类型和格式

    2) 过滤和转义特殊字符

      在username这个变量前进行转义,对‘、"、\等特殊字符进行转义,如:php中的addslashes()函数对username参数进行转义

    3) 利用mysql的预编译机制

  1.5 攻击例子:

    用户登录注入:

      用户输入账户跟密码之后相当于调用SQL语句进行数据库用户查询, 相当于:  SELECT * FROM user WHERE username = ‘user‘ ADN password = ‘pwd123‘

      当用户名输入改为:user‘--(单引号闭合user左边的单引号),密码随意输入,如:111,然后点击提交按钮, 等价于SQL语句:SELECT * FROM user WHERE username = ‘user‘--‘ADN password = ‘111‘

      这就导致了输入一个错误的密码或者不输入密码就可登录用户名为‘user‘的账号,这是一个危险的操作

    一个数字输入的注入:

      在浏览器搜索地址栏输入:https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=123,这是一个get型接口,发送这个请求相当于调用一个查询语句:SELECT * FROM article WHERE id = 123

      当输入数据改为: https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd= -1 OR 1 =1 , 那么 id = -1永远是false,1=1永远是true,所有整个where语句永远是ture,所以where条件相当于没有加where条件,那么查询的结果相当于整张表的内容.

2. SQL注入的测试点:

 2.1.输入域的值为数字型,用1=1,1=2法

  若满足条件,则存在SQL注入漏洞,程序没有对提交的整型参数的合法性做过滤或判断

 2.2.输入域的值为字符型,用 ’1=1’, ’1=2’ 法

  若满足条件,则存在SQL注入漏洞,程序没有对提交的字符型参数的合法性做过滤或判断

 2.3.输入域中的值为搜索型,用’and [查询条件] and ‘%’=’% 等

  若满足条件,则存在SQL注入漏洞,程序没有对提交的查询的合法性做过滤或判断

 2.4.用UNION查询语句

  利用Union可以连接查询,从而从其他表中得到信息

 2.5.大小写排查

  程序员对大小写的过滤不充分时,会忽视大小写混合的情况,容易存在漏洞

 2.6.用UNICODE字符集检查

  用UNICODE字符集转化的输入,会把+号转为%2B,把%号转化为%25等,容易忽略过滤

 2.7.用ASCII码检查

  把输入的字符用ASCII码代替,如a=char(97),容易忽略过滤

 2.8.用;号或—号检查

  分号;在SQLServer中表示隔开前后两句语句,--表示后面的语句为注释,容易忽略过滤

 2.9.利用系统表

  通过查询数据库的系统表名,可判断具体用的数据库类型

 2.10.利用数据库服务器的系统变量user 等

  可以得到数据库名,数据库的用户名,从而进行进一步攻击

 2.11.利用相关函数

  若字符是中文的,比如where name=’用户’,可以用where name=nchar(29992)+nchar(25143)代替。

 2.12.界面输入框中是否对SQL敏感字符进行了屏蔽

  "exec" ,"xp_","sp_","declare","Union","cmd","+","//","..",";","‘","--","%" 等命令关键字

 2.13.是否对SQL脚本语法出错信息进行了屏蔽

  有些SQL注入的目的就是为了看到报错的SQL命令,通过分析这些SQL命令,获取关键的数据库名,表名以及字段名等信息

 2.14.在浏览器的地址栏中是否对一些恒等表达式进行了屏蔽

  例如:https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=19 and 1=1

 2.15.对于提交表单的浏览器地址是否进行了敏感字符或命令集的屏蔽

 2.16.对于cookie参数提交部分,是否对于cookie文件进行了敏感字符或命令集的屏蔽

3. 自动化sql注入的工具Sqlmap

  Sqlmap是一款自动化sql注入的工具,其功能强大,支持多种数据库,包括mysql,sqlserver等主流的数据库,采用独特的sql注入方法来达到自动化注入扫描漏洞的目的。

   1)基于布尔的盲注(Type:boolean-based blind),即可以根据返回页面判断条件真假的注入

    2)基于时间的盲注(Type:time blind),即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断

     3)基于报错注入(Type:error-based),即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中

     4)联合查询注入(union query),可以使用union的情况下的注入

    5)堆查询注入,可以同时执行多条语句的执行时的注入

原文地址:https://www.cnblogs.com/xulinmei/p/10089494.html

时间: 2024-11-09 02:52:12

软件测试 -- SQL注入测试跟JS注入测试的相关文章

SQL注入和XSS bypass waf 测试向量

1. 识别脆弱点 http://www.site.com.tr/uyg.asp?id=123'+union+selec+1,2,3-- http://www.site.com.tr/uyg.asp?id=123' http://www.site.com.tr/uyg.asp?id=123<12("/> 2. HTTP参数污染(HPP) http://www.site.com.tr/uyg.asp?id=123&id=456 http://www.site.com.tr/uyg

sql注入、js注入、csrf漏洞修复

以前没接触过网页安全方面的内容,正好这次碰巧客户有要求,学习了下,现将方案记录于此. Sql注入 解决方案: 服务器访问层的控制: 1.在过滤器,针对后缀为jsp.html.htm的访问进行过滤拦截,判断请求参数中是否包含敏感字符 2.在拦截其中,针对后缀为(.do )的Controller访问进行拦截,判断请求参数中是否包含敏感字符 数据访问层的控制: 1.由于我们采用MyBaties,所以在写Sql时,尽量按#号传参,能有效防止SQL注入 js注入 解决方案: 前端页面控制 1.在输入框中添

『SQL注入』 User-Agent 手工注入的探测与利用分析

原理很简单:后台在接收UA时没有对UA做过滤,也没有PDO进行数据交互(实际PDO是非常有必要的),导致UA中有恶意代码,最终在数据库中执行. Bug 代码: 本地顺手打了一个环境,Bug 代码部分: // 保存到访者的IP信息 $db=DBConnect(); $tbLog=$db->tbPrefix.'log'; $executeArr=array('ip'=>($_SERVER["HTTP_VIA"])?$_SERVER["HTTP_X_FORWARDED_

spring mvc防js注入

如果有人利用js 注入.可以做很多可怕的事,一个有经验的程序员不得不防呀! 方式一 直接在js里把符号转义就可以了,简单实用! <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E

软件测试基本方法(四)之测试过程模型

瀑布模型是最常见也是最基本的过程模型,但实践中受到越来越大的局限性,我认为现代软件越发庞大和复杂,我们往往不能一眼洞穿,加上用户需求的多样化和不确定性,都让瀑布模型力不从心.于是出现了原型模型.迭代模型.敏捷过程模型和并发模型.例如原型模型就是为了加大与用户的交流,挖掘用户真正的需求.这里只是泛泛地谈一谈一些著名的测试过程改进模型. TMM(测试成熟度模型) 过程能力:描述了遵循一个软件测试过程可能达到的预期结果的范围. TMM的建立得益于: 充分吸收CMM的精华 基于历史演化的测试过程 业界的

【iOS】网页中调用JS与JS注入

很多应用为了节约成本,做出同时在Android与iOS上都能使用的界面,这时就要使用WebView来做.Android和IOS上都有WebView,做起来很省事.当然这时就要考虑如何在Android或iOS中实现与网页的交互.对iOS而言,包括如何在网页中调用OC,以及如何在OC中对网页进行操作. 先将网页弄到iOS项目中: 网页内容如下, 仅供测试: <html> <head> <meta xmlns="http://www.w3.org/1999/xhtml&q

【sql注入】浅谈sql注入中的Post注入

[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在感觉到难,现在,就让我们一起来谈谈,post注入是多么的轻松吧!PS:文中有写os-shell00x02测试站点:http://xxx.xxxxx.com/对于我来说,post注入无非有两种方法第一种利用burp抓包然后使用sqlmap -r 来进行检测注入第二种比较简单,直接使用sqlmap --

ios开发--网页中调用JS与JS注入

先将网页弄到iOS项目中: 网页内容如下, 仅供测试: [html] view plain copy <html> <head> <meta xmlns="http://www.w3.org/1999/xhtml" http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>这是一个示例html文件</title

js注入

1.JavaScript注入就是在浏览器地址栏中输入一段js代码,用来改变页面js变量.页面标签的内容. 使用Javascript注入,用户不需要关闭或保存网页就可以改变其内容,这是在浏览器的地址栏上完成的.命令的语法如下: Js代码 javascript:alert(#command#) 例如,如果你想在http://www.test1.com站点上看到一个alert警告框,那么首先在地址栏上输入URL并等待页面加载完成,然后删掉URL并输入: Js代码 javascript:alert("H