지난 포스팅 글에서
아파치 웹 서버의 설정파일을 통해서 인증을 구현해보았다.
이어서 인증 사용자를 추가하고 추가적으로
글로벌 설정 파일과 로컬 설정 파일, 웹 서버 설정 파일에 대해 간략히 이야기 해보겠다.

지난 글에서 설정한 내용에서 우리가
.htpasswd 파일에 정보를 이용해 인증에 사용할거라는 코드가 있었다.
이제 그 파일을 만들어주는 작업을 해주면 된다.

처음 파일을 만드는 경우와 기존에 있던 파일에 사용자를 추가하는데 있어서
코드가 조금 다르다.


처음에 파일을 만드는 경우
#> htpasswd -c /var/www/html/.htpasswd user1




(사용자 생성)



user1을 생성해 보았다.

이제 기존에 있던 파일에 사용자를 추가하는 작업을 해보겠다.

이미 만들어진 파일에 사용자를 추가하는 경우
#> htpasswd /var/www/html/.htpasswd user2
여기서 user2는 사용자 이름이다.



(사용자 추가)



사용자를 추가해보았다.

.htpasswd 파일에 추가해주었는데 이 파일을 확인해 보면



(.htpasswd 파일)



확인해보면 사용자 아이디와 비밀번호가 보인다.
(비밀번호는 보안상 해쉬값으로 저장되어있는 것을 확인 할 수 있다.)

이렇게 만든 파일이 인증에 정말 잘 적용되는지
접속해보겠다.



(인증 접속)




(성공)



인증에 성공되어
페이지에 접근할 수 있는 것을 확인 할 수 있다.

관리자 도구에서 확인해보면
Authorization 항목에 값이 추가되있는 것을 확인 할 수 있다.



(인증 코드)



이렇게 글로벌 설정 파일을 이용하여 웹 페이지 인증을 설정해보았다.
그렇다면
부분적으로 인증을 요구하고 싶다면 어떻게 할까?

예를 들어 전에 우리가 만들었던 auth 폴더에만 인증을 요구하도록..

그러기 위해서는 로컬 설정 파일을 이용하면 된다.
확인해보기 위해 우리가 설정했던 코드들을 원래대로 지워준다.
단, AllowOverride All 은 그대로 둔다.
오버라이드를 허용하겠느냐라는 말인데 허용을 해야
우리가 추가적으로 설정을 할 수 있다.


(수정)



그 후 웹서버를 재시작 시켜준다. :)



(웹 서버 재시작)



글로벌 설정 파일 중
/etc/httpd/conf/httpd.conf
파일의 404번 라인을 보면
.htaccess 파일을 추가적인 설정 파일로 적용 시킬 수 있다는 부분이 보인다.

->
.htaccess 파일이 있는 디렉터리부터 그 하위까지 영향이 있다.
이 파일이 존재하면 그 해당 디렉터리 아래부터 인증을 요구하게 된다.

이 기능을 이용하여 웹 인증을 부분적으로 적용시켜보겠다.
auth폴더에 들어가서 .htaccess 파일을 만들어준다.



(auth 폴더)




(.htaccess)


.htaccess 파일에는 우리가 저번에 사용하였던
코드를 그대로 넣어준다. (인증을 사용하겠다는 말이다.)
그렇게 하여 확인해보면
auth 폴더에 있는 login.php 페이지에 대해 인증을 요구하게 된다.



(인증 요구)



반면 다른 폴더에 있는 제로보드 게시판에 대하여는
인증을 요구하지 않는 모습을 확인 할 수 있다.




(인증 요구없음)



이로써 글로벌 설정과 로컬 설정을 인증 설정을 하면서
확인해 보았다.

다음 글에서는 파일 업로드 취약점을 공략하기 위해
php 파일을 업로드 해야하는데
이 기능이 막혀있었던 것을 우회하는 방법을 살펴볼 것이다.





해킹의 공격은 서버측에서의 악성코드 실행으로 이루어 질 수도 있다.
쉽게 말하면
악성코드, 파일을 만들어서 서버에 저장하고 서버에서 실행을 하여 공격하는 것이다.

이게 말이 될까?
어떻게 서버에 내가 파일을 저장하지?
사실 우리는 아주 흔하게 그런 일을 하고 있다.
바로 업로드 기능이다.
게시판 혹은 웹 상에 우리의 사진 혹은 파일을 올려본 적이 있을 것이다.
이렇게 되면 우리가 올린 파일이 서버에 저장이 되고
다른 사람들이 그 파일을 받는 것이다.

나쁜 해커들은 바로 이런 순수한 기능을 이용해 공격을 한다.
바로 악성 PHP파일을 업로드 시키고 그 파일을 실행시키는 것이다.
이러한 공격이 이루어 질 수 있는 조건이 있다.
1. PHP파일이 웹 서버에 존재한다.(업로드 가능, 혹은 어떤 방법으로든)
2. 그 PHP파일을 웹브라우저에서 접근할 수 있다.(직접참조 가능하다.)

이렇게 되면 나쁜 해커는 웹 브라우저에서 PHP파일을 접근하여 실행시키는 것이다.

이러한 공격과정을 살펴보기 위해 업로드 기능을 이해해보자.

우리는 먼저 PHP파일이 아닌 일반적인 사진 jpg 파일을 업로드 해볼 것이다.




(업로드 할 사진)




우리가 만든 제로보드에 보노보노를 업로드 해본다 :)



(보노보노 업로드)




