文件上传+绕过方法+菜刀的基本用法

关于原理方面就不加赘述了,可以Google一下,我贴一下几百年前我的理解:原理:上传一个脚本(jsp,asp,php),然后就得到机子的shell (哇,感觉很粗糙)

文件上传漏洞的几种常见的姿势:

1.js前端验证
2.mime
3.后缀名
4.修改字母大小写(同第一种,就是把PHP几种大小写试一试 还有可能是phtml)
5.00截断
6.上传含有一句话的图片

最简单的:先直接上传一个php文件,看是否正确


1.js前端验证:

     一般都是在网页上写一段JavaScript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。
  判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。

解决方法:
 1):抓包,修改文件后缀名 比如:传上去的是一个jpg格式,然后改成php  要看能不能传上去  如果传不上去就改后缀 然后抓包改成php
 2):直接F9,HTML里面 将filename="xxser.jpg"修改为filename="1.php"
  这里注意第二种,把长度修改了,要是之前Content-Length =200 这里就要修改为196

2.MIME验证:
MIME类型用来设定某种扩展名文件的打开方式,当具有该扩展名文件被访问时,
浏览器会自动使用指定的应用程序来打开。

1)content-type字段校验:

   GIF 图片的MIME image/gif
    CSS            text/css
    jpg            image/jpg

比如:上传了一个php,抓包,看到php的MIME类型为 application/php ,

      而在Upload.php判断文件类型是否为image/jpeg,这里就无法通过验证

解决:在包里面把Content-Type 更改为 image/jpeg ,通过验证

 

 2)文件头校验

  可以通过自己写正则匹配,判断文件头内容是否符合要求,这里举几个常见的文件头对应关系:
(1) .JPEG;.JPE;.JPG,”JPGGraphic File”
(2) .gif,”GIF 89A”
(3) .zip,”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”

解决办法:在木马内容基础上再加了一些文件信息,有点像下面的结构
         GIF89a


3.后缀名( 00截断) 这是一个讲述截断在文件上传和包含之中的利用:http://www.2cto.com/article/201502/377462.html
客户端传输到服务端 在服务端:缓存上传的文件,然后服务器端进行验证,如果符合要求,就上传到目录, 如果不符合,就直接把缓存文件删除

方法:抓包,将上传的1.jpg改成 2.php(空格)1.jpg 然后单击HEX进入十六进制编辑,
      将文件名中空格的十六进制20改成00 (这里就是去找到改的那句话),单击“GO”
      发现成功上传2.php 2.php后面的字符已经被截断(可以在Raw里面找到)


6.上传含有一句话的图片
 
  上传含有一句话的图片,上菜刀,右键添加shell,地址栏输入 上传地址


讲述中国菜刀用法
  这里上传成功了(一般php都是传自己写的一句话木马),就在网址栏得到网址栏了,打开菜刀,
 右键添加,编码格式选择UTF-8,脚本类型PHP ,然后连接,shell拿到了,然后就开始可以去搞事情了
 或者flag拿到了

转载于:https://www.cnblogs.com/M3tar/p/7345163.html

你可能感兴趣的:(文件上传+绕过方法+菜刀的基本用法)