sql注入

1.SQL InjectionSQL注入)

使用工具:sqlmap 前提条件:安装python
get接口命令:python sqlmap.py -u "url" -p (name:参数名) --cookie=""
post接口命令:python sqlmap.py -u --date ="" --cookie=""
等级:
python sqlmap.py leval=1-5

手工测试:传参方法有以下2种
1)#{}
2)${}
每种方法找一个页面测试即可

(1)如何进行SQL注入测试?
首先找到带有参数传递的URL页面,如搜索页面,登录页面,提交评论页面等等.

注1:对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的"FORM"标签来辨别是否还有参数传递.在<FORM>和</FORM>的标签中间的每一个参数传递都有可能被利用.<form. id="form_search" action="//www.greatytc.com/search/" method="get">
<div>
<input type="text" name="q" id="search_q" value="" />
<input name="search" type="image" src="/media/images/site/search_btn.gif" />
<a href="//www.greatytc.com/search/" class="fl">Gamefinder</a>
</div>
</form>

注2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的URL,如HTTP://DOMAIN/INDEX.ASP?ID=10
其次,在URL参数或表单中加入某些特殊的SQL语句或SQL片断,如在登录页面的URL中输入HTTP://DOMAIN/INDEX.ASP?USERNAME=HI' OR 1=1--

注1:根据实际情况,SQL注入请求可以使用以下语句:
' or 1=1- -
" or 1=1- -
or 1=1- -
' or 'a'='a
" or "a"="a
') or ('a'='a 注2:为什么是OR,以及',――是特殊的字符呢?
例子:在登录时进行身份验证时,通常使用如下语句来进行验证:sql=select * from user where username='username' and pwd='password'
如 输入http://duck/index.asp?username=admin' or 1='1&pwd=11,SQL语句会变成以下:sql=select * from user where username='admin' or 1='1' and password='11'
'与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行.
接下来是OR查询条件,OR是一个逻辑运算符,在判断多个条件的时候,只要一个成立,则等式就成立,后面的AND就不再时行判断了,也就是说我们绕过了密码验证,我们只用用户名就可以登录.
如 输入http://duck/index.asp?username=admin'--&pwd=11,SQL语句会变成以下sql=select * from user where name='admin' --' and pasword='11',
'与admin前面的'组成了一个查询条件,即username='admin',接下来的语句将按下一个查询条件来执行 接下来是"--"查询条件,“--”是忽略或注释,上述通过连接符注释掉后面的密码验证(注:对ACCESS数据库无效).

最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器的相关信息;如果能说明存在SQL安全漏洞.
试想,如果网站存在SQL注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结构,并对数据库表进行增\删\改的操作,这样造成的后果是非常严重的.

(2)如何预防SQL注入? 从应用程序的角度来讲,我们要做以下三项工作
转义敏感字符及字符串(SQL的敏感字符包括“exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,” ‘ ”,”--”,”%”,”0x”,” ><=!-*/()| ”,和”空格”).

屏蔽出错信息:阻止攻击者知道攻击的结果

在服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.

从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下几项安全性问题:
需求中应说明表单中某一FIELD的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符)
需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示.

当然在执行测试的过程中,我们也需求对上述两项内容进行测试.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/sq...
    道无涯_cc76阅读 1,989评论 0 2
  • SQL注入 概念 危害 原理 实例 防御 基础 - ### SQL语句所用符号不同数据库的sql注入与提权常见S...
    yddchsc君阅读 1,387评论 1 10
  • [SQL注入攻击] SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式...
    James黄杰阅读 2,735评论 0 30
  • Sql 注入基础原理介绍一、实验说明1.1 实验内容SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而...
    FreaxJJ阅读 1,846评论 3 23
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,447评论 2 22