暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

开山-web安全基础(1)常见漏洞解析

DeepBioinformatics 2018-05-07
818

前言:web安全基础需要各位看官有一定html/js/php等基础知识(我也是萌新),知识多而杂,需要多看多动手。

【注】由于超链接问题,推荐文章请查看原文在访问。

目录

    • XSS

    • CSFR

    • 点击劫持

    • URL跳转

    • SQL注入

    • 命令注入

    • 文件操作漏洞


XSS

全称:Cross Site Script
中文名称:跨站脚本
危害:盗取用户信息、钓鱼、制造蠕虫等
概念:黑客通过“HTML注入”篡改网页,插入了恶意脚本,当用户在浏览网页时,实现控制用户浏览器行为的一种攻击方式。

xss三种类型

XSS类型         存储型               反射型             DOM型
触发过程   1.黑客构造XSS脚本    正常用户访问携带       正常用户访问携带
          2.正常用户访问携带   XSS脚本的URL(参数)     XSS脚本的URL(哈希) 
            XSS脚本的页面
数据存储         数据库               URL                  URL
谁来输出      后端WEB应用程序     后端WEB应用程序        前端JavaScipt
输出位置       HTTP响应中         HTTP响应中           动态构造的DOM节点
DOM型:   用户访问应用  浏览器通过js解析URL内容输出到DOM中  触发XSS
个人理解(欢迎指正):主要利用闭合标签,闭合正常标签,并加入恶意代码
                  或添加构造恶意代码。

"></a><script>alert("xss")</script>来先闭合掉a标签。然后再用script来运行js代码
onclick="alert(1)";>123</a>//点击123触发onclick来运行js,然后把后面的内容来注释掉

前人已经对XSS有了比较深入的总结 
链接:XSS的原理分析与解剖                          XSS的原理分析与解剖二 
防御xss

原则1:不要在页面中插入任何不可信数据,除非这些数已经据根据下面几个原则进行了编码 
原则2:在将不可信数据插入到HTML标签之间时,对这些数据进行HTML Entity编码 
原则3:在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码

想知道如何防必然对攻要有深刻理解,有时间拜读此文防御XSS的七条原则

CSFR

全称:Cross-site request forgery
中文名称:跨站请求伪造
危害:执行恶意操作(被转账,被发垃圾评论等)、制造蠕虫...
概念:利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作

CSRF攻击攻击原理及过程如下:

1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A; 
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A; 
3.用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B; 
4.网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A; 
5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登录受信任网站A,并在本地生成Cookie。 
2.在不登出A的情况下,访问危险网站B。
 
看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生: 
1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。 
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了) 
3.打开的第三方网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

CSRF 攻击的应对之道

1.验证 HTTP Referer 字段 
2.在请求地址中添加 token 并验证 
3.在 HTTP 头中自定义属性并验证 
文章链接如下CSRF 攻击的应对之道 
4.服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数 
浅谈CSRF攻击方式

点击劫持

全称:Click Jacking
中文名称:点击劫持
危害:点击覆盖不可见的框架,造成各种精心设计的风险如何删除、点赞、下载、转账等
概念:它是通过覆盖不可见的框架误导受害者点击。虽然受害者点击的是他所看到的网页
,<iframe>标签的透明属性。

点击劫持其实是一种视觉上的欺骗手段,攻击者将一个透明的、不可见的iframe覆盖在一个网页上,通过调整iframe页面位置,诱使用户在页面上进行操作,在不知情的情况下用户的点击恰好是点击在iframe页面的一些功能按钮上。例:

Flash点击劫持 
点击劫持与CSRF攻击有异曲同工之妙,他们都是在用户不知情的情况下诱使用户完成一些动作。CSRF在攻击过程中如果出现与用户交互的页面,则攻击有可能无法完成。而点击劫持恰恰是利用与用户交互而完成的攻击,因此在Flash中这类点击劫持现象更为严重。攻击者利用简单的Flash小游戏诱使用户点击,经过一系列点击后达到控制用户电脑的目的。

推荐文章链接小漏洞大危害 、 浅析点击劫持攻击、点击劫持

URL跳转

尤其当网址变成短链接,就更具有迷惑性了 
定义:借助未验证的URL跳转,将应用程序引导到不安全的第三方区域从而导致安全问题。

跳转实现

1.Header头跳转
$url = $_REQUEST["url"];  获取用户请求链接
header("Location: $url");  跳转到链接地址
2.Javascript跳转
var site = getQueryString("site"); js脚本获取用户请求链接window.location.href=site;  跳转到链接地址
3.META标签跳转
$url = $_REQUEST["url"];  获取用户请求链接
<meta http-equiv="Refresh" content="5; url=<?php echo $url?>" />   5秒后跳转到链接地址

