1/25/2018

[METASPLOIT] alias plugin을 이용하여 resource script를 명령어로 만들기

msf관련해서 어제 밤에 테스트하다가 어이없게 알아낸.. alias 플러그인데 대한 이야기를 할까 합니다. (설마설마 했는데, 있었네요 =_=)

alias plugin?

많이 익숙한 이름입니다. 별칭으로 생각하시면 좋아요. 미리 긴 명령행과 옵션을 하나의 명령어처럼 별칭으로 지정해두고 사용합니다. 대표적으로 bash에서 bashrc나 bash_profile에 alias로 명령행 정의해두고 사용하죠.

바로 이 기능이... 플러그인으로 있습니다. alias 플러그인입니다.

먼저 alias 플러그인을 로드합니다.

HAHWUL> load alias

help를 보면.. 아주 단순한데(초기화 정도 옵션..) bash에서 쓰는 alias와 동일합니다. = 대신 metasploit 룰대로 공백으로 인자값 넘겨주면 인식합니다.

HAHWUL> help alias
Usage: alias [options] [name [value]]


OPTIONS:

    -c <opt>  Clear an alias (* to clear all).
    -f <opt>  Force an alias assignment.
    -h        Help banner.


여러가지 작업이나 타이핑하기 힘든 데이터를 alias로 정의해서 사용하면 편리합니다.
아래와 같이 단축어로 바꿀수도 있구요.

HAHWUL> alias s search
HAHWUL> 
HAHWUL> s jenkins

Matching Modules
================

   Name                                                  Disclosure Date  Rank       Description
   ----                                                  ---------------  ----       -----------
   auxiliary/gather/jenkins_cred_recovery                                 normal     Jenkins Domain Credential Recovery
   auxiliary/scanner/http/jenkins_command                                 normal     Jenkins-CI Unauthenticated Script-Console Scanner
   auxiliary/scanner/http/jenkins_enum   

Make command!

그럼 몇가지 트릭을 써서 명령어를 만들어봅시다. 직접 msf코드를 수정하는 것보다 에러날 확률도 적고 업데이트로 망가지지도 않습니다.

우선 mad-metasploit에 rc 파일 하나 올려뒀는데, 코드 복붙이 귀찮으시면 git에서 받으셔도 됩니다.

https://github.com/hahwul/mad-metasploit/tree/master/resource-script


예전에 hosts 명령 손볼떄 잠깐 썼던 코드인데, 오늘 예제로 사용하겠습니다. 기존 hosts 명령보다 좀 더 많은 정보를 주는.. 그런 스크립트에요.

