이번에는 "Drive-By-Download(DBD)공격"의 간단한 원리 등을 직접 해보겟습니다.


저번 이론편에서 페이지 이동 및 악성코드의 유포에 대한 모든 것이 "스크립트 코드"로 이루어진다고 말하였습니다.



순서대로 하나씩 구현을 해보겠습니다.

(난독화는 하지 않고 진행하겠습니다.)


1. 페이지 이동

:<iframe>, javascrpit 코드 등을 사용하여 페이지 이동이 가능해집니다.


총 5개의 웹 사이트가 있다고 가정합니다.


각각의 사이트들은 그냥 h2 태그에 의해 문자를 보이는 형식으로 이루어져 있습니다.

A1.html = A1 PAGE 출력 / A2.html = A2 PAGE 출력 ...

위의 노랑색으로 칠한 코드는 페이지를 불러오는 역할을 합니다.



*iframe 코드 설명

iframe코드는 다른 웹사이트를 자신의 웹의 프레임 안에 불러오는 역할을 합니다.

만일 위의 코드에서 display:none(화면에 안보이게하기)를 없애버리면...


즉! 웹사이트안에 웹사이트가 생기는 것입니다.




이러한 것을 사용하면 하나의 웹사이트가 다른 웹사이트를 불러오고, 그 웹사이트가 다른 웹사이트를 불러올 수 있습니다.

이말은 다른 웹사이트의 스크립트 코드에 의해 영향을 받을 수도 있다는 것을 말합니다.

 

예를 들어

A5.HTML에 alert("A5")라는 스크립트 코드를 넣으면, A1에 접속 시 A5경고 메시지를 보게 됩니다.


이것을 악성코드 유포에 사용한다면...

A1에 접속 시 A2,A3,A4,A5안에 멀웨어(바이러스)를 다운 받는 코드가 있다면, 바이러스를 다운받게 됩니다.




2. 악성 스크립트 코드 & 난독화

위에서 설명한 예제로 든 것은, 기존에 쉽게 알 수 있는 script 코드 입니다.


하지만 실제로는 이러한 스크립트 코드를 악의적인 목적으로 만들어 악성 스크립트 코드를 만듭니다. 그런 후에 지나치는 웹 


사이트 중 하나에 이러한 스크립트 코드를 넣게 되면, 직접적으로 그 사이트에 접속하지 않더라도, 연결되어 있는 웹에 접속하


게 되면 자동적으로 이 악성 코드에 감염되게 됩니다.


스크립트 코드를 분석하게 되면, 이러한 악성코드가 무엇인지, 무슨 기능을 하는지, 서버는 어디를 이용하는지, iframe태그를 어디다 연결하는지 등에 대해 알게됩니다. 그렇기에 이러한 분석을 최대한 지연시키기 위해 난독화를 이용합니다.


예를 들어

<iframe src="A2.HTML" style="display:none"></iframe>이 HTML페이지의 소스에 있으면 바로 보이기 때문에...


"%3Ciframe%20src%3D%22A2.HTML%22%20style%3D%22display%3Anone%22%3E%3C/iframe%3E" 등으로 난독화 하여 자바스크립트 코드인 Document.write랑 같이 사용합니다.

eval과 replace 등의 함수 조합을 통하여 <iframe>태그를 만들어서 호출합니다.


또는 


쉘코드를 이용하기도 하는데, 이러한 쉘코드도 그대로 사용하지 않습니다.

hex 값 변조, xor 변조 등을 통하여 쉘코드를 변조 시켜 사용합니다.


이외에도 많은 난독화 기법을 사용하여 악성 스크립트 코드등을 이용합니다.





<Created by 서쿤>




'WEB > Web Hacking' 카테고리의 다른 글

xss (Cross Site Scripting)  (0) 2017.12.04
error based sql injection  (0) 2017.09.18
Blind SQL Injection (이론편)  (0) 2017.05.14
파일 다운로드 취약점  (0) 2017.05.08
CSRF (Cross-site request forgery) 란  (0) 2017.04.28

Blind SQL Injection 이란?


Blind SQL Injection은 임의의 SQL 구문을 삽입하여 인가되지 않은 데이터를 열람할 수 있는 공격 방법이라는 점에서 일반적인 SQL Injection과 동일하다.


