前言:

在日常渗透中,上传文件是getshell的一个常用方案,在其中,我们常常直接修改后缀进行绕过,如果不行,往往会放弃,从而错失机会。这里是我通过github的一个上传绕过源码来记录下需要注意的点。

上传绕过原理:

1> 后缀名采用上传文件名的文件后缀,也就是后缀名我们可以控制,接下来,就是看后台对后缀名是否违法(黑名单),或者是否(白名单)是如何限制了。

var ext_name = file.substring(file.lastIndexOf("."));

//判断上传文件类型是否允许上传

if (allow_ext.indexOf(ext_name + "|") == -1) {

var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;

alert(errMsg);

return false;

}

2>一种就是直接采用内部命名,这种考虑解析漏洞或者别的思路。

$temp_file = $_FILES['upload_file']['tmp_name'];

$img_path = UPLOAD_PATH.'/'random(time).jpg; //这种已经确定死了,截断解析或者文件包含漏洞打组合拳吧

js绕过:

这种很简单,是通过js前段验证,我们抓包修改成.php即可。

function checkFile() {

var file = document.getElementsByName('upload_file')[0].value;

if (file == null || file == "") {

alert("请选择要上传的文件!");

return false;

}

//定义允许上传的文件类型

var allow_ext = ".jpg|.png|.gif";

//提取上传文件的类型

var ext_name = file.substring(file.lastIndexOf("."));

//判断上传文件类型是否允许上传

if (allow_ext.indexOf(ext_name) == -1) {

var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;

alert(errMsg);

return false;

}

}

window绕过技巧:

window的特性绕过,在window下,很多命名方式会导致window自动去了违法字符。

所以,前提是我们能保证服务器是window的情况下,可以根据返回值进行判断,来进行绕过。

