보안/LOS

[LOS] zombie_assassin

dDong2 2022. 12. 24. 16:08
LOS : https://los.rubiya.kr/

 

✔️ 문제

 

 

문제는 다음과 같다.

함수가 추가된 것을 확인할 수 있다.

 

 

✔️ 풀이

 

풀이를 위한 코드는 다음과 같다.

 

if($result['id']) solve("zombie_assassin");

 

이번 문제에서는 strrev() 함수와 이전 문제들에서

자주 보였던 addslashes 함수가 등장하는데,

addslashes 우회는 알고 있기 때문에 strrev에 대해서

찾아보도록 하자.

 

https://www.php.net/manual/en/function.strrev.php

 

PHP: strrev - Manual

It's faster and flexible than tianyiw function (comment #122953)

www.php.net

 

해당 공식문서에서 설명하는 것은 문자열을 역순으로

만들어주는 과정으로 생김새는 strrev(string $string): string

이러한 형태로 사용하고 있다.

"Hello" 라는 단어를 "olleH"로 뒤집어 출력하는 것이다.

 

 

guest 라는 id를 넣어보게 되면 tseug라는 문자열로

뒤집어서 출력되는 것을 확인할 수 있다.

addslashes는 %bf%27 와 같은 멀티바이트 조합으로

우회할 수 있다. 단 조건은 인코딩을 진행해야하는 코드여야한다.

 

또는, addslashes는 싱글쿼터, 더블쿼터, 백슬래쉬, NULL에 \를

추가하기 때문에 나머지를 문자열로 인식하게 하기 위해서는

"\ 또는 %00\ 처럼 문자열로 인식할 수 있도록 만들어주어야 한다.

 

"를 삽입하면 "\' and pw= 까지 모두 문자열로 인식되고,

%00을 삽입하면 0\' and pw= 까지 문자열로 인식하여

id='' or 1 # 과 동일하게 쿼리가 이루어 질 것이다.

 

가장, 주의할 점은 거꾸로 문자열을 삽입해야하는 것이다.

 

 

다음과 같이 addslashes 함수에 의해서 함께 출력되는 백슬래시를

우회하기 위해서 앞서서 succubus 처럼 뒤에 나오는 백슬래시를

우회하도록 같은 페이로드를 구성해보도록 하자.

 

 

 

문제 풀이에 성공할 수 있다.

 

화이팅 💪