HackCTF Web의 16번째 문제는 Wise Saying이다.
문제 링크: http://ctf.j0n9hyun.xyz:2036
문제 링크로 들어가면 "Plz login"이라는 문구가 뜨면서 로그인 창이 뜬다. Authenticate 문제와 마찬가지로 SQL Injection으로 접근이 가능한지 보기 위해 ID: admin / PW: ' OR '1' = '1을 넣어서 로그인 시도를 했다.
"login ok"라는 문구가 뜨면서 로그인에 성공했다. 이 문제를 다 풀고 이미 풀었던 사람이랑 얘기를 하는데 이 사람은 아무거나 쳤는데도 로그인이 됐다는 것으로 봐서 SQL Injection 문제는 아닌 것 같다. 그리고 하이퍼링크로 표면적으로는 1번부터 10번까지 총 10개의 링크가 있다.
일단 하나씩 클릭해봤다. 문제 이름이 Wise Saying인 것처럼 명언이 써져있었다.
써져 있었던 명언 list (혹시나 궁금하신 분들이 계실 수도 있으니..)
근데 이 명언도 허투루 준 것은 아니라고 생각해서 정말 단순하게 앞글자만 이어봤다.
"SESSION LFI"라는 문자열이 보인다. LFI를 사용해서 풀어가는 문제인가 싶다.
LFI(Local File Inclusion)는 공격 대상 서버에 있는 디렉터리로 접근하여 원하는 값을 열어보게 하는 행동이다. LFI는 php코드에서 include() 함수에 적절한 보호장치나 필터링이 없을 때 주로 발생된다. 이 블로그를 참고했고, 자세한 추가 내용을 확인하고 싶으면 해당 블로그에 설명이 잘 써져 있으니 방문해봐도 좋을 것 같다.
위의 사진과 같이 시스템 파일에 접근을 하려는 시도를 했으나 필터링에 걸렸다. 어떤 방식으로 접근해야 할 지에 대해 생각해보기 위해 페이지 소스코드를 봤다.
주석에 "?phpinfo=1" 이 문구가 써져 있었다. 이 방식으로 phpinfo에 접근할 수 있었다.
세션이 저장되는 경로를 확인하기 위해 session.save_path 값을 확인했다. 근데 no value다. 이것도 열심히 구글링 한 결과 session.save_path 값이 no value면 세션은 /tmp에 저장된다고 한다. 서버는 session_start() 함수가 호출되면 PHPSESSID를 생성하여 설정된 경로에 "sess_PHPSESSIONID"라는 파일을 생성한다. 이를 이용해 세션 값에 접근해보자.
Chrome 확장 프로그램인 EditThisCookie를 이용해 PHPSESSID를 확인했다. 이제 세션값에 접근하자.
세션 값에 접근을 하려고 했더니 "Fuck hack"이라는 문구가 뜨면서 접근이 되지를 않는다. 무엇을 잘못했을까 싶어서 아까 그 명언이 나오던 페이지로 돌아갔다. 페이지 이름 끝에 다 say가 붙는 것으로 봐서, page에 들어가는 값은 무조건 say로 끝나야함을 추측했다. 따라서 PHPSESSID에 먼저 say를 붙여 수정을 한 뒤, 다시 세션값에 접근하자.
이제 say 값을 붙여 접근하기 전에, 파일을 읽기 위해 ID에 <?php system("ls"); ?>를 입력하자.
세션 값에 성공적으로 접근했다. 접근하면 누가 봐도 flag가 있을 것 같은 f14g__NGA 파일이 보인다.
로그인 페이지로 돌아와서 플래그가 있는 파일에 접근하기 위해 ID에 <?php system("cat f14g__NGA"); ?>를 입력하자.
이후 다시 세션 값에 접근하면 다음과 같은 플래그가 나온다. 이를 인증하면 문제가 풀린다.
리버싱에 이어서 웹 문제도 올클했다. 스터디 전까지 풀기 성공😝
[HackCTF-Web#15] Authenticate - 350 points (0) | 2022.01.12 |
---|---|
[HackCTF-Web#14] LOL - 300 points (0) | 2022.01.11 |
[HackCTF-Web#13] Cookie - 300 points (0) | 2022.01.10 |
[HackCTF-Web#12] 가위바위보 - 200 points (0) | 2022.01.10 |
[HackCTF-Web#11] Home - 200 points (0) | 2022.01.10 |
댓글 영역