Security (29) 썸네일형 리스트형 [DVWA 실습] SQL Injection(high) 문제 해결 방법 이번 단계에서는 로그인한 사용자의 세션에 id 조회 파라미터를 담고 있다. 그래서 한번 조회한 값은 다른 실습 페이지로 이동했다가 돌아와도 그대로 남아있는 것을 볼 수 있다. 하지만 굳이 별도의 창을 띄우는 것은 Burp Suite의 Repeater 같은 툴로 요청을 반복할 수 있기 때문에 SQL Injection을 방어하는 데 별다른 도움이 될 수 없다. 그리고 결정적으로 SQL Injection에 대한 필터링이 없기 때문에 이전과 비슷하게 공격할 수 있는데 이번에 다른 점은 맨 마지막에 LIMIT 구문이 붙어서 결과를 하나만 출력하고 있다는 것이다. SELECT first_name, last_name FROM users WHERE user_id = '' or '1'='1' LIMIT .. [DVWA 실습] SQL Injection(medium) 문제 해결 방법 이번 단계에서는 사용자에게서 직접 id 값을 입력받지 않고 HTML의 셀렉트박스를 이용해서 지정된 값만 입력할 수 있도록 제한하고 있다. 하지만 이는 별 의미가 없는게 결국 GET이든 POST든 전달되는 데이터를 수정하면 되기 때문에 Burp Suite를 이용해서 이전 단계에서 사용했던 쿼리를 집어넣으면 되지 않을까? 동일하게 입력해봤지만 다음처럼 에러가 발생하는 것을 볼 수 있었다. 에러를 확인해 보니 쿼리의 '\' union select user_id, password from dvwa.users#'에서 문제가 발생했다고 하는데 우리가 수정한 값인 "' union select ..."가 "\' union select ..."로 이스케이프되어 있었다. 그렇다면 여기서 우리는 mysql_.. [DVWA 실습] SQL Injection(low) 문제 해결 방법 이번 단계에서는 어떤 SQL Injection 필터링도 적용되어 있지 않기 때문에 모든 SQL Injection 기법을 사용할 수 있다. 먼저 확인을 위해 따옴표를 입력해보면 다음처럼 에러가 발생하는 것을 볼 수 있다. 이는 소스 코드에서 오류 발생 시 die() 함수를 이용해 쿼리 에러를 출력하고 있기 때문에 나타나는데 이는 불필요한 정보(DB 정보) 노출이기 때문에 쿼리가 실패하더라도 데이터가 존재하지 않을 때와 같은 반응이 나와야 한다(블라인드). 현재 쿼리는 다음과 같다. SELECT first_name, last_name FROM users WHERE user_id = '$id'; 이는 앞서 말했듯이 동적 쿼리로 사용자 입력인 id 변수가 필터링 없이 SQL 쿼리에 포함되고 있는.. DVWA - SQL Injection DVWA의 일곱 번째 실습 대상인 SQL Injection이다. 현재 데이터베이스에는 5명의 사용자 정보(이름, 비밀번호 등)가 저장되어 있으며 SQL Injection으로 이들의 비밀번호를 탈취하는 것이 목적이다. 현재는 해당 사용자의 ID를 입력하면 이름(First Name, Surname)만 출력하고 있으며 난이도에 따라 ID 입력 방식이 조금씩 달라지고 있다. SQL Injection? SQL Injection은 사용자 입력이 서버측에서 실행되는 SQL 쿼리에 삽입되어 의도했던 것과 다른 동작을 수행하게 되는 취약점이다. 이전에 실습했던 커맨드 인젝션처럼 Injection 취약점으로 데이터베이스 종류에 따라 형태는 달라지지만 데이터베이스와 연결된 대부분의 사이트에서 공격 대상이 된다. 공격자는 이.. [DVWA 실습] Insecure CAPTCHA(high) 문제 해결 방법 이번 단계부터는 비밀번호 변경 과정이 하나로 통합되고 CSRF 토큰 같은 user_token 파라미터가 전달된다. 불필요하게 분할된 과정을 하나로 합치고 CAPTCHA 뿐 아니라 CSRF 토큰을 이용하여 추가적으로 인증하고 있는 것이다. 그래서 이전처럼 step 항목 값을 바꾸거나 심지어 삭제해도 비밀번호 변경에는 아무런 영향이 없다. CAPTCHA를 수행하지 않으면 "The CAPTCHA was incorrect. Please try again." 이라는 메시지와 함께 요청이 거부된다. 그렇다면 이를 어떻게 우회할 수 있을까? 소스 코드를 살펴보니 다음처럼 DEV_NOTE라는 개발자가 작성한 듯한 주석 문이 남아있는 것을 볼 수 있었다. Response 값이 'hidd3n_valu3'이.. [DVWA 실습] Insecure CAPTCHA(medium) 문제 해결 방법 이번 단계에서는 비밀번호 변경 과정(step 1, step 2) 사이에 인증 로직을 적용하기 위해 새로운 헤더가 추가되었다. 변경할 비밀번호를 입력하고 CAPTCHA를 통과하는 것까지는 동일하지만 step 2에 대한 요청에는 'passed_captcha' 파라미터가 true 값으로 설정되어있는 것을 확인할 수 있다. 이전 단계처럼 숨겨진 step 요소를 수정하면 다음처럼 CAPTCHA를 통과하지 못했다는 에러 메시지가 출력된다. CAPTCHA를 수행하고 step 2로 넘어왔는지 바로 step 2로 넘어왔는지 어떻게 아는 것일까? 이는 파라미터 이름으로만 봐도 'passed_captcha'가 그 인증 토큰 역할을 수행한다는 것을 추측할 수 있다. 그래서 HTML 코드를 수정하여 passed.. [DVWA 실습] Insecure CAPTCHA(low) 문제 해결 방법 이번 단계에서는 비밀번호 변경 요청 및 확인 두 과정을 거쳐야 한다. 이는 실습 페이지에 step 파라미터로 전달되는 값으로 구분하는데 본래 정상적인 요청이라면 다음처럼 동작한다. 먼저 비밀번호 입력 폼에 변경될 비밀번호를 입력하고 CAPTCHA를 통과한다. 그리고 버튼을 클릭하면 CAPTCHA를 통과했다는 메시지가 출력되고 Change 버튼을 눌러 비밀번호 변경을 확정 짓는다. 이때 개발자 도구에서 전송된 요청 값을 보면 step 파라미터로 1이 들어간 것을 알 수 있다. 하지만 이는 입력 폼에 나타나지 않았는데 그렇다면 예전에 CSRF 토큰을 폼의 hidden 필드로 넣어서 전달했던 것처럼 숨겨진 필드로 존재하는 게 아닐까? 일단 계속 진행해 보기로 했다. 이후 비밀번호 변경 확인 페.. DVWA - Insecure CAPTCHA DVWA의 여섯 번째 실습 대상인 Insecure CAPTCHA다. 현재 문제에서는 CAPTCHA를 이용하여 비밀번호 변경 기능을 다른 프로그램이 공격하지 못하도록 방어하고 있다. 이 잘못 적용된 CAPTCHA 시스템을 악용하여 현재 로그인한 사용자 모르게 비밀번호를 바꾸는 것이 목적이다. CAPTCHA? CAPTCHA란 현재 서비스를 사용하고 있는 주체가 진짜 사람인지 컴퓨터 프로그램인지 구분하기 위해 고안된 프로그램이다. 뒤틀린 형태의 텍스트나 여러 방향으로 잘린 이미지 등 사람이 아니면 알아보기 힘든 콘텐츠로 시험하여 자동화된 봇이 악의적인 작업(spamming 등)을 수행하지 못하도록 하는 게 주목적이며 브루트 포스 방지, 추가 인증 등 다양한 용도로 사용되고 있다. 옛날에는 왜곡된 텍스트를 분석.. [DVWA 실습] File Upload(high) 문제 해결 방법 High단계는 클라이언트에서 자동으로 설정되는 업로드 타입을 보는 것이 아니라 실제 파일 이름의 확장자가 jpg인지 jpeg인지 png인지를 검사하고 있다. 또한 getimagesize라는 함수를 통해 실제로 파일의 내용이 이미지 인지를 검사 하고 있다. medium 단계 보다는 확실히 대응이 강화 되었다. 이 루틴은 어떻게 우회 할 수 있을까? 다시 웹쉘을 업로드 한 후 burp suite로 intercept 해보자. 여기서 이번에는 Content-type 이 아니라 filename 부분을 수정해 준다. 파일 이름에 .jpg를 붙여 webshell.php.jpg로 수정한다. 또한 위의 소스 코드에서 보았던 getimagesize 함수를 우회하기 위해 파일에다 아래 그림과 같이 'GIF8.. [DVWA 실습] File Upload(medium) 문제 해결 방법 이번에는 업로드가 실패했고 jpeg나 png 이미지 파일만 받을 수 있다는 메시지가 출력 된다. burp suite를 준비하여 파일이 업로드 될 때의 요청을 intercept 해보자. 다음과 같이 Burp Suite의 Proxy -> Intercept에서 Intercept On 으로 바꿔 준다. 다시 웹셀을 업로드 해보자. 업로드 요청이 인터셉트 된다. php 부분이 우리가 업로드한 파일의 내용이 전달되는 부분이다. Content-Type을 보면 Application/x-php 라고 설정되어 있는데 우리가 php파일을 업로드 했기 때문에 자동으로 php 타입으로 설정되는 것이다. 이 Content-type을 조작해 보도록 하자. 이 부분을 image/jpeg로 바꾸고 Forward 버튼을.. 이전 1 2 3 다음