본문 바로가기

Web/wargame

[Webhacking.kr] old-25

소스코드를 봐도 별 내용이 없고, hello.php가 실행된 것으로 보인다.

 

 

 

flag.php와 index.php를 실행시켜 보았다. 소스코드는 마찬가지로 별 내용이 없다.

FLAG is in the code 라는 문구가 출력된 것으로 보아, 서버에 있는 flag.php 파일에 접근해서 코드를 확인해야 할 것으로 보인다.

 

 

 

LFI(Local File Inclusion)

- 공격자가 공격 대상 서버에 위치한 파일을 실행, 공격에 활용하는 취약점.

- 공격 대상 서버에 있는 디렉토리로 접근하여 원하는 값을 열어볼 수 있도록 함.

- LFI 공격 시도를 위해 주로 Path Traversal 취약점을 이용함.

- Path Traversal 취약점: 접근 권한이 없는 웹 서버의 파일에 접근하기 위해 특정한 방식으로 주소를 수정하여 접근 권한이 없는 파일에 접근하는 것

- php 코드에서 include() 사용 시 input에 대한 적절한 보호장치나 필터링이 없을 때 주로 발생하는 취약점.

- url에 ?변수명=변수값 이 아닌 ?변수명=주소명 이 되면 LFI를 의심 가능.

- 또한, 변수명이 저장하는 느낌의 변수명이 아니고 page, command, file, document, folder, pg 등 어디서 많이 본 듯한 변수명이어도 LFI를 의심 가능. 

 

LFI 취약점을 통해 flag.php 파일에 접근하려고 한다.

 

이 문제의 경우, php wrapper를 활용해 LFI 공격이 가능하다.

 

wrapper

- 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램

 

실제로, LFI 공격을 하면서 유용하게 사용할 수 있는 php wrapper

1. expect://

- system command를 실행시켜줌. expect://ls의 경우 system command를 ls로 해서 디렉토리를 보여주게 됨.

2. php://filter/

- 서버 내의 문서들을 encode 또는 decode 형태로 열람할 수 있도록 함.

- www.공격할 웹사이트/?file=php://filter/convert.base64-encode/resouce=파일명(파일경로) 활용하면, base64로 인코딩된 파일이 반환됨.

3. zip://

- zip 파일의 압축을 풀고, 압축을 푼 파일 안에 있는 코드를 실행시켜줌.

 

이 문제의 경우, 2번 php://filter/ wrapper를 이용해 해결할 수 있다.

 

 

 

url에는 .php가 붙지 않았던 걸로 보아 자동으로 .php를 붙여서 실행한다고 유추할 수 있다.

 

 

 

base64로 인코딩된 파일의 소스코드가 반환되었다.

 

 

 

이를 디코딩해주면,

 

 

참고

https://godhaword.tistory.com/102

https://zzzmilky.tistory.com/entry/%EC%9B%B9%ED%95%B4%ED%82%B9-LFI-%EC%B7%A8%EC%95%BD%EC%A0%90-php-wrapper

https://opentutorials.org/module/4291/26819

'Web > wargame' 카테고리의 다른 글

[Webhacking.kr] old-05  (0) 2022.01.16
[Webhacking.kr] old-24  (0) 2021.11.21
[Webhacking.kr] old-01  (0) 2021.11.21
[Webhacking.kr] old-12  (0) 2021.11.11
[HackCTF] Login  (0) 2021.11.09