ahosts.rc
(http://www.hahwul.com/2017/09/metasploit-customize-column-and-tagging.html 참고)

<ruby>

rtype = Array.new(4)
rtype[0] = "'name,address,state,service_count,os_name,mac,os_sp,tags'"
rtype[1] = "'name,address,os_name,mac,tags,virtual_host'"
rtype[2] = "'name,address,service_count,vuln_count,cred_count,host_detail_count'"
rtype[3] = "'address,arch,comm,comments,created_at,cred_count,detected_arch,exploit_attempt_count,host_detail_count,info,mac,name,note_count,os_family,os_flavor,os_lang,os_name,os_sp,purpose,scope,service_count,state,updated_at,virtual_host,vuln_count,tags'"

puts " - [0] #{rtype[0]}"
puts " - [1] #{rtype[1]}"
puts " - [2] #{rtype[2]}"
puts " - [3] #{rtype[3]}"

print_status "Input type"
typ = gets.chomp

case typ
when "0"
   self.run_single("hosts -c "+rtype[0])
when "1"
   self.run_single("hosts -c "+rtype[1])
when "2"
   self.run_single("hosts -c "+rtype[2])
when "3"
   self.run_single("hosts -c "+rtype[3])
else
   print_error "Wrong choice"
end
</ruby>

msfconsole에서 alias로 ahosts 라는 이름으로 resource script를 불러줍니다.

HAHWUL> alias ahosts 'resource ~path~/mad-metasploit/resource-script/ahosts.rc'


그럼 마치 명령어처럼 사용이 가능하죠.


Init script에 포함하여 자동 로딩

예전에... init script 관련해서 포스팅한적이 있습니다. 자세한건 아래 링크 보시는게 좋을 것 같습니다.

요약하자면, msfconsole을 실행할 떄 인자값으로 바로 실행할 resource script를 지정할 수 있는데  여기에 alias 플러그인을 로드하고 미리 지정해두면 자동으로 명령어가 로딩될겁니다.

custom.rc
(http://www.hahwul.com/2017/07/metasploit-make-custom-msfconsole-with.html 참고)

setg Prompt "SHELL(Sessions: %S Jobs: %J)"
load alias
alias ahosts 'resource ~path~/mad-metasploit/resource-script/ahosts.rc'
clear

대충 세팅은 했고..  실행해보면

#> ./msfconsole -r custom.rc

매우 간단!

Reference

http://www.hahwul.com/2017/09/metasploit-customize-column-and-tagging.html
http://www.hahwul.com/2017/07/metasploit-make-custom-msfconsole-with.html



Share: | Coffee Me:

1/22/2018

[HACKING] DocumentBuilderFactory XXE 취약점 관련 연구(?) 중간 정리(feat apktool)

아주 오랜만에 글을 씁니다. 작년 말부터 좀 정신없는 일이 있었고, 겸사겸사 VAHA 서비스 손보고 있던지라 블로그에 관심을 많이 못뒀었네요.
(http://vaha.hahwul.com) / 필요한 기능 피드백주세요

본론으로 넘어와서 ..

작년 말즘 안드로이드 개발환경에 대한 공격을 타겟으로 올라온 ParseDroid 취약점이 있었습니다. 여러가지 안드로이드 취약점을 묵어서 이야기하는 말이고 관련해서 apktool과 몇가지 취약점에 대해 포스팅도 한차례 했었던 기억이 나네요.

http://www.hahwul.com/2017/12/hacking-documentbuilderfactory-xxe.html

사실 이 취약점 이후에 아는 지인들과 간단한 프로젝트(?)를 진행해보았습니다.
좋은 아웃풋이 나온건 아니지만.. 아직 중간점검으로 생각하고 한번 정리하여 포스팅하려 합니다.

(언젠간.. 취약점이 될거라 믿어요)

ParseDroid > Apktool XXE

ParseDroid 취약점 중 파급력이 있던게..  Apktool에서의 XXE와 Traversal 취약점이라고 생각이 듭니다. 이 중 XXE의 경우에는 개발 환경에서 원격명령까지 떨어질 수 있기 때문에 파급력도 어느정도 있었죠.

원인은 DocumentBuilderFactory Class 내 parse 실행 중 XML 구문에 대한 검증이 제대로 이루어지지 않는다는 것이였죠. 그래서 Manifest 파일을 읽는 도중에  XXE가 가능했구요.

private static Document loadDocument(File file) throws IOException, SAXException, ParserConfigurationException{
  DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
  DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
  return docbuilder.parse(file); // exploit trigger 포인트입니다.
}
자세한 내용은 작년말에 작성한 포스팅 참고해주세요.
http://www.hahwul.com/2017/12/hacking-documentbuilderfactory-xxe.html



무엇을 하는가?

위 취약점을 접하고 많은 생각을 했었습니다.

" 개발 환경에 대한 공격으로 IDE, Apktool 에서 변조된 Manifest 파일을 읽을때 실행된다고 하는데.. 이러면 대다수의 분석 툴 또한 동일하게 영향력이 발생하는게 아닐까? "

컴파일/디버깅 과정이 아닌.. 보안 툴, 분석 툴에서 분석할 떄 XXE가 가능할지 연구해보기로 했습니다.


Task 1 - apktool을 사용하는 프로그램 찾기

사실 github 잘 뒤지면 나올거라 생각했지만 의외로 몇개 없었습니다.

java 코드는 대체로 apktool 자체를 fork 한 경우이기 때문에 제외하고 보면.. 대략 100개 정도 될듯합니다.  (shell 44 개입니다)

대다수는 apktool 구버전을 사용하고 있기 때문에 영향력이 존재한다고 봅니다.


Task 2 -  공격코드가 포함된 Apk 파일 생성

처음에 취약점 공개 시 외부 pjt를 git으로 땡겨와서 컴파일한다던가.. 이런 컴파일, 빌드 과정에서 취약점이 트리거되고 공격코드 실행으로 apk 가 생성되지 않았었습니다. 또한 최신 IDE나 개발툴은 이를 감지하고 처리하고 있었죠.

우선 가장 먼저 발생한 문제는..  변조된 Manifest 파일이 포함된 apk 파일을 어떻게 만드느냐였습니다.

현재까지 나온 생각은 2가지입니다.

1. Manifest 파일을 직접 인코딩하여 apk 안에 넣어놓는다.
2. 변조된 Manifest 파일을 빌드해줄 수 있는 툴을 찾는다.

모두 가능성은 존재합니다.


### 1. Manifest 내 코드 삽입 후 인코딩
여러가지 루트로 찾아봤습니다만.. 인코딩 된다는 이야기만 있고 정확히 어떤 방식인지 알기 힘들었습니다. 그리고 이 방법의 경우에 직접 인코딩 툴을 짜야할 가능성이 높기 때문에 소모되는 리소스가 크다고 판단하여 천천히 보기로 마음먹었죠.

혹시라도.. 2번이 실패한다면 1번으로 노가다를 시작해야합니다.


### 2. 빌드가 가능한 툴 찾기
여러가지 툴, 버전으로 테스트해봤는데, 최신의 코드들은 대다수가 패치되었습니다. (Major 한 친구들)



그래서 구버전으로 컴파일 하자니.. 에러가 발생합니다. 이는 XXE 구문으로 인한 오류로 생각했지만 apktool에선 구문과 상관없이 에러를 뱉는 것으로 보아 좀 더 테스트가 필요하다고 느낍니다.



아직 해답을 찾은건 아니지만.. 가장 유력한 방법은 오래된 개발툴을 이용해서 apk 를 빌드하는겁니다. 빌드가 성공한다면 최소 github에 있는 100개의 툴에 대해선 테스트 해볼 수 있을 것 같네요.



물론 제가 만든 툴도 포함됩니다 =_=



중간 정리는 이쯤하고.. 글 마무리합니다.

새해 복 많이 받으시고 즐거운 한해되세요 :)



Share: | Coffee Me: