전체 208

labyrenth 2017 / Mobile 2 - routerlocker (mips 리버싱, gdb set follow-fork-mode child)

mips가 mobile로 분류 되어 있다. 환경을 맞추고 실행을 시켜 보면 위와 같이 나온다. License file not found로 봐서는 파일을 읽어 들이는 것으로 보인다. [ IDA - fopen (loc_400908) ] mips에서 파라미터가 들어가는 형태는 a0, a1을 사용하는 듯 하다. 형태를 좀 자세히 알기 위해서 fopen의 원형을 보면 (https://www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/fopen.htm) FILE *fopen(const char *filename, const char *mode); 이와 같은 형태를 띈다. IDA에서 출력한 정보를 바탕으로 보면 fopen($a0, $a1)의 형태를 지닌다. mod..

CTF | wargame 2018.02.27

labyrenth 2017 / Mobile 1 - Ezdroid(안드로이드 코드 리버싱, 자바 연산상 오류 )

apk를 디컴파일 해 보면 볼만한 클래스는 EzMain과 ones 두 개가 존재한다. EzMain을 메인으로 생각하면 된다. [ onCreate ] onCreate부분을 보게 되면 Part1으로 특정 문자열이 출력 되게 되어 있다. 기기를 붙여 실행을 시키면 log로 확인이 가능하다. 아니면 코드 분석을 하면 된다. [ retIt ] part1의 답인 retIt을 보면 위와 같다. 고정된 숫자값의 shift right x만큼을 한다. 단, 저장되는 형태가 byte이므로, &연산을 통해 버려주어야 한다. 파이썬 연산으로 변환하면 다음과 같다. (-1041749503 >> 5) & 0xff (-1865645093 >> 9) & 0xff (-1972361451 >> 7) & 0xff (-1779558645 >..

CTF | wargame 2018.02.27

radare2 / sym 파싱 오류, sym to str

https://cpuu.postype.com/post/838572 위 포스트를 보고 radare2 연습을 하는 과정에서 문제가 발생함. RPISEC 첫 연습문제인 crackme0x00a [ 정상 결과 ] 이미 해결 뒤라 정상으로 나온 사진밖에... str.g00dJ0B!으로 나와야 할 부분이 자꾸 sym.pass.1685로 나타나는 현상... 이유는 버전상 오류였던 듯 하다. (관련 : https://github.com/radare/radare2/issues/4997) ubuntu에서 apt-get으로 받았던 radare2의 버전은 0.9.x로 너무 오래된 것 https://github.com/radare/radare2 공식 깃에서 받아서 다시 설치하면 해결이 가능하다.

CTF | wargame 2018.02.26

Clicker Heroes

https://www.youtube.com/watch?v=AMMOErxtahk LiveOverflow에서 Don't wasting your time 을 주제로 영상이 하나 올라왔다. 내용 중에 안드로이드 게임의 취약한 부분을 이용한 공격을 하는 내용이 있어서 따라해 보게 되었다. 타겟이 되는 게임은 Clicker Heroes 레벨 별로 몬스터가 등장하는데 아이템을 구매해서 더 강하게 키워나가는 방식이다. 터치로 데미지를 줄 수도 있고, 아이템 구매를 통해 시간당 데미지, DPS를 올려 잡는 방법이 있다. 조금 해봤는데 마지막 영웅의 값이 얼마일지 추측이 되지 않는 수준까지 된다. 물론 과금도 있다. 해당 게임의 경우, 백업을 할 수 있는데, 백업의 형태가 특이하다. Export, Import 기능이 존재..

기타 2018.02.26

BlackHat 2017 / Web Cache Deception Attack

https://www.youtube.com/watch?v=mroq9eHFOIU 웹 CDN 서버에서의 캐시 데이터로 인한 취약점이다. 공격자가 어떤 공격으로 인해 피해자를 원하는 서버로 연결요청을 시킬 수 있다고 할때, http://private.com/private.php/nonexists.css 로 링크를 요청시킨다. 여기서 정상 페이지는 private.php이며, 뒤에 nonexists.css 는 static 페이지로 인식 시키기 위함이다. 이렇게요청을 시키게 되면, 피해자의 권한으로 private.php에 대한 접근 결과를 받게 된다. 하지만 CDN 서버에서는 private.php가 아닌 private.php/nonexists.css로 인식을 하게 되고, static 캐시 데이터로 인식을 하기 때문..

CTF | wargame 2018.02.26

codegate 2018 / Welcome to droid (Activity 강제 실행)

안드로이드 문제이다. Activity가 총 4개로 MainActivity, Main2Activity, Main3Activity, Main4Activity 가 존재한다. 먼저 MainActivity는 id를 입력받고 Main2Activity로 전환한다. 그리고 비밀번호를 받는데 입력받은 값을 고정된 문자열인 codegate2018hurray!HAHAHALOL과 특정 연산을 진행한다. [ Main2Activity ] 아마 액티비티에 번호를 붙인 것은 순서대로 진행을 하라는 의미일 것이며, 최종 목표는 Main4Activity를 실행 시킬 것이라고 생각하여 4번을 보았다. [ Main4Activity ] 코드는 간단하다. 액티비티를 띄우면 JNI에서 문자열을 읽어 온다. 다른 작업은 없기 때문에 해당 액티비티..

CTF | wargame 2018.02.26

Genymotion Unable to start the virtual device.

nox 설치 이후 갑자기 genymotion이 동작하지 않는 문제가 발생. Unable to start the virtual device. 대충 구글링 해 보면 네트워크 설정을 바꾸라던가 vbox 에러 로그를 확인하라 함.별 효과는 없었고 문제는 vbox의 버전 문제 https://www.virtualbox.org/ticket/15752?cversion=0&cnum_hist=1 vbox 특정 버전 이하에서 종종 발생하는 문제로 vbox 최신 버전을 설치 해주면 문제가 해결됨. (genymotion과 함께 다운로드 되는 vbox의 버전은 5.0.x)

기타 2018.02.12

codegate 2017 / bugbug (seed 획득을 통한 random 유추. 포맷스트링 버그)

write up : http://blog.kimtae.xyz/159 https://bpsecblog.wordpress.com/2016/05/02/codegate2016_bugbug/ .... 일단 취약한 fsb 부분과 넘겨야 하는 부분을 알았으므로 순서대로 보면 (1) random 넘기기 1단계로 random 값을 넘겨야 한다. random을 통과해야만 fsb가 터지는 printf 함수를 사용할 수 있기 때문이다. random에 사용되는 seed 값은 읽어들이게 되는데 buf 바로 뒤에 있다. 때문에 버퍼의 크기인 0x64를 입력하면 시드 값이 붙어서 나오게 된다. [ 붙어나온 seed 값 ] seed 값 계산은 ctypes 모듈을 사용하여 계산하였다. [ random 계산 ] (2) exit_got 흐..

CTF | wargame 2017.05.02

codeengn / smartapp / challenge 04 (안드로이드 apk 리버싱, 맵핑되지 않은 메소드 연결)

[ 문제 ] bctf mobile 문제를 풀다가 아직 codeengn 문제를 다 풀지 않았던 것을 알아서 풀게 된 문제. 이전 문제들과 동일하게 서명이 없기 때문에 설치를 할 수 없다. 어차피 리컴파일 하면 서명을 다시 해야하기 때문에 있으나 없으나 큰 차이는 없다. 이번 문제의 경우 풀면서 genymotion을 통한 adb를 사용하였다. (설정 : http://i5on9i.blogspot.kr/2014/12/adb-genymotion.html) [ apk 실행시 화면 ] 실행을 하면 위처럼 입력창 하나와 버튼 하나, 결과가 뿌려지는 텍스트가 하나 있다. apk의 구조는 상당히 간단하다. MainActivity가 있고, 거기서 키값 확인을 한다. 키값은 고정된 sha256값과 비교를 하게 된다. 사용되지..

CTF | wargame 2017.05.02

codegate 2017 final / ransomware rsa 부분 (rsa 복호화, rsa 블록 형태)

ransomware 복호화 부분. ransomware 프로그램을 돌리면 대회 시작 이전 레코드가 총 3개 있다. 해당 레코드의 public, private key 쌍을 뽑아 짝을 맞출 수 있으며 여기서 대회 문제에서 제공된 암호 복호화 시킬 수 있다. (1) 키 쌍 확인하기 privatekey 1,2,3의 키쌍을 확인해보면 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 >>> from Crypto.PublicKey import RSA >>> def check_rsa(public,private): ... pub = RSA.importKey(public) ... pri = RSA.importKey(priva..

CTF | wargame 2017.05.02