Apache HTTP Server에서 특정 디렉터리에 두어 그 디렉터리와 하위 디렉터리들에 대해 웹서버 동작을 제어하는 설정 파일이다.
.htaccess는 hidden 파일(파일명 앞에 점(.) 있음)이므로 보통 기본적으로 숨겨져 있다.
서버 설정 파일(httpd.conf 또는 apache2.conf) 없이도 웹 서버 설정 일부를 디렉터리별로 쉽게 변경 가능.
즉 임의로 웹 서버 설정의 일부를 디렉토리 단위에서 변경한다는 것 이다.
특정 웹 루트나 하위 폴더에 .htaccess를 두면, Apache가 해당 디렉터리 및 하위 디렉터리 요청 시 .htaccess 설정을 적용한다.
서버설정 파일보다 우선 적용되나, 서버 설정에 따라 해당 사용이 제한될 수 있다.
오늘 풀어볼 문제는 apache htaccess이다.

파일 업로드 기능을 이용해야 한다.
문제 파일은 다음과 같다.

웹 서버는 현재 php와 관련된 확장자를 제한하고 있다.


이런식으로 대문자를 이용해 올려보아도 웹 쉘이 실행되지 않는다.
어떤 방식을 사용해야 하는지 고민하던중, 제목에서 힌트를 얻었다.
아파치의 htaccess이다.
그러므로 이 기능을 이용해서 php파일 확장자 제한을 우회할 것이다.

txt확장자에 해당 코드를 담고, .htaccess라는 이름으로 이 파일을 업로드 하였다. 해당 코드는 .txt확장자를 .php로 인식할 수 있게 하는 코드이다.
즉 .txt확장자로 파일을 업로드하면, php확장자 필터링을 우회하면서 php파일로서 실행될 수 있게 하는 것 이다.
이제 .txt확장자를 가진 웹쉘 파일을 업로드한다.

그리고 cmd를 파라미터로 명령을 전송해본다.

이제 웹 서버가 악의적인 명령을 받아들이고 있다. txt파일이 php로서 실행되고 있는 것이다.
우리는 flag파일을 찾아야 한다. find명령을 이용해 flag를 찾아본다.

/flag가 보인다. 그리고 코드에서도 flag에 대한 힌트를 얻었다.

기존의 flag.c파일을 gcc로 컴파일하여 flag 실행파일을 만들었다.

역시 모든 사용자가 실행권한을 가지고 있다. 이제 이 파일을 실행해보겠다.

FLAG를 획득하였다.
FLAG : DH{9aeba1a6feed3769ae0915b62db2b4872bec98c2}