다만 일반적인 SQL Injection의 경우에는 조작된 쿼리를 입력 해 한번에 원하는 데이터를 얻을 수 있지만, Blind SQL Injection은 쿼리 결과에 따른 서버의 참과 거짓 반응을 통해 공격을 수행한다.


즉, 쿼리에 대한 결과가 참일때와 거짓일 때 서버의 반응이 나타나야 하며 이를 구분할 수 있어야 한다.


Blind SQL Injection을 수행하기 위해선 몇 가지 기본적인 함수에 대해 알고 있어야 한다.


1. substr


substr은 문자열을 자를 때 사용하는 함수이며 사용 방법은 아래와 같다.


substr(자를 문자열, 자를 문자의 시작점, 자를 문자 개수)


예를 들어, str = substr("HelloWorld", 1, 3)일 경우, substr함수를 통해 HelloWorld의 1번째 부터 3개의 문자가 str에 저장된다.


즉, str에는 Hel이 저장된다.


만약 str = substr("HelloWorld", 5, 2)일 경우에는 str에는 oW가 저장된다.


2. ascii


ascii 함수는 문자의 아스키 코드 값을 반환해 주는 함수이다.


ascii(아스키 코드로 반환 할 문자)


위와 같은 형태로 사용되며, ascii(a)의 경우 a의 아스키 코드 값인 97이 반환된다.


위의 2 가지 함수를 통해 Blind SQL Injection을 수행할 수 있다.



공격 방법


위에서 언급했듯, Blind SQL Injection은 쿼리 결과에 따른 서버의 반응을 보고 공격을 수행한다.


공격 예시를 보이기 전 몇 가지 상황을 가정하려 한다.


1. table의 이름은 users이다.


2. 속성에는 id와 pw가 있다.


3. 공격자는 테이블 명과 admin의 id는 이미 알고 있다.


4. 서버에서는 로그인에서 자주 사용되는 SELECT * FROM users where id='(입력받은 id)' and pw='(입력받은 pw)';  형태의 쿼리문을 실행한다.


이 때 공격자는 admin의 pw를 알아내기 위한 Blind SQL Injection 공격을 수행하려 한다.


먼저 id는 알고 있으므로, 로그인 창의 ID 입력 부분에는 admin의 id를 입력한다.


id의 뒤에는 pw의 첫 글자를 알아내기 위한 쿼리를 삽입한다.


ascii(substr(select pw from users where id = 'admin', 1, 1))의 쿼리를 사용하면 users 테이블에서 id가 admin인 행의 pw의 첫 글자를 가져와 아스키 코드로 바꾸어 준다.


공격 시에는 이를 활용한다.


즉, ID 입력 칸에 admin' and ascii(substr(select pw from users where id = 'admin', 1, 1)) < 100 -- 을 삽입한다.


위의 쿼리를 삽입함에따라 서버에 전달되는 전체 쿼리는 다음과 같다.


SELECT * FROM users where id='admin' and ascii(substr(select pw from users where id = 'admin', 1, 1)) < 100 -- and pw='(입력받은 pw)'


원래의 쿼리에서는 users 테이블에서 id와 pw를 입력받아 두 값이 동일한 행을 찾아 출력하는 쿼리문이었다.


하지만 공격 쿼리를 삽입한 후에는 id가 admin이고, id가 admin인 행에서 pw의 첫 글자를 아스키 코드로 바꾼 값이 100 이하여야 쿼리문이 동작한다.


뒤의 pw를 입력받아 이를 비교하는 구문은 주석처리 된다.


따라서 만약 pw의 첫 글자가 아스키 코드 값으로 100 이하가 될 경우에는 쿼리문이 실행되고, 아닐 경우에는 쿼리문이 실행되지 않는다.


위와 같은 방법을 반복하면 pw의 첫 글자를 알아낼 수 있으며, 더 나아가 pw의 전문을 알아낼 수 있다.



이것으로 Blind SQL Injection에 대한 기본적인 설명을 마치고, 다음번엔 직접 실습 환경을 구성하고 공격을 실습하려 한다.


Created by ccoma

'WEB > Web Hacking' 카테고리의 다른 글

