Security/웹 모의해킹 실습

File Upload & Insecure CAPTCHA (Low)

NOG 2023. 7. 16. 16:51

File Upload

 

 공격자가 서버 스크립트 코드가 포함된 파일을 서버에 업로드하여 코드를 실행하는 공격

해당 파일을 웹셀이라고 하며 asp,jsp,php 같은 확장자를 가지는 파일을 업로드할 수 있으면 발생한다.

 

DVWA 웹 사이트 상에 웹 쉘의 기능을 하는 PHP파일을 생성하고 해당 파일을 업로드하여 웹 상에서 쉘 명령어를 실행할 것이다.

 

'''

쉘은 명령어 해석기로 스크립트 파일을 읽어 일련의 명령을 수행한다.

FI는 직접 파일을 업로드하지 않아도 외부 url을 입력해서 다른 서버에 있는 공격코드를 삽입할 수 있다.

'''

 

 

File Upload (Low)

 

 업로드 할 이미지 파일을 선택하라고 되어있다.

이 곳에 간단한 웹쉘을 만들어 올려보겠다.

 

 

 

echo 부분은 명령어를 입력받을 수 있는 폼을 제공하고 공격자가 입력 폼에 명령어를 입력하면 cmd 파라미터를 통해 전달된다.

그 밑에 system 함수를 통해 전달된 명령어가 실행된다.

 

../../  이렇게 2번 나왔으므로

그 전전 디렉토리에서 /hackable/uploads/webshell.php 를 입력하였다.

 

=> http://localhost/dvwa//hackable/uploads/webshell.php

 

웹쉘이 정상적으로 실행되어 시스템 명령어를 입력할 수 있는 command 입력창이 나온다.

 

 

cat /etc/passwd 입력하였더니  passwd 파일이 정상적으로 출력된다.

 

 

 

 

 

Insecure CAPTCHA (안전하지 않은 캡차)

CAPTCHA 란 Completely Automated Public Turing test to tell Computers and Humans Apart 약자로

 컴퓨터가 알 수 없는 흘려 쓴 글씨 등을 통해 현재 사용자가 사람임을 확인하는 것이다.

 

-회원가입이나 비밀번호 변경처럼 사람이 직접하지 않으면 심각한 문제가 될 수 있는 경우에 사용한다.

- 무작위 대입 공격(Brute force) 같은 프로그램 이용한 공격 대응할 때도 사용한다.

 

DVWA에서는 reCAPTCHA  API를 제대로 활용하지 못하고 취약점이 있어서 CAPTCHA를 우회하여

보안 없이 통과해볼 것이다.

 

 

'''

CAPTCHA와는 조금 다르게, reCAPTCHA는 구글에서 제공하는 봇 방지 API이다.

reCAPTCHA 버전이 높아질수록 더 복잡한 인증을 거치게 된다.

'''

 

 

 

 

CAPTCHA 사이트에 등록

 

구글 계정 로그인 후에 https://www.google.com/recaptcha/admin/create  접속

enterprsie가 아닌 classic

라벨 : dvwa

reCAPTCHA : v2

 

도메인은 localhost로  할 수 있지만 Burp Suite가 인식할 수 있는 ip로 적어주었다.

 

 

사이트키와 비밀 키가 생성된다.

 

 

 

cd /opt/lampp/htdocs/dvwa/config
nano config.inc.php

 

 

 각각 config.inc.php의 recaptcha 부분  public key와 private key에 입력한다.

 

 

 

 

reCAPTCHA key에 Missing이 사라지고 키가 입력되어있고 reCAPTCHA가 잘 적용된다.

 

 

 

 

 

 

Insecure CAPTCHA (Low)

 

 

패스워드를 변경하는 화면에 CAPTCHA를 걸어놓았다.

captcha를 체크해주고  비밀번호를 normal 이라고 바꾸는 요청을 보낸다.

Burp Suite로 패킷을 가로채보면 step 1 으로 보내는 요청, 그리고

 

 

 

step2 로 보내는 요청 이렇게 2 단계로 비밀번호 변경을 요청한다.

 

2번째 요청만으로 비밀번호가 변경이 가능한지 보겠다.

Repeater 기능을 이용하여 step 2 요청만 보내본다.

step1pass 라고 비밀번호를 변경하는 요청을 보내었다.

 

응답부분에서 Render로 보았을 때 비밀번호가 성공적으로 변경된 것을 알 수 있다.

로그아웃 했다가 다시 로그인해보면서 step1pass가 비밀번호인 것을 확인했다.