(업로드 된 화면)



보노보노가 게시판에 업로드 되었다.

그렇다면 이 사진파일은 웹 서버 어디에 존재하는 걸까?

F12 키를 눌러 코드를 볼 수 있는데 여기에 이미지의 경로가 나온다.
바로 data/ 폴더에 있다는 것을 알 수 있다. :)



(파일 경로)




제로보드 폴더의 /data 폴더에 들어가보니
보노보노가 있다 :)



(파일 존재)




그렇다면 두 번째 조건인 웹브라우저에서 직접 참조가 가능할까?
웹브라우저에 파일의 경로로 접근해 보았다.




(파일 접근)




(실행 화면)




보노보노 사진에 직접 접근이 가능하였고
실행까지 된 모습이다.

즉, 두 조건이 성립하고 나쁜해커가 존재한다면 공격을 할 수 있는 부분이다.

나쁜 해커처럼 우리도 PHP 파일을 올려볼 것이다.
단순히 화면에 run php haha 문자가 출력되는 php 파일이다.




(php 파일 작성)




우리가 만든 php 파일을 게시판에 올려볼 것이다.




(php 업로드)




파일을 올리려 클릭을 해보니...



(업로드 제한)




PHP 파일은 올릴 수 없다고 뜬다.

게시판에서 조건을 걸어둔 것이다.
write_ok.php 파일을 열어서 확인해 보겠다.



(write_ok.php 파일 확인)




(php 파일 제한)




207번 라인을 보니 HTML , PHP 파일을 올리지 못하게 필터링 해두었다.

아주아주 기본적인 취약점을 막아놓은 것이다.
이 것은 유명한 공격이므로 이렇게 해놓는 것이 당연하다.

그렇다면 과연 나쁜 해커는 여기서 좌절할까?
머리를 굴리기 시작한다.

꼭 확장자가 php파일이어야할까?
확장자를 txt 파일로 변경해서 올려 보았다.




(txt 확장자)





(업로드)




(업로드 된 모습)




php파일이 아니므로 필터링에 걸리지 않고
txt 파일이 업로드 되었다.

여기서 이제 txt 파일을 직접 접근해보겠다.



(실행)




실행해보니 php파일이 실행 된것이 아니라
단순히 txt 파일이 실행되었다...

왜 이런 일이 일어났을까?

이것을 이해하려면 웹에대한 이해가 필요하다.
웹 아파치 서버의 글로벌 설정파일을 이해해야한다.

이야기를 시작해보겠다.
웹 서버에서 경로
/etc/httpd/conf.d 폴더에
php.conf 파일이 있다. 바로 conf.d폴더에 있는 것들이 글로벌 설정 파일이다.
먼저 왜 php파일이 확장자 .php인 파일만 php 실행이 되는지 확인해 보겠다.
php.conf 파일을 열어본다.



(php.conf 파일 확인)




(php.conf 파일)




17번, 18번 라인을 확인해보면 .php 가 보이는데 바로 이것이
.php 파일확장자는 php로 실행하라는 뜻이다.
여기에 .txt를 추가해서 확인해 보겠다.



(php.conf 파일 수정)




그러고 나서 아까 우리가 txt파일로 실행됬던 attack.txt 파일을 실행해보았다.
웹에서!



(php 실행)



php로 실행 되었다.

그렇다면 글로벌 설정 파일은 무엇일까?
위에서 본것에 의하면 웹 서버에서의 설정파일? 정도로 이해 할 수 있다.

이번에는 /etc/httpd 폴더에 있는
httpd.conf파일을 확인해보겠다.
바로 이 파일이 정확히 말하는 글로벌 설정 파일이라고 할 수 있는데
이 파일은 웹 서버가 실행되면 이 파일을 읽어 들여서 여기에 적혀있는데로
웹 서버를 실행시키는 것이다.
그렇기 때문에 글로벌 설정 파일이라고 부른다.
이 파일을 확인해 보겠다.



(httpd.conf)



여기에 보면 웹 서버 설정 내용들이 있다.
쭉 내려보면 210번 라인을 볼 수 있다.



(210번 라인)



이 라인의 코드를 보면 conf.d 폴더안에 있는  .conf 파일을 전부 실행시키는 코드이다.

웹 서버가 실행될때 이 파일이 실행되는데
이 파일 안에 코드에 의해 confd 폴더에 있는 .conf 파일이 전부 실행되므로 여기에
있는 파일들도 글로벌 설정 파일이라고 할 수 있다.

쉽게 말하자면 웹 설정 파일이 너무 기니까 부분별로 파일을 쪼개 놓은 것이다.

이 전까지 우리가 웹 코드에서 인증을 구현했었는데
웹 서버 자체에서 인증을 구현할 수도 있다.

한번 웹서버에서 인증을 설정해보겠다.
우리가 적용시킬 웹 페이지는 /var/www/html에 있는 페이지들에 대해서
인증을 적용 시켜볼 것이다.
그러므로 <Directory "/var/www/html"> 태그 안에 입력하면 된다.



(설정 적용 위치)



인증 설정을 하겠다.



(인증 설정)




인증 설정 후 웹 서버를 다시 시작해준다.



(웹서버 재 실행)



재실행 후 제로보드에 아까 그대로 들어갈 수 있었는데
지금은 사용자 인증을 해야 접속을 할 수 있게 나왔다.



(인증 요구)




다음에 이어서 웹에 대한 이해를 해보겠다 :)



+ Recent posts