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

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

나쁜 해커들은 바로 이런 순수한 기능을 이용해 공격을 한다.
바로 악성 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