1. Brute Force
우선 low와 다른 점을 찾기 위해 소스코드를 확인해봤다.
mysql_real_escape_string()함수를 사용하여 처리한다. 이 함수를 사용함으로 SQL구문에서 사용하는 특수문자부분에 \를 붙여 SQL구문이 깨지는 것을 방지하여 SQL Injection을 방지한다.
또한 로그인이 실패했을 때 2초 후에 다시 시도할 수 있도록 지연시간을 줘 무작위 대입공격에 걸리는 시간을 늘렸다. 한 번 틀릴 때마다 2초의 시간은 수 많은 Userid와 Password를 모두 무작위 대입해보기에 상당한 시간 소모가 있을 것이다.
low와 같은 점은 패스워드가 틀렸을 때 주는 문장 및 화면과 로그인 시 GET메소드를 사용한다는 점이다.
hydra툴을 이용하여 brute force공격을 해보았다.
admin과 password를 알 수 있었다. 대입해보자.
로그인이 성공적으로 된 것을 확인할 수 있었다.
+ 추가적으로 4명의 유저들의 비밀번호를 확인해보았다.
모두 브루트포스로 하기에 상당한 시간이 소요될 것이라 생각해서 SQL Injection으로 알아냈던 User_ID와 password를 다른 txt로 작성하여 hydra를 진행해보았다.
위와 같이 admin을 제외한 4명의 User_ID에 해당하는 password를 알아낼 수 있었다.
2. Command Injection
IP주소를 입력하여 입력된 주소의 ping결과를 출력한다.
low와 다른점으로는 &&와 ;이 필터링되는 것을 확인할 수 있다.
&&이 필터링 되었으니 ||를 사용하여 우회하여 hostname을 알아내보자.
우선 칼리리눅스환경이라 칼리리눅스 hostname정보를 보는 방법을 알아보니 hostnamectl을 이용하면 되었다.
따라서 || hostnamectl 을 입력한 후 submit해보았다.
kali 임을 확인할 수 있었다.
3. CSRF
공격자가 악성코드 or 악성파일를 스크립트로 통하여 원하는 행위를 강제로 할 수 있도록 하는 공격이다.
low단계와 다른점은
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
referer를 검증하는 로직이 있다는 점이다. stripos함수는 대상 문자열 앞부터 검색하여 찾고자하는 문자열이 몇번째 위치해있는지를 리턴하는 함수다. 또한 대소문자를 구문하지 않는다.
이번은 HTML로 작성하여 공격을 해보겠다. 우선 password로 변경을 하고 URL을 살펴보겠다.
http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=passowrd&Change=Change#
url을 보면 password_new와 password_conf로 받고 있는 것을 확인했고 HTML을 작성해봤다.
실행시켜봤더니
비밀번호가 변경된 것을 확인할 수 있었다.
'Webhacking-Write-Up > DVWA' 카테고리의 다른 글
DVWA(medium) - SQL Injection, Blind SQL Injection, Weak Session IDs (0) | 2023.01.20 |
---|---|
DVWA(medium) - File Inclusion, File Upload, Insecure CAPTCHA (0) | 2023.01.18 |
DVWA(LOW) - CSP Bupass, JavaScript (0) | 2023.01.17 |
DVWA(LOW) - XSS(Reflected), XSS(Stored) (0) | 2023.01.17 |
DVWA(LOW) - Weak Session IDs, XSS(DOM) (0) | 2023.01.17 |