网络安全零基础入门(第八章-1)文件上传漏洞——解析、验证、伪造(一)

  • 每日一句:学习如逆水行舟,不进则退
  • 本篇内容:客户端检测
         服务端检测
         实战注意(主要是黑名单)

一、客户端检测

1.客户端校验:
    一般是在网页上写一段Js脚本,用Js去检测,
    校验上传文件的后缀名,有白名单也有黑名单。
    
2.判断方式:
    通过抓包来判断,如果未抓住包,就弹出不准上传,
    那么就是前端验证,否则一般就是服务端验证
    
3.绕过方法
    前端验证非常不可靠,通常可通过两种方式绕过:
      ~关闭JS尝试绕过
      ~提交正常文件通过burp修改数据包就可以绕过(推荐)
     
4.黑白名单机制:
    黑名单:不允许上传什么
    白名单:只允许上传什么
    白名单比黑名单更安全

二、服务端检测

1.服务端检测几个常见的手段:
    ~检查Content-Type (内容类型)
    ~检查后缀 (检查后缀是主流)
    ~检查文件头
  
2.制作图片马(隐写)
    ~找一张正常的照片(最好用小图片,越小越好)
    例如:1.jpg
    
    ~新建一个文本文档(内容一句马)
    例如:1.txt   //里面放着
    
    ~打开cmd运行下边命令
    代码:copy 1.jpg/b + 1.txt 123.jpg
    /b的意思是以二进制加载,最后会合成一个名为123.jpg的图片
    
    另外:如何拿出源文件?
    改123.jpg为123.zip直接解压即可,很多ctf的初级隐写难度

三、实战注意(主要是黑名单)

1.简单的前端黑白名单限制可以通过上边的两种方法
  
2.图片马burp抓包改后缀进行绕过
  
3.服务端黑名单,将后缀改为 php. php_ php4 phptml php空格,再上传
  
4.htaccess文件绕过
    简单的说,htaccess文件就是web容器的配置文件,web容器
    会根据htaccess文件的内容去执行,我们可以改内容
    
    例如:
    1.txt里面放着:AddType application/x-httpd-php .jpg
    这个代码指令代表着.jpg文件会当做php来解析,但是仅限于当前文件夹
    
    用法:
    新建1.txt文件,将代码写入,打开cmd,运行下列命令:
    ren 1.txt .htaccess   //更名后是没有文件名字的
    注意:但是这个功能默认是不开启的,可以试试,但是伪静态网页一定会开
  
5.win系统后缀是不分大小写,而且解析容器也一般不分。可以改一下后缀大小写
  
6.win文件流绕过(隐写)
    打开cmd:
      echo abcd    //输出abcd
      echo abcd >> 1.txt     //新建1.txt,内容为abcd
      echo abcd >> 1.txt:b.txt    //新建b.txt,内容为abcd,且藏在1.txt中
                     系统中只能看到1.txt
    打开b.txt:(cmd中)
    notepad    //打开记事本
    notepad 1.txt    //用记事本打开1.txt
    notepad 2.txt:b.txt   //打开隐藏在1.txt中的b.txt
     
    注意:此时的1.txt中必须为空,不能保存东西
     
    扩展
    (1)事实上,新建的文件夹,完整的语句是这样的:
       echo abcd >> 2.txt::$DATA
       这是建立一个2.txt文件,平时写echo abcd >> 2.txt 系统默认补全
        
    (2)echo abcd >> 1.txt   没有1.txt则新建,若有则将abcd追加至原文件
     
    (3)如何结合上传文件:
       上传1.jpg,burp抓包,改为1.php::$DATA,保存在服务器为1.php
       
7.实战中,不知道什么检测,建议直接用图片马,可以避免很多麻烦
   
8.连接自己的一句马:url/上传马.php?a=phpinfo();   //“;”不要忘记,
   
  经典一句马内容

四、绕过方式

1.前端绕过
  制作图片马步骤:
    建一个1.jpg 建一个1.txt
    写上
    在打开cmd copy 1.jpg/b + 1.txt 123.jpg
    生成123.jpg 将其改为.txt打开
    比如是机密文件 压缩设置密码 copy 1.jpg/b + 1.zip 111.jpg
    正常人看是一条图片,将其后缀名改为.zip 输入密码打开
  
    如果上传图片经过二次压缩 图片马将失效
  
2.文件类型方式绕过
    浏览器检测文件类型,会自动填充前面的
    
    图片马 12345.jgp—>.php
  
3.黑名单绕过
    图片马 12345.jpg—> .phtml放包—复制地址—浏览器打开—结尾加上?a=phpinfo();
    
4.htaccess文件绕过(分布式配置文件)
    AddType application/x-httpd-php .jpg
    这个指令代表着.jpg文件当做php来解析
    配置文件没有文件名:可以用cmd命名
    ren 1.txt .htaccess
    
    cmd:给一些专业人士用的,而桌面是给普通用户用的
  
  步骤:
    先上传一张图片马12345.jpg—>复制图片链接浏览器打开,然后再上传.htaccess文件,刷新刚才的浏览器页面。结果发现,被当做代码执行啦
  
5.后缀大小写绕过
    window文件里面部分大小写
    小写不允许上传,改成大写
    
6.文件后缀(空)绕过——在BP中.php加空格
    文件后缀名加空格,没有问题
    php = php 在系统操作的时候(系统认为你误打的)
    但是在字符串匹配的时候php != php
    
7.文件后缀(.)绕过
    文件后缀加.结果.不见了
    在抓包处改成.PHP.
    
8.window文件流绕过—A文件可以寄宿在文件B上,资源管理器只能看见宿主文件
    在cmd中,echo 1111
    echo abcd >>1.txt:b.txt    //b.txt寄宿在a.txt上
    
    notepad
    notepad 1.txt //是没有东西的
    notepad 1.txt:b.txt    //有内容了
    
    正常生成2.txt
    echo abcd >>2.txt::$DATA
    //这里面就有东西了
  
9.构造后缀绕过
    ph. .(只转换一次)开发真是太难啦
    ‘.‘过滤,’  ‘过滤,但是后面还有一个’.’
  
10. pphphp(只检测一次,自上而下)

五、总结

  • 黑名单绕过包括:前端绕过(.jpg)、Content-Type(内容绕过)、黑名单绕过(禁止上传.asp|.aspx|.php|.jsp后缀文件,但是可以上传.phtml)

你可能感兴趣的:(网络安全零基础入门(第八章-1)文件上传漏洞——解析、验证、伪造(一))