Get Admin
- 로그인해보니 쿠키에 loginUser=doldol이 있음
- admin으로 변경해서 보내보니 로그인 됨!
PIN CODE Bypass
- Fire를 눌러보니 "관리자만 이용가능합니다. 관리자인 경우만 확인 버튼을 클릭하고 계속 진행해주세요."이런 문구가 나옴
- 확인을 눌러보니 비밀번호를 입력하라고 나옴. 이제서야 비밀번호가 나오는게 좀 이상함.
- 비밀번호를 1234로 눌러보니 alert가 나옴
- 그런데 비밀번호를 GET으로 보내고 있다. 취약하긴 하지만 현재 문제에서는 쓸 수 없으니 넘어가자
- 비밀번호 입력칸이 같은 페이지내에서 분기처리된게 아니라 페이지가 달라지는게 이상해서 살펴보니 step1, step2로 바뀌었다.
- step3를 입력해서 접속해보니 발사 버튼이 보이고 누르니까 segfault가 나옴!
Admin is Mine
- 홈페이지 입력해보니까 이미 로그인되어있다. GetAdmin이랑 같은 세션을 공유하는 듯. 일단 로그아웃해보자
- GET /4/loginProc.php?userId=doldol&userPw=dol1234 으로 접속한다.
- 아이디에 admin'or'1'='1 이런식으로 입력해보니 console에 syntax 에러가 뜬다. injection 공격을 막아둔듯하다.
- 성공할때는 return 값이 "result":"ok" 나오는데 실패하면 "result":"fail"이 나온다.
- result를 준다는 것은 이걸 파싱하는 코드가 프론트에 있을 수도 있다.
- 개발자모드에서 login.php를 들어가보니 결과를 파싱하는 함수가 있길래 if문으로 ok, fail 검증하는걸 무력화하고 admin으로 로그인 시도했더니 해결!
Pin Code Crack
- 0부터 9999까지 입력해라고 함
- burp suirte로 intruder를 써보는데 너무 느려서(커뮤니티버전이라서 그런가) 콘솔로 대체
- 실패할 경우 Login Fail...이라는 alert가 뜨니까 그 결과가 없는걸 반복문으로 찾아서 별도 값에 저장
- 콘솔에서 해당 변수명을 입력하면 숫자가 나옴! 해결!
Login Bypass1
- UserId=doldol&Password=dol1234&Submit=Login 로그인해보니까 바디에 이런게 있고 로그인 성공시 302로 index.php로 보내고 있음.
- SQL Injection을 시도했지만 Operation timed out 타임에러가 뜸
- 아무리 찾아도 아무 문제가 없는데 핫스팟으로 하니까 됨.. 와이파이 이슈..
- 왜 sql injection을 하면 안될까? 그냥 로그인하는건 되는데.. 이건 추후에 알아봐야겠다.
Login Bypass2
- 사실 Bypass1도 그렇고 문제에서 실마리를 찾아서 접근해봐야하는데 유형이 같아서 SQL Injection으로 풀어야할 것 같다는 실마리? 직감? 만있음(실전에서는 적용하기 어려운 로직이긴함. 아니면 디폴트로 해보는 과정).
- 결론은 이것저것 시도해보다가 주석처리해보니까 됨
Login Bypass3
- 주어진 ID와 PW로 로그인을 해봤는데 Request나 Response에 마땅한 흔적같으게 보이지 않는다.
- 개발자모드에서 resource나 burpsuite를 살펴봤지만 특별한 취약점이 보이지 않음. 노가다를 해보자.
- UserId=normaltic3'#&Password=dol1234&Submit=Login : 단순 주석처리는 적용되지 않는다. UserId에 SQL Injection에 대한 일부 방어가 되어있다.
- UserId=normaltic3' OR '1'='1'#&Password=test&Submit=Login : SQL 구문 오류가 발생했거나, SQL 인젝션 필터링이 일부 활성화되어 있다.
- UserId=normaltic3&Password=' OR '1'='1'test&Submit=Login : 비밀번호에 injection을 해봤지만 로그인이 안됨. 비밀번호에도 SQL Injection이 방어가 되어있다.
- 주석처리를 다양하게 해본다던지 항상 true가 되게 하는걸 숫자로 한다던지 다양한 시도를 해봤지만 실패. 채팅방에서 Union Select 개념을 힌트로 알게 되어서 시도해봤음
- UserId=doldol'order by 2#&Password=dol1234&Submit=Login : 여기서 order by 뒤에 1,2일때는 잘 로그인이 되는데 3일때는 안됨. 컬럼갯수가 2개라는 뜻. 그런데 한가지 흥미로운 점은 여기서 #이 있어도 비밀번호가 틀리면 로그인이 안된다. 그렇다고 #이 빠져도 로그인이 안된다. 즉, 비밀번호를 비교하는건 웹서버에서 진행하고 있는 것이고 sql injection으로 주석처리가 되더라도 비밀번호 변수는 검증할 때 그대로 받아올 수 있게 된다. sql구문에서 주석처리 되는 것과 변수를 가지고 있는 것은 다른 개념이다.
- UserId=' union select 'normaltic3','test'#&Password=test&Submit=Login : UNION SELECT 구문을 사용하여, DB 조회 결과를 직접 주입함. 주석 처리로 뒤의 비밀번호 검증 부분을 무력화. ID 뒷부분이 정확히 비밀번호 검증은 아닐 수도 있음. 다만 뒷부분을 주석처리 안할 경우 Syntax 에러가 뜨는 것 같음.
Login Bypasss 4
- Bypass3랑 같은 초기 과정을 거쳤는데, 출제자의 의도?를 고려했을 때 3번문제에서 해시가 추가되었을 것 같았음.
- 어떤 해시 방법이 있을지 mysql 구문에서 적용되는 해시 명령어를 sha1, sha224, sha256, ssh384, sha512, md5 등이 있는 것을 구글링으로 알아냄.
- UserId=' union select 'normaltic4',md5('test')#&Password=test&Submit=Login : 다 대입해보니 md5방식이었음.
Login Bypass 5
- 정상적으로 로그인해보니까 전이랑 다른게 보임. Set-Cookie: loginUser=doldol : 쿠키를 통해 로그인 검증하는 것으로 보임.
- 쿠키가 너무 단순한 것 같으니 intercept를 켜보고 로그인 시도를 하고 돌아오는 response의 쿠키 값에서 loginUser를 normaltic5로 변경했음.
- 혹시나 개발자모드에서 쿠키의 value값을 그냥 바꾸고 새로고침하니까, 그렇게 해도 뚫림. 쿠키이름으로 단순비교. 간단한 문제였음.
'노말틱 모의해킹' 카테고리의 다른 글
[6주차 과제] 말틱님이 알려준대로만 하면 된다. (0) | 2025.05.21 |
---|---|
[6주차 강의] SQL Injection 데이터 추출 (1) | 2025.05.14 |
[5주차 코칭] 로그인 우회 접근 방법 (1) | 2025.05.07 |
[5주차 강의] SQL Injection (2) | 2025.05.07 |
[4주차 코칭] 로그인 우회 (1) | 2025.04.30 |