본문 바로가기

Security

(29)
[DVWA 실습] File Upload(low) 문제 해결 방법 여기에 이미지 파일 대신 웹쉘 파일을 업로드를 한다. 우린 여기서 다음과 같은 웹쉘 php 파일을 사용할 것이다. 코드를 살펴보면 command를 입력하라는 내용이 있고 사용자 입력을 받기 위한 폼을 표시하는 html 출력 구문이 있다. cmd라는 파라미터의 값이 설정되어 있으면 이걸 system 함수로 실행하는 부분이다. 폼에 내용을 입력하게 되면 그 부분이 cmd 파라미터로 설정된다. 따라서 사용자가 입력한 것을 시스템 명령으로 실행하는 것이다. 이제 이 파일을 업로드 한다. 이미지 파일을 업로드 하라고 했지만 무시하고 웹쉘 파일을 업로드 한다. Browse 버튼을 눌러 webshell.php 파일을 선택, Upload버튼을 누른다. 결과를 보면 upload가 성공적으로 되었다고 나온..
DVWA - File Upload DVWA의 다섯 번째 실습 대상인 File Upload다. 선택한 파일을 업로드하는 기능을 가진 폼에 필터링이 제대로 구현되어 있지 않아 악성 파일들이 업로드될 수 있으며 이를 이용해 서버 측의 php 엔진에서 phpinfo() 등 php 코드를 실행하는 것이 목적이다. File Upload? 현대 웹 애플리케이션에서 사진이나 비디오, 바이너리 등 다양한 파일을 서버에 업로드하는 기능은 거의 필수적으로 구현되어 있다. 하지만 이렇게 업로드되는 파일들을 필터링하지 않거나 사용자가 직접 접근하여 실행시킬 수 있다면 웹 애플리케이션에 심각한 영향을 끼칠 수 있다. 예를 들어 웹쉘 파일이 서버로 업로드될 경우 이 파일이 실행되기만 하면 RCE를 통해 서버 측에서 실행되어 중요 정보를 읽거나 서버를 장악할 수 있..
[DVWA 실습] File Inclusion(high) 문제 해결 방법 1. 소스코드를 보면 "file*"로 file1, file2, file3이 맞는지와 "index.php"파일인지 필터링하고 있다. 2. RFI공격은 주소를 가져와야 하기 때문에 RFI공격을 막을 순 있지만 Path traversal공격은 막지 못한다. file이란 단어를 검증하고 있기 때문에 "file/../../../../../../../etc/passwd"처럼 file디렉터리를 만들고 그 뒤에 Path traversal공격을 시행하면 된다. 주의해야 할 점은 "../"를 7번 써줘야 한다. file디렉터리로 우회해서 공격하는 것이기 때문에 경로가 총 7번이 된다.
[DVWA 실습] File Inclusion(medium) 문제 해결 방법 공격자가 악성 스크립트를 서버에 전달하여, 해당 페이지를 통해 전달한 악성 스크립트 또는 코드가 실행되도록 하는 취약점이다. 삽입 파일의 위치에 따라서 RFI(Remote File Inclusion)와 LFI(Local File Inclusion)으로 분류된다. 페이지 화면 [DVWA - File Inclusion] - Low 난이도와 동일한 페이지 화면을 출력하고 있다! - 바로 소스코드를 확인하러 가보자 !! 소스코드 [File Inclusion 페이지 - 소스코드] - Low 난이도의 경우 page의 파라미터 값으로 파일을 불러오는 코드 뿐이였지만… - 바로 아래 새롭게 입력값 검증으로.. http://와 https:// 그리고, ../와 ..\\의 필터링이 추가되었다. - 그치만,..
[DVWA 실습] File Inclusion(low) 문제 해결 방법 공격자가 악성 스크립트를 서버에 전달하여, 해당 페이지를 통해 전달한 악성 스크립트 또는 코드가 실행되도록 하는 취약점이다. 삽입 파일의 위치에 따라서 RFI(Remote File Inclusion)와 LFI(Local File Inclusion)으로 분류된다. 페이지 화면 [DVWA - File Inclusion] - file1.php / file2.php / file3.php 총 3개의 php가 링크되어 있다! - URL에는 page 값으로 include.php가 입력되어 있음을 확인할 수 있다. 소스코드 [File Inclusion 페이지 - 소스코드] - $file이 GET 메소드를 통하여 page 파라미터 값으로 해당 파일을 불러오는듯 하다! - 해당 코드를 통해 File Inc..
DVWA - File Inclusion DVWA의 네 번째 실습 대상인 File Inclusion이다. 각 파일을 클릭하면 특정 php 코드가 실행되며 URL에 파일 이름이 파라미터로 전달된다. 이 특성을 활용하여 웹 서버가 다른 파일을 읽도록 하는 것이 이 실습의 목적이다. File Inclusion? File Inclusion은 실행 시간에 다른 파일을 읽어 동적으로 웹페이지를 생성하는 애플리케이션에서 자주 볼 수 있는 취약점이다. 주로 PHP의 include() 함수가 그 단적인 예인데 예를 들어 데이터베이스 연결 클래스를 만들어 이를 여러 페이지에서 사용하고자 한다면 include("db.php")처럼 불러와서 사용할 수 있다. 마치 C언어에서 사용자 지정 헤더를 include 하는 것과 비슷한 방법으로 꼭 클래스뿐 아니라 다수의 페이..
[DVWA 실습] CSRF(high) 문제 해결 방법 High 단계에서는 이전 Medium 단계에서 사용한 레퍼러 헤더를 검사하는 방식 대신 CSRF 토큰을 구현하여 올바른 사용자가 작업을 수행하고 있는지 검사하고 있다. 역시 hidden 필드로 구현되어 있으며 서버측에서 매 요청마다 고유하게 생성한 문자열 값이다. 이전 Low, Medium 단계에서 했던 것처럼 사용자에게 링크나 버튼으로 클릭만 유도해서는 토큰 값을 얻을 수 없기 때문에 공격이 불가능하다. 그렇다면 지난번 Brute Force 실습 때처럼 서버 측 언어를 이용해서 패당 토큰 값을 파싱, 악성 URL에 GET 파라미터로 삽입해서 공격할 수 있지 않을까? 하지만 이번에 필요한 것은 우리의 토큰 값이 아니라 사용자의 토큰 값이다. 사용자가 웹사이트를 요청했을 때 서버 측에서 생..
[DVWA 실습] CSRF(medium) 문제 해결 방법 Medium 단계에서는 레퍼러 헤더를 검사하는 로직이 추가되었다. 그러나 eregi() 함수를 이용한 단순한 문자열 비교기 때문에 레퍼러 헤더에 서버 이름 문자열이 포함되기만 해도 통과할 수 있다. 레퍼러는 해당 사이트에 접속하기전 방문했던 사이트로 예를 들어 DVWA의 CSRF 실습 메뉴에 접근하면 요청 헤더에는 다음과 같은 레퍼러 헤더가 존재한다(직접 URL로 접근한 게 아닌 경우). Medium 단계 실습에서 eregi() 함수로 검사하고 있는 문자열은 $_SERVER['SERVER_NAME'] 변수로 이는 서버가 동작하고 있는 호스트인 "192.168.56.103"을 의미한다. 지금은 DVWA가 가상 머신에 설치되었기 때문에 사설 IP 주소를 갖고 있는데 만약 DVWA가 설치된 환..
[DVWA 실습] CSRF(low) 문제 해결 방법 Low 단계에서는 GET 메서드의 파라미터로 새로운 비밀번호와 새로운 비밀번호 확인 문자열을 받아서 요청을 처리하기 때문에 다음처럼 악성 URL을 클릭하면 비밀번호가 URL에 기재된 대로 변경된다. 이를 테스트해보기 위해서 빈 페이지(about:blank)에 자바스크립트를 활용하여 링크 태그를 하나 추가한 후 href 속성을 비밀번호 변경 페이지로 설정하여 위처럼 악성 URL을 생성하였다. 위 링크를 클릭하면 비밀번호를 00000000으로 변경하는 요청이 전송되며 사용자 인증 수단이 없기 때문에 사용자가 이 악성 링크를 클릭해서 원치 않게 비밀번호를 00000000으로 변경하는 것인지 실제로 비밀번호를 00000000으로 변경하려는 것인지 서버 측에서는 구분할 수 없다. 그러므로 CSRF..
DVWA - CSRF DVWA의 세 번째 실습 대상인 CSRF다. 이 입력 폼은 비밀번호를 변경하는 시스템이며 이를 로그인한 사용자가 모르게 사용하여 비밀번호를 원하는 비밀번호로 변경하는 공격을 실습해볼 수 있다. CSRF? CSRF, Cross-Site Request Forgery는 사이트 간 요청 위조 공격으로 사용자가 자신의 의지와는 무관하게 공격자가 원하는 행위를 수행하게 된다는 것이 핵심이다. 이는 서버 애플리케이션이 어떤 요청을 보내는 사용자가 본인이 맞는지 확인하지 않고 사용자의 브라우저에 저장된 세션이나 쿠키를 신뢰하는 것을 악용한 공격으로 예를 들어 사용자가 특정 웹사이트에 로그인한 상태에서 정상적인 링크로 위장된 비밀번호 초기화 링크를 클릭하게 되면 서버에서는 정상적인 사용자(웹사이트에 로그인되어 세션이 유..