War Game/HackCTF

[HackCTF #5] Guess Me

myejinni 2021. 11. 21. 23:47

제시된 링크를 타고 들어가면 나오는 화면.

 

코드를 뜯어 보면,

 

1. secret.txt 파일의 내용을 읽어와 secretcode 변수에 넣는다.

2. 클라이언트가 입력한 guess 값이 secretcode 변수 값과 동일하면 Flag 값을 출력한다.

 

이후 접근 방법 자체를 모르겠어서 라업을 살짝 참고했다.


해당 문제는 php extract 취약점에 대한 문제이다.

 

PHP란?

 

-C언어를 기반으로 만들어진 서버 측에서 실행되는 서버 사이드 스크립트 언어

-PHP는 동적 웹 페이지를 쉽고 빠르게 만들 수 있도록 해주기 위한 목적

-PHP로 작성된 코드를 HTML 코드 안에 추가하면, 웹 서버는 해당 PHP 코드를 해석하여 동적 웹 페이지를 생성

 

PHP extract 취약점이란?

 

-내가 원하는 값으로 변수 내용을 바꿀 수 있다는 것

-extract 함수에 $_GET 또는 $_POST를 통해 인자를 넘기면, 넘기는 파라미터와 값을 변수와 그 초기기값으로 설정할 수 있다. (기존값 OVERWRITE 가능)

 

* 단, extract 함수가 쓰여야하고,

공격자는 변수명을 반드시 알아야 함

 

extract 함수가 취약하지 않기 위해서는?

 

-변수 선언 전 extract 함수 사용

-extract 이후 다시 변수를 덮어쓰는 코드가 존재하는 경우

-EXTR_SKIP이 옵션으로 선언되는 경우

 

( *EXTR_SKIP=생성할 변수가 중복이면, 기존 변수를 덮어 쓰지 않는다.)


 

공부한 내용을 바탕으로 url을 이용한다.

 

http://ctf.j0n9hyun.xyz:2030/?filename=2&guess=

 

filename 변수를 조작해 존재하지 않는 파일명을 입력하고, guess 값에는 아무것도 넣지 않았다.

 

해당 url로 이동하면 Flag가 출력된다.

 

 

 
 
 

 

 

'War Game > HackCTF' 카테고리의 다른 글

[HackCTF #8] 마법봉  (0) 2021.11.07
[HackCTF #7 Login]  (0) 2021.11.07
[HackCTF #3] Button  (0) 2021.10.31
[HackCTF #2] Hidden  (0) 2021.10.31
[HackCTF #1] /  (0) 2021.10.03