[LOS] zombie_assassin
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 처럼 뒤에 나오는 백슬래시를
우회하도록 같은 페이로드를 구성해보도록 하자.
문제 풀이에 성공할 수 있다.
화이팅 💪