推荐文章链接URL重定向/跳转漏洞解释说明及修复方案、前端一波骚操作

SQL注入

SQL Injection 服务端漏洞 
是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据, 
或者利用潜在的数据库漏洞进行攻击。

正常登录的流程

POST请求登录,把用户名和密码交给服务器,服务器通过PHP代码实现获取到浏览器POST的用户名和密码,会经过一次MD5处理,服务器会把用户名和密码经过MD5处理后的密码拼接到要执行的SQL语句中。

1.POST请求登录,
2.获取请求参数,
3.参数带入代码,
4.执行查询,
5.验证查询结果,
6.根据返回结果判断是否登录成功
$username = $_POST['username']; 
$password = MD5($_POST['password']); 

SQL注入过程

1.获取用户参数
2.拼接到代码当中
3.SQL语句按照我们构造参数的语义执行成功
admin' --     注释-- (双横杠空格)代表注释符     ‘为了闭合前面单引号
查询数据库中是否有admin用户,用户存在时返回结果根本没有验证密码
$check_query = mysql_query("select id from teacher where name='admin' --  and passwd='$password' limit 1"); 
利用脚本
username = admin' and 1=2 union select version()
username = admin' and 1=2 union select user()

SQL必备条件

1.可以控制输入的数据
2.服务器要执行的代码拼接了控制的数据

SQL注入的本质

数据和代码未分离即数据当作了代码来执行

SQL注入的危害

1.获取数据库信息
2.管理员后台用户名和密码
3.获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息......
4.获取服务器权限
5.植入Webshell,获取服务器后门
6.读取服务器敏感文件
7.万能密码

推荐文章链接认识SQL注入的类型、手工注入语句大全

命令注入

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

攻击过程

黑客-> 构造命令-> web应用程序-> 拼接命令并执行注入命令-> 并把结果返回到页面

WEB应用如何命令注入

  命令注入条件:
1.调用可执行系统命令的函数
2.函数或函数的参数可控
3.拼接注入命令

举例

1.下面代码无法执行其他命令,不满足上面命令注入的第二个条件,函数或其参数可控
<?php
        if (isset($_GET['type'])) {            $type = $_GET['type'];   ---从参数中获取type值
        } else {            $type = 1;
        }        switch($type){            case 1:
                exec('ipconfig', $output, $status);   ---type为1执行ipconfig命令                break;            case 2:
                exec('net user', $output, $status);  ---为2执行net user命令                break;            case 3:
                exec('dir', $output, $status);       ---为33执行dir命令                break;      
        }        foreach($output as $value){  ---输出命令执行结果            // 编码转换
            echo(mb_convert_encoding($value, "UTF-8", "GB2312"));            echo("<br />");
        }    ?>


2.参数可控,可以拼接
    <?php
        if (isset($_GET['url'])) {            $url = $_GET['url'];  ---从参数中获取url
        } else {            $url = "http://www.theFlyer.com";
        }        //调用curl命令,获取url的响应头。请求url的网址并返回它的url响应头
        $cmd = 'curl -I "'. $url . '"';  
        //***拼接curl命令 (curl参数可控,这有个分隔符 "",是为了将url包住同时也起到了分隔curl命令
        //和数据的作用)可以通过追加 "闭合前面的curl命令,后面用&追加我们想要的命令。
        //注意dir"./ 后面不能在加"因为php在拼接时会补上这个双引号                     
        //http://www.theFlyer.com" & dir"./                     
        //最后拼接代码如下  curl -I "http://www.theFlyer.com" & dir"./"                     
        // 执行系统命令
        exec($cmd, $output, $status);   ---执行curl命令        echo "<b>". htmlspecialchars($url) . "</b>"
             . " 的响应头如下:<br /><br />";        // 输出命令执行结果
        foreach($output as $value){  ---输出命令结果            echo htmlspecialchars($value);            echo "<br/>";
        }    ?>


推荐文章链接 命令执行

文件操作漏洞

常见文件操作漏洞:

1.文件上传漏洞
2.任意文件下载
3.文件包含漏洞

利用文件操作漏洞:

1.文件上传
    1.1上传Webshell
    1.2上传木马
    ...
2.文件下载
    2.1下载系统任意文件
    2.2下载程序代码
    ...

文件操作漏洞原因:

文件处理不当
1.可以上传可执行脚本
2.脚本拥有执行权限

推荐文章链接 文件上传漏洞及解析、任意文件查看与下载漏洞

后记

纸上得来终觉浅,实践出真知,我也需要多动手,望君亦如此。第一篇算是偏技术文贴,要发了,
但没刚写那么激动,我会继续写的


文章转载自DeepBioinformatics,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论