24.07.06 [드림핵] easy-login

김현수·2024년 7월 6일

웹해킹

목록 보기
4/7

ez 로그인 도전
ID, PW, OTP를 입력해서 로그인하면 된다.
뭐 아무거나 쳐보자.
오호
코드를 다운받았다. php 코드로 되어있다.
PW는 0~f 까지의 길이 -1만큼의 16진수 문자로 되어있다.
OTP는 P로 시작하는 6자리 랜덤 정수?이고 빈 칸은 0으로 채우는 것 같다.
벌써 어려운 냄새 솔솔 풍긴다.
일단 중요해보이는 부분은 base64 인코딩 된 걸 디코딩하는 것.
json도 인코딩? 디코딩?
id가 admin이라는 것.
strcmp로 cred['pw'] 와 GLOBALS['admin_pw']를 비교하는 것.
cred가 아마 내가 입력해야 할 부분? 인 듯 하고 GLOBALS는 전역변수 같은데 생성된 비밀번호를 말하는 것 같다.
아무튼 위의 if문 관문을 뚫고 비밀번호가 맞으면 flag를 출력한다.

이거 영어 공부를 해야하나... 코딩 공부를 해야하나..............
어려움이 있어서 또 검색 찬스.................

패스워드와 OTP를 우회해야 한다는데..!
https://www.php.net/manual/en/types.comparisons.php
여기 PHP 홈페이지 메뉴얼에서 보고 할 수 있다는데..!
PHP에서는 문자열을 비교할 때 자동으로 타입이 변환된다는데..!

일단 OTP는 != 이걸로 비교하고 있고, PW는 strcmp 함수로 비교하고 있다.
==가 붙은 걸 보니 !=는 이걸로 하는 것 같다.
두 개를 비교해서 true인지 false인지 판단하고,
만약 타입이 다르면 자동으로 변환된다.
OTP 생성 코드에서 strval 함수로 OTP를 문자열로 변환하기 때문에
나는 입력값을 문자열 말고 다른걸로 줘서 true가 나오게 하면 될 것이다.
true를 주면 되겠지?
이제 PW.
strcmp 함수는 인자값으로 string이 들어오지 않으면 null(false)를 반환하는 취약점이 있다고 한다.
그래서 [ ]을 주면 null이랑 만나서 true값을 반환할 것이다.
입력해본다.
아..... 뭥미 ㅡㅡ?
서버 다시 열어서 했는데 OTP fail 뭐지 하며 다시 검색 찬스....
아.... 여기서 하는 게 아니고 익스플로잇으로 코드 짜서 flag만 알아내는구나...
낭만 없네 ㅡㅡ
ㅋㅋ 혼자 할 수 없는 구조

파이썬은 있는데
requests 모듈이 없다고 계속 실행이 안 돼서
cmd창에서

> pip install requests

를 입력하여 설치 완료.
아 ~~ 속이 다 시원하다 그냥
DH{85256d8e59d3603651c9053572506e088d8a953e0faa59f769afd1745b09a618} 플래그 겁나 기네 찍어서 풀지도 못하겠네 그냥 후..
제출할게요
다시는 이런 문제 ez 하다고 속이지 마쇼.

profile
안녕 나를 소개하지 이름은 김현수 직업은 학생 취미는 음악 감상 독서 영화 드라마 시청 게임 오 한 줄이 꽤 길다 이거 어디까지 늘어나는 거에요?

0개의 댓글