인증된 사용자의 권한을 이용하여 악의적인 요청을 실행하는 공격
Password 변경 창이 존재한다.
Password 변경 과정을 Burp suite를 통해 확인해봤다.
Password 변경 request 확인
Password 변경 response
View Source)
isset 함수를 이용하여 변수가 존재한다면 아래 코드들을 수행한다.
버프 스위트와 소스코드에서 확인할 수 있듯이 패스워드 변경 값을 GET방식을 받는 것을 확인할 수 있다. 이는 url 값만으로도 공격을 할 수 있다는 의미로 해석했다.
$_GET['password_conf']로부터 값을 가져와 $pass_conf 변수에 할당한다.
$pass_new와 $pass_conf변수의 값이 같다면 아래 코드들을 수행한다.
만약 그렇지 않다면 Passwords did not match라는 문구를 출력한다.
is_object 함수 변수가 객체인지 확인하는 함수로 빈 객체를 포함한 객체에 대해 true를 반환한거, null을 포함한 다른 모든 값에 대해 false를 반환합니다.
컴퓨터 공학에서의 객체 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미
$pass_new변수에 대해 SQL injection 방지를 위해 mysqli_real_escape_string 함수를 사용하여 값에 특수문자가 들어갔을 경우 이스케이프하여 보안을 강화한다.
password를 MD5형식으로 변환하여 보안하는 코드이다.
데이터 베이스를 업데이트하라는 의미이다.
게시판을 가정하고 XSS low 레벨 입력란에 csrf 구문을 작성했다.
<img src="x" onerror='this.src="http://localhost/dvwa/vulnerabilities/csrf/?password_new=test12&password_conf=test12&Change=Change"'>
이는 다른 계정의 사용자가 해당 게시판에 접근하게 되면 본인 모르게 패스워드를 변경하는 것이다.
Burp suite를 통해 Request를 확인해보면 패스워드 변경 중인 것을 확인할 수 있다.
password가 test12로 바뀐 것을 확인할 수 있다.
Medium
View Source)
LOW와 마찬가지로 URL로 값을 받는다. 다른 점이 있다면 stripos함수인데
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )
stripos 함수는 대상 문자열을 앞에서 부터 검색하여 찾고자 하는 문자열이 몇번째 위치에 있는지를 리턴하는 함수이다. 이 함수를 사용하여 문자열 HTTP_REFERER이 어디있는지 찾고 그 값이 현재 서버의 이름과 같은지 확인한다. 프록시를 통해 url에 추가, 수정, 삭제하는 행위를 막는 방법인 것 같다.
그렇기 때문에 다른 페이지에서 비밀번호 변경 값이 포함된 url을 삽입해도 referer검증을 통과하지 못한다.
또한 위와 같이 같은 페이지에서의 password 변경과 다른 페이지에서 url 요청의 경우 referer 값이 존재하지 않는다는 것도 확인할 수 있다.
그렇기 때문에 버프 스위트를 통해 request를 intercept하여 referer값을 넣어 줬다.
password가 성공적으로 바뀌었다.
High
공사중
'Write Up > DVWA' 카테고리의 다른 글
DVWA - Command Injection (0) | 2023.05.17 |
---|---|
DVWA - CSP (0) | 2023.05.17 |
DVWA - XSS(Stored) (0) | 2023.05.17 |
DVWA - XSS(DOM) (0) | 2023.05.17 |
DVWA - XSS (Reflected) (0) | 2023.05.10 |