if (isset($_POST['submit'])) {

if (file_exists(UPLOAD_PATH)) {

$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");

$file_name = trim($_FILES['upload_file']['name']);

$file_name = deldot($file_name);//删除文件名末尾的点

$file_ext = strrchr($file_name, '.');

$file_ext = strtolower($file_ext); //转换为小写

$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

$file_ext = trim($file_ext); //收尾去空

基本上有一下几点:

shell.php (后面加空格)

shell.php.

shell.php::$DATA

根据规则绕过:

源码中,对后缀判断的规则或者写入的规则进行判断。

if (file_exists(UPLOAD_PATH)) {

$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");

$file_name = trim($_FILES['upload_file']['name']);

$file_name = str_ireplace($deny_ext,"", $file_name);

$temp_file = $_FILES['upload_file']['tmp_name'];

$img_path = UPLOAD_PATH.'/'.$file_name;

if (move_uploaded_file($temp_file, $img_path)) {

$file_name = str_ireplace($deny_ext,"", $file_name);

这里是过滤了后缀中存在的关键字。

我们可以通过双写进行绕过: shell.pphphp

或者有的就是先上传temp文件,然后进行判断文件名是否合法,

不合法再进行删除。然后我们可以不断的写入文件,来执行我们的webshell等。

解析漏洞:

00截断解析漏洞的条件限制很苛刻

1. php版本小于5.3.4

2. php的magic\_quotes\_gpc为OFF状态

需要注意的点:

get请求中 可以直接 %00

post 必须在16进制下进行修改,因为post在请求中不会进行自行编码

总结:

基本没什么可以说的,还是需要走一遍流程,然后自己尝试一波即可。

pph上传文件到window服务器,[upload_labs]文件上传绕过小结相关推荐

  1. php下载图片保存到临时文件夹,57、PHP将上传到临时文件夹的文件移动到服务器指定文件夹内...

    本节用到的文件操作函数: 1.is_uploaded_file() 函数判断指定的文件是否是通过 HTTP POST 上传的. 2.move_uploaded_file() 函数将上传的文件移动到新位 ...

  2. NX二次开发 判断外挂是否需要更新,从PTF下载文件(从服务器下载文件)

    NX二次开发 判断外挂是否需要更新,从PTF下载文件(从服务器下载文件) //电信的宽带很快,移动到宽带要加载好几秒#include <stdio.h> #include <stri ...

  3. java上传文件图片到服务器保存,Java上传文件图片到服务器的方法

    这里我记录一个比较简单方便操作的java上传文件图片到服务器并且保存,具体内容如下 首先是页面html的   我这是提交一个文件和类型 我是添加一张临时图片得到微信的media_id保存数据库! en ...

  4. 文件上传服务器保存形式,78.上传文件及在服务器保存文件到任意路径

    上传文件到服务器是一个常用的操作,而在服务器上保存文件就需要多多用心了.因为你不可能只在一个路径里保存文件,所以需要实践一下保存文件到任意位置.当然,前提是你的应用程序有这样的操作权限. 首先建立一个 ...

  5. 怎样远程连接服务器后上传文件,远程登录服务器后怎样上传文件

    远程登录服务器后怎样上传文件 内容精选 换一换 OBS Browser+是一款用于访问和管理对象存储服务的图形化工具,支持通过配置内网DNS服务器地址的方式,使在华为云上的Windows ECS通过内 ...

  6. 上传文件到云服务器存储路径,上传文件到云服务器存储路径

    上传文件到云服务器存储路径 内容精选 换一换 云容器引擎需要与其他云服务协同工作,云容器引擎需要获取如下云服务资源的权限. 一个存储库只可以绑定一个备份策略.一个存储库只可以绑定一个复制策略.一个存储 ...

  7. html 保存文件指定路径,78.上传文件及在服务器保存文件到任意路径

    上传文件到服务器是一个常用的操作,而在服务器上保存文件就需要多多用心了.因为你不可能只在一个路径里保存文件,所以需要实践一下保存文件到任意位置.当然,前提是你的应用程序有这样的操作权限. 首先建立一个 ...

  8. 从手机里上传文件到云服务器,手机如何上传文件到云服务器

    手机如何上传文件到云服务器 内容精选 换一换 已获取该弹性云服务器的密钥文件.弹性云服务器已经绑定弹性IP地址.已配置安全组入方向的访问规则.如果您是在Windows操作系统上登录Linux,可以按照 ...

  9. 常用的xshell命令之从本地上传文件和从服务器下载文件到本地

    借助XShell,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 如果没有安装,需要执行:[cpp]yum install lrzsz[/cpp ...

最新文章

  1. Java vararg(动态参数)的应用
  2. Centos 7 64位 minimal 最小化安装的系统中静默安装oracle 11g r2(无图形化安装)
  3. Thymeleaf contextPath(无废话)
  4. 周正宁:研发最大的挑战是不断否定常规 否定自己
  5. 简单页面跳转生命周期(简单清晰)
  6. SQL Server 使用OPENROWSET访问ORACLE遇到的各种坑总结
  7. php mysql关键技术_中高级PHP开发者应该掌握哪些技术?
  8. 【Python】python3编码方式encode介绍
  9. json动态生成复杂表头excel_Excel办公用品管理系统,全函数统算,图表动态展示高效轻松...
  10. C语言网络编程:recv函数详解
  11. 大小写转换(金额转换)
  12. div绑定onblur事件
  13. Java编程入门基础知识合集
  14. pdf翻译器哪个好?这几个pdf翻译软件能支持一键翻译
  15. Python之字符编码与文件操作
  16. 文献精读丨GWAS+TRN多组学方法揭示小麦穗发育调控过程
  17. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-5联通3G功能调试支持
  18. 深入理解计算机系统-之-数值存储(二)--C程序打印变量的每一字节或者位
  19. 想做Python开发,这8种常用Python模块,你必须得知道!
  20. js判断时间是否为早上,中午,下午,晚上

热门文章

  1. 学习java之利用泛型访问自己定义的类
  2. 课时4:改进我们的小游戏
  3. 《Installing the XDK and the dev kit OS》
  4. 常对象和常函数的关系 const
  5. QT4.7.3在dm6446平台上的移植[转]--make[1]: *** [assistant_cs.qm] Error 2
  6. 如何把Sql Server2005 数据库转换成Access
  7. OneNote中到底能放多少种东西?
  8. 【Vegas原创】Can't connect to X11 window server using ':0.0' 解决方法
  9. 关于a元素href的注意点
  10. java递归简易应用教程