본문 바로가기
Webhaking/WebHaking CTF

[Webhaking.kr] old 18번

by Y06 2020. 11. 5.

처음 18번 문제에 들어가면 나오는 화면이다. 제출 버튼과 RESULT 부분이 보이고 소스 코드를 확인 할 수 있는 것을 볼 수 있다.

 

먼저 문제를 풀기 위해 소스 코드를 확인했다. 긴 소스코드 중 가장 유심히 봐야 할 부분을 캡처하였다.

 

눈에 띄는 코드 부분이다.

첫 줄을 보면 'no'를 GET 형식으로 받아야 소스가 실행되는 것을 볼 수 있다.

 

두 번째 preg-match 부분을 보면 no를 입력 받고 값에 공백, /, /, \(,\), \t, |, &가 있을 경우, exit에 의해 함수가 실행되지 않고 종료된다는 것을 알 수 있다.

 

그 다음은 mysql 데이터베이스에서 id가 quest이고 입력받은 no 값과 일치하는 id를 검색하여 q라는 변수에 저장한다는 것을 알 수 있다. 

 

소스코드에서 주석으로 admin의 no가 2라고 알려주었다. 결국 우리는 id가 admin이고 no가 2인 result를 추출하면 되는 것이다. 하지만, 이미 where 조선에 id가 guest라는 조건이 있기 때문에 아무리 admin의 no 값을 입력해도 admin을 추출할 수 없었다.

 

앞에 있는 조건을 거짓 or 조건으로 뒤에 내가 원하는 조건을 달아 앞의 조건과 상관없이 내가 원하는 조건이 성립되도록 하였다.

 

where id='guest' and no=-1 or no=2

 

위와 같은 조건은 앞의 and 조건이 거짓으로 뒤에 있는 조건을 참으로 no=2의 값을 검색해보았다.

 

제출 칸에 넣어보았더니 실패하였다. 여기서 우리는 위에서 문자를 필터링 해야 한다는 것을 배웠다. 문자를 필터링하여 제출 칸에 넣었을 때 주소창에 이상한 문자로 인코딩 되는 것을 볼 수 있었다.

주소창에 직접 문자 필터링한 ?no=2%0aor%0ano=2 값을 넣었다

 

문제를 풀었다!

'Webhaking > WebHaking CTF' 카테고리의 다른 글

[Webhaking.kr] old 9번  (0) 2020.11.09
[Webhaking.kr] old 27번  (0) 2020.11.05
[Webhaking.kr] old 17번  (0) 2020.10.02
[Webhaking.kr] old 14번  (0) 2020.10.02
[Webhacking.kr] old 32번  (0) 2020.10.01