1
https://youtu.be/laQAQeuuJF4?si=YJfdjUnCmOPnAtKV
2
3
https://youtu.be/bSGqBoZd8WM?si=PlnlxWrBhlfqn5fv
DVWA에서 다운 받아 취약한 웹서버 만들자
공격서버도 만들자.
공격서버에서 공격해보자.
1
취약한 웹 서버 만들자
DVWA ( Damn Vulnerable Web Application) : Apache(Web) + PHP + DB(Mysql or MariaDB) - Github Container
https://github.com/digininja/DVWA
https://github.com/digininja/DVWA/pkgs/container/dvwa
2
취약점 공유
OWASP The Open Web Application Security Project - 링크
https://owasp.org/www-project-top-ten/
https://owasp.org/www-project-kubernetes-top-ten/
https://github.com/OWASP/www-project-kubernetes-top-ten
3
크롬 확장프로그램 Browsec VPN 설치
https://chrome.google.com/webstore/detail/browsec-vpn-free-vpn-for/omghfjlpggmjjaagoclmmobgdodcjboh
4
Cloudformation으로 기본 환경 구축
AWS console login
https://console.aws.amazon.com/console/home
Cloudformation으로 기본 환경 구축
Ec2를 배포하므로 pem키 필요.
아래 클릭
또는
Download
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/security/ahss-waf.yaml
CF파일 다운로드 사이트
https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/security/ahss-waf.yaml
// 아래 파일 내용중 , ALB 보안그룹의 IP를 개인 IP 로 변경 필요
예) 110.1.1.100/32 나의 IP로 변경 후 배포 필요
나의 IP확인
설정 내용
Parameters:
Resources:
# IAM Role & Instance Profile
IAMLabInstanceRole:
Type: AWS::IAM::Role
Properties:
RoleName: IAMLabInstanceRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
IAMRoleForInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
InstanceProfileName: IAMLabRoleForInstances
Path: /
Roles:
- !Ref IAMLabInstanceRole
# VPC
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
:
ALBSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ELB Security Group
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: ELB-SG
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
CidrIp: 0.0.0.0/0 // 배포후 본인의 IP로 변경 필요 110.1.1.100/32
- IpProtocol: tcp
FromPort: '443'
ToPort: '443'
CidrIp: 0.0.0.0/0 // 배포후 본인의 IP로 변경 필요 110.1.1.100/32
ALBTG:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Name: ALBTG
Port: 80
Protocol: HTTP
HealthCheckPath: '/login.php'
VpcId: !Ref MyVPC
Targets:
- Id: !Ref MYEC2
Port: 80
TargetGroupAttributes:
- Key: stickiness.enabled
Value: 'true'
- Key: stickiness.type
Value: lb_cookie
- Key: stickiness.lb_cookie.duration_seconds
Value: '180'
MyALB:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Scheme: internet-facing
Name: My-ALB
SecurityGroups:
- !Ref ALBSG
Subnets:
- !Ref MyPublicSN
- !Ref MyPublicSN2
ALBListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !Ref ALBTG
LoadBalancerArn: !Ref MyALB
Port: 80
Protocol: HTTP
MySG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: WEB Security Group
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: My-SG
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '22'
ToPort: '22'
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
CidrIp: 10.0.0.20/32
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
SourceSecurityGroupId : !GetAtt ALBSG.GroupId
MySG2:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: WEB Security Group
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: My-SG2
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '22'
ToPort: '22'
CidrIp: 0.0.0.0/0
# - IpProtocol: tcp
# FromPort: '80'
# ToPort: '80'
# CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: '4280'
ToPort: '4280'
CidrIp: 0.0.0.0/0
MYEC2:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: !Ref LatestAmiId
IamInstanceProfile: IAMLabRoleForInstances
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: DVWA
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref MyPublicSN
GroupSet:
- !Ref MySG
AssociatePublicIpAddress: true
PrivateIpAddress: 10.0.0.10
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp3
VolumeSize: 30
DeleteOnTermination: true
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
hostnamectl --static set-hostname DVWA
echo "sudo su -" >> /home/ec2-user/.bashrc
# Change Timezone
sed -i "s/UTC/Asia\/Seoul/g" /etc/sysconfig/clock
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# Install Packages
amazon-linux-extras install epel -y
yum update -y
yum install -y tree git htop jq httpd mariadb-server mariadb php php-mysql php-gd
systemctl start mariadb httpd && systemctl enable httpd mariadb
amazon-linux-extras install php8.2 -y
# Configure mariadb
echo -e "\n\nqwe123\nqwe123\ny\nn\ny\ny\n" | /usr/bin/mysql_secure_installation
mysql -uroot -pqwe123 -e "create database dvwa; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa'@'localhost' IDENTIFIED BY 'qwe123'; flush privileges;"
# Install DVWA
git clone https://github.com/digininja/DVWA.git
mv DVWA/* /var/www/html/
cp /var/www/html/config/config.inc.php.dist /var/www/html/config/config.inc.php
sed -i "s/p@ssw0rd/qwe123/g" /var/www/html/config/config.inc.php
sed -i 's/allow_url_include = Off/allow_url_include = on/g' /etc/php.ini
sed -i 's/display_errors = Off/display_errors = on/g' /etc/php.ini
sed -i 's/display_startup_errors = Off/display_startup_errors = on/g' /etc/php.ini
chmod 777 /var/www/html/hackable/uploads
chmod 777 /var/www/html/config
systemctl restart httpd
MYEC22:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: !Ref LatestAmiId
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: Attacker
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref MyPublicSN
GroupSet:
- !Ref MySG2
AssociatePublicIpAddress: true
PrivateIpAddress: 10.0.0.20
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeType: gp3
VolumeSize: 30
DeleteOnTermination: true
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
hostnamectl --static set-hostname Attacker
echo "sudo su -" >> /home/ec2-user/.bashrc
Outputs:
WebServerIP:
Value: !GetAtt MYEC2.PublicIp
AttackerIP:
Value: !GetAtt MYEC22.PublicIp
// 배포후 ALB 보안그룹을 수정하자 = 본인의 IP로 수정이 필요 110.1.1.100/32
본인의 IP만 DVWA 서버로 접속 되도록 하자.
admin / password로 아무나 접속해 로그온할수 있도록 되어 있어 수정이 필요하다.
5
생성 ?
DVWA EC2 생성 = 취약한 웹서버 생성 = 10번 ip = iam role가지고 있음.
공격자 ec2 생성 = 20번 IP
마리아 디비 생성 - Qwe123 사용
Alb - 스티키 옵션.
출력에 eip 확인 - 로그인 하세요.
Dvwa Ec2는 EC2 인스턴스 프로파일을 가지고 있다. Aws cli 사용가능.
6
생성 확인?
Dvwa ec2 로그인
Database 접속 확인.
Var/www/html에 파일들이 들어가 있는것 확인
# mariadb 확인 : 계정(root / qwe123)
mysql -V
systemctl status mariadb
mysql -u root -pqwe123 -e "SHOW DATABASES;"
# apache web 확인 & DVWA 웹 디렉터리 확인
httpd -v
systemctl status httpd
tree /var/www/html/ -L 1
tree /var/www/html/ -L 2
# DVWA의 연결 DB 정보 확인
grep 'db_' /var/www/html/config/config.inc.php
# php 정보 확인
php -v
php --ini
aws s3 ls
된다.
# EC2 Instance Profile 확인 : AmazonS3ReadOnlyAccess 가지고 있다.
메타 데이터 확인
curl -s http://169.254.169.254/latest/meta-data/ ; echo
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/IAMLabInstanceRole | jq
// 메타데이터에서 AWS ACCESS-KEY , SECRET-KEY , 토큰 , EXPIRE 시간을 알수 있음.
// 보안에 취약함.
"Code": "Success",
"LastUpdated": "2023-09-25T09:11:39Z",
"Type": "AWS-HMAC",
"AccessKeyId": "ASF3RCB",
"SecretAccessKey": "ayA+Us",
"Token": "IQoJb3JpZ2luX2VjEGEaDmFwLW5vcnRoZWFzdC0yIkcwRQIhAKIBq2X9/wA4vOlJhT7BSqtDaE0jyUDuLULJelS9TyN7r3XbrmzsZ7zeKfF7/E2Y0M2rnSR+b/VmnfIqOmubWUevuaHwk+1yST6Xjc4L5nM4ct2jtC/vTCg=",
"Expiration": "2023-09-25T15:46:27Z"
# 웹 접속 로그 실시간 확인
tail -f /var/log/httpd/access_log
tail -f /var/log/httpd/access_log | grep -v ELB-HealthChecker
## 로그 확인
접속자 IP 주소 - - 접속 시간 - 요청 방식 - 요청 페이지 - 프로토콜 버전 - HTTP 응답 코드 - 전송 크기 - 접속 브라우저 도구
10.0.1.120 - - [10/Sep/2023:14:28:59 +0900] "GET /favicon.ico HTTP/1.1" 304 - "http://waf.gasida.link/1.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
6
별도 터미널로 실시간 로그 감시 요망!
7
Attacker 서버 로그인 설치 유틸 확인 ?
히드라
도커 엔진 설치
도커 컴포즈도 설치됨
도커 컴포즈에 러닝해서 바로 접속 됨 - 4280
도커 컴포즈로도 DVWA 설치 가능 - 참고만 하세요.
#
hydra
docker info
docker-compose version
8
# (참고) docker-compose 로 DVWA 설치 가능하다.
여기서는 사용하지 않는다. 아래 출력 웹 접속 하여 설치 가능.
git clone https://github.com/digininja/DVWA.git
cd DVWA
docker-compose up -d
docker ps
docker-compose ps
docker images
docker-compose images
docker exec -it dvwa-dvwa-1 ps -ef
docker exec -it dvwa-db-1 mysql -V
echo -e "http://$(curl -s ipinfo.io/ip):4280"
## 삭제 시
docker-compose down
9
동작은 ?
ALB ---DVWA 웹서버 구성이다.
DVWA 서버로 직접 접속은 안됨.
Alb로는 접속 됨.
DVWA 서버에 보안그룹의 소스를 alb sg를 사용함.
Console에서 확인
웹서버 보안 그룹 확인
웹서버 보안그룹의 소스가 ALB 보안 그룹이다.
그래서, ALB를 통해서는 접속이 되나, 웹서버로 직접 접속은 안된다.
웹서버 보안그룹을 확인하면, sg-0f에서만 80 접속 가능하다.
ALB 보안 그룹 이름
sg-0f
보안그룹 공부
출처
10
DVWA EC2
: 접속자 액세스 로그 확인 → XFF 로깅 설정
# 실시간 웹 접속 로그 : "ELB-HealthChecker/2.0" 접속자는 누구인가?
tail -f /var/log/httpd/access_log
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
# (옵션) apache2 에 XFF 설정으로 ALB - Web 접속 시 Client IP 확인
11
## Apache 기본 로그 설정 변경 : 196번째(196 입력 후 Shift+G) 줄에 %{X-Forwarded-For}i 추가
vim /etc/httpd/conf/httpd.conf
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
ESC -> :q -> 엔터로 저장하고 빠져나오기
## HTTP 다시 로드 : reload 와 restart 차이는?
systemctl reload httpd
# 실시간 웹 접속 로그
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
12
ALB 도메인 확인
ALB 도메인으로 웹 접속하기
사용자 공인 IP가 찍힌다.
110.12.81.248 10.0.1.218 - - [25/Sep/2023:21:24:49 +0900] "GET /favicon.ico HTTP/1.1" 200 1406 "http://my-alb-547735861.ap-northeast-2.elb.amazo naws.com/login.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
13
도메인 소유한 멤버일 경우 → ALB도메인을 Route53에서 설정
www A레코드
트래픽 라우팅 대상 : Application
아시아 태평양(서울) > 레코드 선택 > 레코드 생성
www 도메인으로 접속
admin
password
14
디비 만들어 실습환경 준비하자
Setup/Reset DB > Create / Reset Database 버튼 클릭
이제 디비가 준비되었다.
https://brunch.co.kr/@topasvga/3446
주말 CloudNet 스터디 내용 참고하여 정리한 부분입니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863