LOS : https://los.rubiya.kr/
✔️ 문제
문제는 다음과 같다.
이번에는 strtolower 라는 함수와 str_replace 함수가
존재하고 이를 우회해야하는 문제로 보인다.
✔️ 풀이
풀이를 위한 코드는 다음과 같다.
if($result['id'] == 'admin') solve("vampire");
이전 문제와 동일하게 id 값이 admin이면 되는데,
문제는 새로운 함수들이 추가된 것이다.
해당 함수들을 php 공식 문서에서 확인해보자.
https://www.php.net/manual/en/function.strtolower.php
PHP: strtolower - Manual
the strtolower version to support most amount of languages including russian, french and so on: <!--?php function strtolower_utf8($string){ $convert_to = array( "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "
www.php.net
해당 함수는 strtolower(string $string): string
문자열을 인자로 받는 함수이고, 문자를 소문자로 변환하는 함수이다.
즉, 이전에 시도했던 Admin이나 adMiN 문자로 푸는 것을 막기 위함으로 보인다.
https://www.php.net/manual/en/function.str-replace
PHP: str_replace - Manual
<!--?php public static function convert_chars_to_entities( $str ) { $str = str_replace( 'À', 'À', $str ); $str = str_replace( 'Á', 'Á', $str ); $str = str_replace( 'Â', 'Â', $str ); $str = str_replace( 'Ã', 'Ã', $str );
www.php.net
해당 함수는
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
의 형태를 가지고 있는데 문자열을 다음 인자에서
대체할 문자열로 바꿔주게 된다. 해당 객체 또한
입력받는 데 여기에서는 $_GET[id]이 해당된다.
즉, admin이라는 문자열을 작성해서 문제를 풀려고하면
빈 텍스트로 반환될 것이고, 대문자를 이용해서 풀려고하면
모두 소문자로 반환되는 것을 우회해야 한다.
id=admin 이라는 구문을 간단하게 넣어보면,
다음처럼 빈 공백으로 반환되는 것을 볼 수 있다.
그렇다면 간단하게 생각해봤을 때,
admin이 생략되기 때문에 aadmindmin이나
adadminmin 처럼 중간에 빈 공백으로 반환되면서 사라지면
admin으로 다시 합쳐지면서 풀리지 않을까라는 생각을 하게 되었다.
추측대로 잘 풀리는 것을 확인할 수 있다.
추가적으로 adADMINmin 처럼 작성해도 동일하게 풀 수 있다.
화이팅 💪
'보안 > LOS' 카테고리의 다른 글
[LOS] golem (0) | 2022.12.22 |
---|---|
[LOS] skeleton (0) | 2022.12.21 |
[LOS] troll (0) | 2022.12.21 |
[LOS] orge (0) | 2022.12.20 |
[LOS] darkelf (0) | 2022.12.20 |