LOS : https://los.rubiya.kr/
✔️ 문제
문제는 다음과 같다.
✔️ 풀이
풀이에 해당하는 코드는 이전 문제와 같다.
if($result['id'] == 'admin') solve("goblin");
이번에도 result에 해당하는 id 값이 admin이여야 하는데,
이전 문제와 다른 것은 no를 받고 있고,
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
이렇게 쿼터를 사용하지 못하도록 No Quotes ~_~ 라며 약올리고 있다.
no를 1부터 집어넣으면 바로 guest라는 것을 보여주는데,
no가 2면 나오지 않는다.
즉, guest는 1의 no 값을 가지고 있는데 이는 index 형태인 것으로 보이고
admin의 인덱스 번호를 찾아서 and 연산자로 참이 되면서 동시에
id가 admin이도록 만들어야 할 것이다.
근데 1 or id=admin이라고 하면 쿼터 입력이 불가능하기 때문에
hex값으로 변환하여 넣어주면 admin에 해당하는 id를 넣을 수 있게 된다.
https://www.online-toolz.com/tools/text-hex-convertor.php
Text to Hex Converter - Online Toolz
In mathematics and computer science, hexadecimal (also base 16, or hex) is a positional numeral system with a radix, or base, of 16. It uses sixteen distinct symbols, most often the symbols 0–9 to represent values zero to nine, and A, B, C, D, E, F (or a
www.online-toolz.com
해당 사이트를 이용하여 admin을 hex 값으로 변환하면
admin에 해당하는 hex 값은 0x61646d696e 이다.
이렇게 넣고 한번 확인해보도록 하자.
우선 앞선 구문이 참에 해당하기 때문에 아직까지는 Hello guest라고
띄워주는데 만약 guest가 1에 해당하는 값이 아니게 되면 해당 구문을
무시하게 될 것이고 뒤에 추가로 admin에 해당하는 id를 뿌리게 되면
풀리지 않을까? 하는 생각으로 구문을 삽입해보도록 하자.
생각한대로 구문을 삽입하면 바로 클리어하게 돼서 조금 허무한 감이 있다..
자세하게 풀어서 설명하면 다음과 같다.
// guest가 1에 해당하기 때문에 Hello guest
id='guest' and no=1 or id=0x61646d696e (id='admin')
// guest가 1이 아니여서 앞 문장은 거짓
// 뒤에 나오는 값이 id='admin'에 해당하기 때문에
// 위에서 본 solve를 작동하는 코드와 조건 일치
id='guest' and no=2 or id=0x61646d696
화이팅 💪
'보안 > LOS' 카테고리의 다른 글
[LOS] darkelf (0) | 2022.12.20 |
---|---|
[LOS] wolfman (0) | 2022.12.20 |
[LOS] orc (0) | 2022.12.19 |
[LOS] cobolt (0) | 2022.12.19 |
[LOS] gremlin (0) | 2022.12.19 |