반응형

1. Framework 관련 에러

 - apktool을 이용하여 compile 진행 시 에러가 발생할 경우 아래와 같은 명령어를 입력하는 것으로 해결할 수 있다.


apktool empty-framework-dir --force


혹은 직접 framework 디렉토리에 존재하는 파일을 삭제해주는 것도 가능하다.

Windows 운영체제의 경우 아래의 경로에 접근한 뒤 해당 경로에 존재하는 파일들을 지워주면 된다.


C:\Users\계정명\apktool\framework


아마 대부분 1.apk가 있을 것이다.


Framework와 관련된 사항은 추후 업데이트 예정


2. resource 관련 에러

 - 만약 위와 같은 방식으로 에러가 해결되지 않는다면 임시방편으로 --no-res 옵션을 이용하여 리소스를 제외하여 디컴파일, 컴파일을 진행할 수 있다.


Step 1) --no-res 옵션을 이용하여 리소스를 제외하고 디컴파일 진행

명령어 : java -jar apktool.jar --no-res d base.apk


Step 2) 디컴파일된 파일에 원하는 작업 진행

Step 3) apktool을 이용하여 빌드 진행 후 결과 파일로 output.apk 생성

명령어 : java -jar apktool.jar b base -o output.apk


Step 4) app Signing

명령어 : java -jar signapk.jar testkey.x509.pem testkey.pk8 output.apk output_signed.apk


Step 5) App Install

반응형

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

IOS Pinning bypass  (0) 2020.03.04
메모리 내 중요정보 평문노출  (0) 2020.02.10
APK 무결성 확인  (0) 2019.04.20
Windows 환경에서 IOS device 로그 보기  (0) 2019.03.28
[IOS] Frida-trace  (0) 2019.01.17
블로그 이미지

rootable

,
반응형

1. Singing Key 확인

 - 앱을 플레이스토어에 올리기 위해서는 릴리즈 빌드를 해야하는데 이 때 Signing 을 하게 된다. 이것의 목적은 Signing에 사용된 공용키에 해당하는 개인키를 가진 사람만이 업데이트를 할 수 있도록 하기 위해서이다.

 - 따라서 무결성 체크를 위해서는 사이닝된 키가 개발자가 설정한 키와 동일한 키인지 런타임 시 Signing 인증서를 체크하여 위변조된 앱인지 아닌지 확인할 수 있다.

 - 아래는 간단히 앱에서 현재 Signing 된 인증서 정보를 가져오는 코드이다. 