error based sql injection  (0) 2017.09.18
Drive-By-Download(DBD)공격(실습편)  (0) 2017.05.29
파일 다운로드 취약점  (0) 2017.05.08
CSRF (Cross-site request forgery) 란  (0) 2017.04.28
Drive-By-Download(DBD) 공격(이론편)  (0) 2017.04.24

파일 다운로드 취약점이란 인터넷에서 어떠한 파일을 받는 과정에서 발생하는 취약점으로 방문자에게 허용된 파일 외의 다운로드를 가능하게 함으로써 웹 서버의 소스 및 페스워드 등을 다운받을 수 있다.




1.URL파라미터 변조


 게시판에 첨부된 파일을 사용자에게 제공하는 방식에는 정적과 동적 방식이 있으며, 아래와 같은 정적방식은 디렉터리에 파일 링크를 걸어 사용자에게 제공하기 때문에 파라미터 변조 가능성이 없는 안전한 구조이다.


http://xxx.xxx.xxx/xxx/downfile.txt


그러나 동적방식의 경우, 파리미터 값 조작(file = ../../../../../../../../../etc/passwd)등의 취약점으로 인해 시스템 파일 등의 접근시도가 가능하다.


http://xxx.xxx.xxx/xxx?file=downfile.txt




2.NULL바이트 인젝션


c/c++에서 널바이트 문자열(%00, 0x00)은 문자열의 끝을 의미하기 때문에, 특정  확장자를 숨기기 위한 목적으로 사용될 수 있으며, 해당 부분의 취약점은 C루틴을 처리하거나 내부의 C API를 호출하는 함수를 사용하는 경우에 발생될 수 있다.



 1) Perl


C로 개발된 펄의 경우, FILE()함수에 입력된 값은 마지막처리단계에서 C 프로세스로 전달되기 때문에 %00과 같은 널 문자를 이용한 공격이 가능할 것이다.



위의 코드는 외부에서 입력된 값에 .jpg를 붙여 처리하도록 구성되어 있기 때문에 다운로드를 원하는 파일의 확장자가 jpg로 끝나야 한다.

그러나 널바이트와 .jpg를 삽입하는 경우 위 로직을 우회할 수 있다.


정상적인 URL


우회된 URL



  2)JAVA


자바의 경우는 java.io.File 함수가 파라미터를 C API로 전달하기 때문에 NULL바이트 인젝션이 가능하다.



정상적인 URL


우회된 URL




3. 멀티 파라미터 변조


 웹 사이트의 구조를 보면 file 과 file_path라는 파라미터가 존재하며, 각각에는 파일 이름과 디렉토리가 입력되는 구조를 보인다.

 이러한 경우에는 2개의 파라미터를 적절하게 변조하여 접근해야 한다.


정상적인 URL


의심스러운 파라미터가 2개이기 때문에 file 혹은 file_path만 변조하거나, 둘 모두를 동시에 변조하여 접근해볼 수 있다.


file 파라미터 변조


file_path 파라미터 변조


file, file_path 파라미터 모두 변조




4. 웹 로그를 통한 관리자 권한 획득


 파일 다운로드 취약점이 있다는 것을 확인한 후, 웹 로그 접근을 이용하여 관리자정보를 얻는 과정이다.

 파일 다운로드 취약점이 있다면, 다양한 시스템파일(passwd, .cshrc, .bashrc, .profile, .bash_profile 등)의 접근을 통하여 웹 로그파일의 위치를 추측하여 접근을 할 수 있다.



관리자 페이지에 입력되는 계정과 암호를 GET 메소드를 통해 전송하는 경우, 입력된 모든 정보는 웹 로그에 고스란히 남게 된다.  

또한 웹 로그의 접속한 모든 디렉토리 및 페이지 정보도 확인할 수 있으므로 디렉토리 전체를 보는 것과 동일 한 공격효과를 볼 수 있다.


by dajababa



'WEB > Web Hacking' 카테고리의 다른 글

Drive-By-Download(DBD)공격(실습편)  (0) 2017.05.29
Blind SQL Injection (이론편)  (0) 2017.05.14
CSRF (Cross-site request forgery) 란  (0) 2017.04.28
Drive-By-Download(DBD) 공격(이론편)  (0) 2017.04.24
파일업로드 취약점  (0) 2017.04.09

+ Recent posts