DVWA의 Security Level을 Low 단계로 설정하고 Insecure CAPTCHA 메뉴로 들어간다. 우선 CAPTCHA 기능이 어떻게 동작하는지 살펴보기 위해 Burp Suite의 Proxy history를 살펴 보자. password는 'normal'로 입력하고 CAPTCHA 부분은 그림에 나온대로 입력한다. 다 입력한 후 change 버튼을 누른다. 이 때 http history에서 요청을 살펴 보자. 첫 번째 요청을 보면 step 이라는 파라미터에 1이라는 값이 설정 돼있고 우리가 비밀번호로 입력 했던 normal 값이 두 번 나온다. 그리고 recaptcha_challenge_field라는 것이 있는데 이것은 captcha를 확인할 때 매 번 랜덤하게 생성되는 값이 다. recaptch..
CAPTCHA 라는 것은 컴퓨터는 알 수 없는 흘려쓴 글씨나 그림을 이용하여 이를 제대로 인식한다면 사람이라고 판단하는 것이다. 회원가입 이나 비밀번호 변경 등과 같이 사람이 직접 하지 않으면 심각한 문제가 될 수 있을 때 사용 할 수 있다. 또 Brute Force 공격 처럼 프로그램을 이용한 공격에 대응 할 때 아주 효과적이다. 하지만 이를 제대로 구현하지 않게 되면 해커는 이것을 우회하여 공격 할 수 있다. 비밀번호 변경을 예로 다음 그림을 보자. 비밀번호 변경이 두 단계로 진행된다. 첫 번째 단계에서 CAPTCHA를 이용하여 정말 사람인지 확인한다. 확인이 되고나면 두 번째 단계에서 비밀번호를 변경한다. 그런데 이 과정이 제대로 구현되어 있지 않은 경우 밑의 그림과 같이 해커가 CAPTCHA를 확..
파일 인클루젼 공격은 주로 PHP 어플리케이션에서 발생한다. 그 이유는 PHP에는 include라는 함수가 있는데 이 함수를 이용하여 다른 파일을 소스코드에 직접 포함시킬 수 있기 때문이다. 이 때, include 할 파일을 웹 요청을 통해서 지정할 수 있는 경우 해커가 그 값을 조작하여 원하는 파일을 처리 할 수 있도록 만들 수 있다. 파일 인클루전 공격은 크게 로컬 파일 인클루젼(LFI)과 리모트 파일 인클루젼(RFI)으로 구분할 수 있다. · 로컬 파일 인클루젼(LFI) - 웹 서버 시스템에 원래 존재하는 파일을 include. · 리모트 파일 인클루젼(RFI) - 원격으로 외부에 있는 파일 까지 include 할 수 있다. 정상적인 상황일 때는 웹 애플리케이션은 file.php를 include하고..
CSRF는 Cross Site Request Forgery의 약자로 사이트 간 요청 위조 라고 번역 할 수 있다. 이 공격 방법은 해커들이 사용자들로 하여금 어떤 링크를 누르게 한 후, 링크를 누르면 사용자 모르게 어떤 특정 기능이 실행 되도록 하는 것이다. 주로 피싱을 활용해 사용자 패스워드를 변경하는 데에 사용된다. 이 공격은 2008년에 1080만명의 개인정보가 유출되었던 옥션 해킹 사건에서 사용된 기법중 하나이다. CSRF 공격은 다음과 같은 과정으로 진행된다. 1. 사용자가 먼저 사이트에 정상적으로 접속하여 로그인 한다. 2. 사용자가 사이트에 접속해 있는 동안 해커가 이메일을 보내서 어떤 링크를 클릭하도록 피싱한다. 이 그림에선 해커가 은행 직원으로 가장한 것이다. 3. 해커가 요구한 링크 클..
Burp Suite의 Intercept가 혹시 켜져 있으면 끈 다음 DVWA Security를 High로 설정한다. 파일 업로드 페이지로 가서 소스코드를 보고 어떻게 대응하고 있는지 확인하자. High단계는 클라이언트에서 자동으로 설정되는 업로드 타입을 보는 것이 아니라 실제 파일 이름의 확장자가 jpg인지 jpeg인지 png인지를 검사하고 있다. 또한 getimagesize라는 함수를 통해 실제로 파일의 내용이 이미지 인지를 검사 하고 있다. medium 단계 보다는 확실히 대응이 강화 되었다. 이 루틴은 어떻게 우회 할 수 있을까? 다시 웹쉘을 업로드 한 후 burp suite로 intercept 해보자. 여기서 이번에는 Content-type 이 아니라 filename 부분을 수정해 준다. 파일 이..
DVWA Security를 Medium으로 설정하고 Low 단계에서 처럼 webshell을 파일업로드 해보자. 이번에는 업로드가 실패했고 jpeg나 png 이미지 파일만 받을 수 있다는 메시지가 출력 된다. burp suite를 준비하여 파일이 업로드 될 때의 요청을 intercept 해보자. 다음과 같이 Burp Suite의 Proxy -> Intercept에서 Intercept On 으로 바꿔 준다. 다시 웹셀을 업로드 해보자. 업로드 요청이 인터셉트 된다. php 부분이 우리가 업로드한 파일의 내용이 전달되는 부분이다. Content-Type을 보면 Application/x-php 라고 설정되어 있는데 우리가 php파일을 업로드 했기 때문에 자동으로 php 타입으로 설정되는 것이다. 이 Conten..
파일 업로드 공격을 실습해보자. 먼저, DVWA에서 DVWA Security 단계를 Low로 설정하고 File Upload를 선택한다. File Upload에 들어가 보면 이전 시간에 보았던 것처럼 이미지 파일을 업로드 하는 부분이 있다. 여기에 이미지 파일 대신 웹쉘 파일을 업로드를 한다. 우린 여기서 다음과 같은 웹쉘 php 파일을 사용할 것이다. 이제 이 파일을 업로드 한다. 이미지 파일을 업로드 하라고 했지만 무시하고 웹쉘 파일을 업로드 한다. Browse 버튼을 눌러 webshell.php 파일을 선택, Upload버튼을 누른다. 결과를 보면 upload가 성공적으로 되었다고 나온다. 경로가 표시되었는데 '../ ' 가 두 번있어서 상위 디렉토리로 두 번 이동한 것을 알 수 있다. 아래와 같은 ..
파일 업로드 공격은 파일을 업로드 할 수 있는 페이지(게시판, SNS 등)에 악성 파일(웹쉘)을 업로드 하는 기법이다. 주로 웹쉘 이라고 하는 악성 파일을 업로드 하게 되는데 웹쉘이라는 것은 커맨드 인젝션 공격과 유사하게 웹을 통해 시스템 명령어를 실행할 수 있는 웹페이지이다. 다음 그림을 보자. 이미지를 업로드 하는 페이지가 있다. 해커는 이 때, 이미지 파일 대신에 웹쉘을 업로드 한다. 이를 막기 위해 웹 애플리케이션은 업로드 된 파일이 이미지 파일인지 검사해야 하는데 이를 제대로 하지 않으면 저장을 하게 된다. 이후 해커가 웹쉘에 접근하게 되면 웹쉘이 실행 된다. 이제 웹쉘을 통해 해커가 원하는 대로 시스템 명령어를 실행 할 수 있다.
DVWA의 Medium 단계에서는 통하던 파이프, & 공격이 High 단계에서는 통하지 않는다. 소스코드를 확인해 보자. 그런데 위의 소스 코드를 보면 개발자가 약간의 실수를 했다는 것을 확인할 수 있다. 파이프를 보면 '| ' 공백 하나가 들어가 있다. 이렇게 되면 파이프만 넣고 명령어를 실행하면 그 부분은 그대로 실행이 된다.
DVWA Security를 Medium으로 설정하고 Command Injection을 실습해 보자. 먼저, medium 단계의 소스 코드를 확인해 보면 윈도우의 '&&', 리눅스의 ';'를 지우는 구문이 들어 있다. 위의 코드로 인해 예를 들어 ping -c 4; id 의 공격이 ping -c 4 id (세미콜론이 없어짐)으로 시스템이 받아들이고 id 명령은 실행 되지 않는다. 하지만 세미 콜론만 막아서는 충분하지 않다. 세미 콜론 이외에도 다른 특별한 의미를 가지는 문자들이 있다. 파이프(|)나 '&' 같은 것들이다. 세미 콜론 대신 파이프로 id를 확인해 보자. 파이프는 앞 명령의 결과를 뒤 명령어의 입력으로 넘겨 줄 때 사용하는 특수 문자인데 보다시피 뒤의 명령어(id)가 실행 된다. 이번에는 '&..
DVWA의 Command Injection으로 접속 목록에서 localhost로 ping을 보낸다. 소스코드를 살펴보면 $target이라는 변수는 ip주소를 받고 있음을 알 수 있다. 이렇게 시스템 명령을 내리는 것은 터미널에서 명령을 내리는 것과 동일하다고 볼 수 있으므로 터미널에다가 ping명령어를 실행해보자. 리눅스에서는 세미콜론을 이용해서 뒤의 명령어를 여러 개를 실행할 수 있다. ping명령뒤에 세미콜론을 붙이고 ls 명령을 실행해 보자. 사실 우리의 관심은 뒤에 실행할 명령에만 있기 때문에 ping에다가 ip를 주지 않고 ls만을 입력할 수 있다. 이제 dvwa로 돌아가서 ls를 입력해 보자. 이번에는 ;cat /etc/passwd 명령으로 시스템 사용자의 리스트를 알아내보자.
웹을 통해 시스템명령어(커맨드)를 실행하는 공격으로 어떤 웹 사이트가 내부에서 시스템 명령어를 실행하는 경우, 만약 사용자가 입력한 값을 올바른지 검사하지 않고 시스템 명령어의 일부분으로 전달하면 해커는 이 값을 조작하여 마음대로 다른 시스템 명령어를 실행 할 수 있다. 해커가 정상적인 웹페이지에 접속했다고 가정. 이 웹페이지는 서버에서 ping명령어를 실행하고 그 결과를 알려주는 페이지이다. ping 명령어는 ip주소를 가진 어떤 시스템이 현재 동작하고 있는지 확인할 때 사용하는 명령어이다. 이때 해커는 ip주소 뒤에 세미콜론(;)을 입력하고 다른 시스템 명령어를 추가로 전송한다. cat /etc/passwd는 리눅스의 사용자 목록을 확인할 때 사용하는 명령어이다. 만일 웹 application이 해커..