[드림핵 WEB] Beginner 워게임 simple-web-request 문제풀이
https://dreamhack.io/wargame/challenges/830
사이트에 들어가면 STEP 1 페이지를 발견할 수 있다
빈칸 두개를 채워야하는데 일단 다운 받은 파일에 있는 코드를 살펴보자
STEP 1 페이지에 관련된 코드는 이 부분이다
아래쪽에 STEP 2로 redirect되려면 prm1은 getget이고 prm2는 rerequest 와 일치해야한다
step1_text 형식에 맞게 내가 입력하는 빈칸 부분은 prm1과 prm2 변수 위치이다
차례대로 prm1,prm2에 입력하니 STEP 2로 바로 넘어갔다
(STEP1을 해결하지 않고 2를 접근하려고 하면 NOT YET이라고 뜬다)
STEP 2 페이지의 모습이다
STEP 2에 관련된 코드를 보는데 잘 모르겠다
우선 flag 페이지 코드부터 읽어보자
플래그는 flag.txt 파일에 있다고 했으니 return 중 FLAG를 볼 수 있는 젤 첫번째 if 문 조건에 집중해야한다
이때 만족시키려면 prm1에는 pooost 와 prm2에는 requeeest 를 입력하면 될듯하다
prm1과 prm2에 각각 입력하였다
대박 flag가 나왔다
DH{c46b414ddba26adfa4606c59655bda0a18fbe260606b042b52d865e0160eea0e}
+ 아까 완벽히 이해하지 못한 STEP 2 의 코드 부분을 다른 분을 참고하여 학습했다
https://eunginius.tistory.com/74?category=1352511
prev_step_num(입력값)이 step1_num과 일치해야 조건문에 진입하여 원하는 값을 return 받을 수 있다
이때 전역변수 step2_num은 int.from_bytes(os.urandom(16), sys.byteoreder)의 값을 저장한다.
step1_num과 step2_num는 코드에서 찾을 수 없다
/step2 로 넘어오면 url에서 prev_step_num 값을 확인할 수 있다
코드 속의 url.for()함수를 통해 step1_num 값이 전달된 것으로 볼 수 있다
코드만 잘 읽을 줄 알면 풀 수 있는 간단한 문제였다
페이지를 구분하여 관련 부분을 찾을수 있고 return되는 결과와 변수만 해석할 줄 알면 된다 !!
그리고 문제를 꼼꼼히 읽자
이제 beginner 문제 정도는 겁먹지 않고 도전할 수 있는 것 같아서 .. 조금 기쁨