( 출처 : http://dktfrmaster.blogspot.com/2017/02/apk.html )



public static void checkAppSignatureInServer(Context context, Callback callback) {
    try {
        @SuppressLint("PackageManagerGetSignatures")
        PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
        
        //안드로이드는 이론상 여러 키스토어로 Signing 가능하다고 하지만,
        //일반적으로는 하나의 키스토어로만 Signing을 하므로, signatures의 첫번째 값을 이용한다.
        Signature signature = packageInfo.signatures[0];
        final String currentSignature = obtainSignatureString(signature);
        fetchServer(currentSignature, callback);
    } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

private static void fetchServer(String signature, Callback callback) {
    //TODO::Fill in server logic
    callback.onFinishCheck(ValidationEnum.VALID);

2. 인스톨러 확인
- 모든 앱은 어떤 인스톨러를 이용하여 설치되었는지 알 수 있다. 이 때 인스톨러의 identifier를 체크하여 위변조된 앱인지 아닌지 알 수 있다.
- 각 인스톨러마다 identifier를 가지고 있는데 구글의 경우 com.android.vending이라는 identifier를 가지고 있다. 만약 adb로 인스톨했을 때에는 null로 출력된다. 따라서 identifier가 com.android.vending이 아니라면 플레이스토어에서 설치한 앱이 아니므로 앱을 종료시키면 된다.
- 아래는 간단히 앱의 인스톨러를 확인하는 코드이다.

public static boolean verifyGoogleInstaller(Context context) {
    final String installer = context.getPackageManager().getInstallerPackageName(context.getPackageName());
    return installer != null && installer.startsWith("com.android.vending");
}


참고) http://dktfrmaster.blogspot.com/2017/02/apk.html

반응형
블로그 이미지

rootable

,

IIS 오류페이지 설정

2019. 4. 14. 10:58

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

해당 문제는 secret service를 찾으면 될 것으로 보인다.

주어진 주소에 접근해보자.


문제에 접근하면 위와 같이 특정 URL을 넣는 칸이 있다.

여기에 구글 주소를 입력한 뒤 제출을 누르면 구글 사이트로 리다이렉트되는 것을 볼 수 있다.

해당 기능을 이용하여 secret service에 접근하면 될 것으로 보인다.


메인페이지에서 페이지 소스를 보면 아래와 같이 주석으로 로컬의 1337 포트에 secret stuff가 있다고 한다.


그래서 해당 주소를 입력한 뒤 제출을 누르면 아래와 같은 에러가 뜨며 접근이 되지 않는다.


필터링이 존재하는 것으로 보여 아래 사이트를 통해 여러가지 우회패턴을 입력해보았다.


https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery


그 중 나는 Bypass using tricks combination 사용부분을 이용하여 문제를 풀었다.

똑같이 진행해도 문제가 풀리는데 조금 더 찾아보고 가장 단순하게 풀어보았다.


메일 계정에서 test@rootable.com 일 경우 계정명은 test이고 호스트는 rootable.com인 것을 이용하여 127.0.0.1 앞에 @를 넣음으로써 필터링을 우회할 수 있었다.



payload : url=http://@127.0.0.1:1337/

반응형

'Hacking Contest' 카테고리의 다른 글

2019 X-MAS CTF  (0) 2019.12.18
[Rooters CTF] baby web  (0) 2019.10.10
[ByteBandits CTF 2019] EasyPHP  (0) 2019.04.13
parse_url Hostname Bypass (SwampCTF Brokerboard Writeup)  (0) 2019.04.07
[2019 Encrypt CTF] vault  (0) 2019.04.03
블로그 이미지

rootable

,
반응형

전체 소스코드는 아래와 같다.


<?php
$hashed_key 
'79abe9e217c2532193f910434453b2b9521a94c25ddc2e34f55947dea77d70ff';
$parsed parse_url($_SERVER['REQUEST_URI']);
if(isset(
$parsed["query"])){
    
$query $parsed["query"];
    
$parsed_query parse_str($query);
    if(
$parsed_query!=NULL){
        
$action $parsed_query['action'];
    }

    if(
$action==="auth"){
        
$key $_GET["key"];
        
$hashed_input hash('sha256'$key);
        
//echo $hashed_input.'\n';
        
if($hashed_input!==$hashed_key){
            die(
"GTFO!");
        }

        echo 
file_get_contents("/flag");
    }
}else{
    
show_source(__FILE__);
}

?>


1. parse_url 함수를 통해 REQUEST_URI의 query 부분을 뽑아낸다.

2. query 중 action이 auth이며 입력한 key값의 sha256 hash값이 $hashed_key 값과 동일하면 flag를 출력시킨다.


해당 문제는 parse_str() 취약점 이용하여 풀 수 있다.

parse_str 함수의 경우 입력받은 값은 변수로 저장하는 역할을 하는 것이라는 것을 이용하는 것이다.


따라서 이미 세팅되어 있는 hashed_key 값을 query에 포함시켜 주면 parse_str 함수에 의해 내가 원하는 값으로 덮어 씌워진다.


즉, key 값으로 임의의 값을 넣은 뒤 hashed_key 값을 임의의 값을 sha256 한 값으로 넣어주면 flag가 출력된다.


payload : 

http://easyphp.ctf.euristica.in/?action=auth&key=1&&hashed_key=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b


참고 ) https://revers3r.tistory.com/96

반응형

'Hacking Contest' 카테고리의 다른 글

[Rooters CTF] baby web  (0) 2019.10.10
[ByteBandits CTF 2019] Online Previewer 1  (0) 2019.04.13
parse_url Hostname Bypass (SwampCTF Brokerboard Writeup)  (0) 2019.04.07
[2019 Encrypt CTF] vault  (0) 2019.04.03
[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
블로그 이미지

rootable

,
반응형

문제에 접근하면 오직 gif 파일만 올릴 수 있다고 한다.

혹시 내가 모르는 취약점이 존재하지 않을까 하여 소스코드 내 여러 함수들을 보았지만 딱히 그래 보이는 것은 없었다.


그래서 gif와 php에 대해 검색을 하다보니 gif 파일 내에 포함되어 있는 PHP code가 실행이 되는 취약점이 존재하는 것을 보고 시도해보았다.


임의의 GIF 파일 내에 TEST 문자열 출력 코드를 삽입한 결과 잘 동작하는 것을 볼 수 있다.

이를 통해 간단히 풀 수 있겠다 하여 system 함수를 이용하여 시스템 명령어를 출력하려하였지만 동작하지 않았다. 하지만 phpinfo()를 해보았을 때도 역시 제대로 동작하는 것을 통해 시스템 명령어를 사용할 수 있는 함수들은 차단한 것으로 보인다.


그래서 PHP 함수 중 디렉토리 내 파일들을 확인할 수 있는 함수를 찾다 scandir 함수를 찾아 이를 통해 현재 디렉토리 내 파일들을 볼 수 있었다.


이후 show_source() 함수를 이용하여 flag.txt 를 읽어 FLAG를 획득하였다.



새로 알게된 사실들

1. scandir은 PHP 5 이상 지원한다. 그 아래의 PHP를 사용할 가능성은 낮지만 만약 그 아래라면 opendir, readdir, closedir 함수를 이용하여 동일한 기능을 이용할 수 있다.


2. echo, print_r, var_dump의 차이점은?

 - echo는 단순 출력용 ( 배열을 출력하면 array라고 출력된다. )

 - print_r의 경우 배열이나 객체를 출력할 때 사용된다.

 - var_dump는 print_r과 비슷하지만 각 값들의 type까지 알려준다.


3. gif 확장자에서 PHP Code가 실행되는 이유는?

반응형

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

MYSQL load_file & into outfile  (0) 2019.06.28
[JAVA] AES256 decrypt Code  (0) 2019.04.25
[websec.fr] level 25 writeup with parse_url bug  (0) 2019.04.07
[WebSec.fr] level 17 writeup  (0) 2019.03.28
PHP Object Injection with websec level 4  (0) 2019.03.26
블로그 이미지

rootable

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

해당 문제는 level 1의 업그레이드 버전이라고 한다.

문제를 보면 preg_replace()를 이용하여 특정 문자들을 필터링하고 있다고 한다.

그런데 몇번 테스트해본 결과 단순히 해당 문자들을 공백으로 치환하고 있는 형태여서 2번 작성하는 것으로 우회할 수 있다.


1. 컬럼 수가 2개인 것을 확인



2. union select가 작동하는 것을 확인



3. 패스워드 획득



반응형
블로그 이미지

rootable

,