'War Game'에 해당되는 글 15건

  1. HDCON 2017 rock.apk write up 2017.09.19
  2. XSS Challenges stage #14 2012.09.25
  3. XSS Challenges stage #13 2012.09.25
  4. XSS Challenges stage #12 2012.09.24
  5. XSS Challenges stage #11 2010.06.12
  6. XSS Challenges stage #10 2010.05.24
  7. XSS Challenges stage #9 2010.05.23
  8. XSS Challenges stage #8 2010.05.23

HDCON 2017 rock.apk write up

from War Game 2017. 9. 19. 13:06

배점은 100점이며, 가위 바위 보에 연속적으로 이겨서 플래그를 획득할 수 있다는 문제이다.

파일크기가 800kb 가 안되는 apk 파일을 문제로 제공한다.

apk 파일 열어 일단 Manifest 를 봤다.


메인엑티비티와 CallMe, WhyCall 이라는 2개의 리시버가 보인다.

그리고 각 리시버들의 priority 값이 할당되어 있는데 CallMe는 1이고 WhyCall은 2이다.

둘다 core.hdcon.android2017.oops 로 호출이 되는데 priority 값 때문에 단순히 호출만으로는 절대 CallMe를 동작시킬 수 없다.

근데 문제 풀이를 위해서 딱히 중요한 내용은 아니다.


Libraries 를 보면 so 파일이 들어 있는데 앱에서 일부 사용되는 native 함수가 구현되어 들어 있다.

이 so 파일은 문제를 풀기 위해 반드시 분석해야되는 파일이다.

(팁: genymotion 은 x86기반 에뮬레이터다.)

Resources->values->strings.xml 을 보면 아래와 같은 내용을 확인할 수 있다.


소스외에 것들은 대충 본것 같으니 이제 소스코드를 보자.

아래는 MainActivity 에 onCreate 코드이다.


MainActivity.this.e 변수가 들고 있는 값이 putExtra 를 통해서 mm 이라는 이름으로 전달된다.

그럼 mm 의 상호참조를 한번 확인해보자.


CallMe의 onRecevie 에서 mm 을 참조하는가 보다.


CallMe의 onReceive 코드를 보니 getString 으로 mm 이 가지고 있는 값을 읽어 오는게 보이고...

그 바로 아래 try 내부에 구현된 코드를 보면 느낌이 딱 온다.

혹시나 저 코드를 보고 아무런 느낌이 오지 않는다면 절레절레… (그렇다고 너무 실망은 하지 마시고 더 열심히 하시면 됩니다.)

배열에 넣고 길이값 만큼 지지고 볶는코드이고, 오랜만에 보는 삼항연산자도 있다.

v4[v1] = v1 < 0x10 ? A : B

전자의 조건식이 참이면 A를 실행하고 거짓이면 B를 실행하는 무시무시한 코드다.

어쨋든 A, B 모두 ck 함수를 호출하는데 이게 또 native 함수다. 즉 위에서 봤던 so 파일에 기능이 구현되어 있기 때문에 apk 만 봐서는 절대 무슨 형태로 문자열을 작살내는지 확인할 길이 없다.

좋은회사라면 당신에게 hexray 를 사줬을 것이다. (hexray를 사주지 않았다고 해서 꼭 나쁜회사는 아니다. 핸드레이를 열심히 하시면 됩니다.)

그럼 아래와 같이 편하게 ck 함수의 슈도코드를 볼 수 있다.

onReceive 에 구현된 코드와 ck 함수를 본인이 원하는 언어로 옮겨 담으면 90%가 끝난다. (저는 python 을 좋아해서 python 으로 옮겨 담았습니다.)



다시 CallMe 의 onReceive 를 보자.


각 변수들이 어떤 값을 가지고 있는지 무슨 용도일지 감이 대부분 잡힌다.

그런데 v7은 v3를 참조한다는거 말고는 어떤 값을 가지고 있는지 현재로서는 알 수 없다.

v3 또한 getString으로 mm의 값을 가져오는데 mm의 값이 뭔지 알 수 없다.

그럼 putExtra로 mm을 던지는 MainActivity로 다시 가보자.


mm의 값은 MainActivity.this.e 를 참조하고, MainActivity.this.e는 rps_calc 을 통해 만들어지는것을 최종적으로 알 수 있다.

rps_calc은 native 함수다. 다시 so 파일을 보자.

hexray로 rsp_calc 함수부분을 보면 k 값이 17916 이상일때 동작하는 코드가 보인다. 

이쯤 되면 느낌이 오지 않는가!


rps_calc 함수 자체는 가위 바위 보 게임을 할때 이기거나, 비기거나, 졌거나 등의 메시지를 다루는데, v10을 보면 뭔가 이상한 문자열이 보인다.

‘S=TX’, ‘^=_=‘, … 그리고 v14의 0(null)까지 하나의 문자열이므로 한줄로 줄을 세워보면…

XT=S=_=^=”= =!=' 이 된다.

그리고 이 문자열을 xor 하는 do while 을 보면 v9 값으로 하나씩 xor 시켜주는걸 볼 수 있다. v9은 ae의 값을 가지며, ae는 0x10 이다.

코드를 간단하게 짜서 돌리면 …


17916 점수를 넘기게 되면  HD-C-O-N-2-0-1-7 이라는 문자열이 만들어진다.

안타깝지만 이 문자열은 flag 값이 아니고, mm 이라는 이름으로 전달되어 flag 를 디코딩(?)하는데 사용되는 값이다.

퍼즐은 다 모았으니 다시 코드를 간단하게 짜서 돌리면 …



이렇게 최종적으로 flag 값을 얻을 수 있다.


모든 문제를 다 풀지는 못했지만 이 문제는 ‘게싱’이 덜 필요한 그나마 정상적인 문제였다고 생각한다. 


,

XSS Challenges stage #14

from War Game 2012. 9. 25. 09:31

style attribute 를 이용해야하는 문제지만 ... 문제가 있다.
(We have to use "style attribute" but there is a problem.)


아래 그림과 같이 expression 을 이용하려고 하면 필터링으로 인해 expression 이 xxx 로 바뀐다는 점이다.
(When we use the "expression" as below, the "expression" is changed to "xxx" by filtering.)


고민해보도록 하자.
(Thinking...)




,

XSS Challenges stage #13

from War Game 2012. 9. 25. 09:12

style attribute 를 이용해서 공략해야하는 문제이다.
(We have to use "style attribute" to solve this problem.)




고민할게 없으니 ...더 이상의 설명은 생략한다.
(We don't need to think ... so I skip detail explain about this problem.)



,

XSS Challenges stage #12

from War Game 2012. 9. 24. 10:19

100년만에 포스팅이다...


"><script>alert(document.domain);</script> 코드를 넣고 Search를 누르게 되면 아래 그림과 같이 "<", ">" 기호가 필터링되어 scriptalert(document.domain);/script 코드만 남게 되어 아무런 영향을 주지 못한다.


괄호를 인코딩형태로 넣든 뭘하든 안되는걸 봐선 괄호 필터링을 우회하는 문제는 아니라고 판단된다.
즉, 괄호를 사용하지 않고 alert(document.domain)을 실행하면 된다.



우리가 입력하는 값은 INPUT 태그의 value 속성에 들어가게 되며, onmouseover와 같은 이벤트 핸들러를 사용해도 되겠거니 생각을하고 test%20onmouseover='alert(document.domain)' 을 입력해보면 안되는걸 알게 된다. 왜냐면 %20(공백)도 필터링하고 있고 공백뿐만 아니라 싱글쿼터(')와 더블쿼터(")까지 모두 필터링 하고 있다.

고민해보도록 하자...

,

XSS Challenges stage #11

from War Game 2010. 6. 12. 10:32
11번 문제다.

사용자 삽입 이미지

이제 계속 정규식 우회문제가 나오는거 같다.
이번엔 여러가지를 필터링하게 되는데 script 를 xscript 로 바꿔버리고, event handler 를 사용하려고 하면 onxxx 로 변경하며 style 도 stxxx 로 바꿔버린다.
이 문제도 이전 문제와 마찬가지로 " 와 <> 는 필터링하지 않는다.


,

XSS Challenges stage #10

from War Game 2010. 5. 24. 14:35
10번 문제다.
아직 가야할 길이 멀다.

사용자 삽입 이미지

힌트를 보면 알겠지만 정규식으로 domain 이라는 문자열이 있으면 필터링 해버린다.
즉, 이 문제는 필터링을 우회하는게 목표인 문제다.
다행히 " 와 <> 는 필터링하지 않으므로 공략하기가 수월했다.


,

XSS Challenges stage #9

from War Game 2010. 5. 23. 23:21
9번 문제다.

사용자 삽입 이미지

앞의 문제들과 좀 색다른 문제였다.
아무튼 "><script>alert(document.domain);</script> 를 입력해보자.

사용자 삽입 이미지

페이지의 소스코드를 보니 여전히 " 와 <> 는 필터링 되고 있고 charset 이 쓰는 hidden filed 가 하나 발견되었다.
힌트를 보니 UTF-7 이 있어서 charset 에 UTF-7 을 적용하고 공격해보았다.



,

XSS Challenges stage #8

from War Game 2010. 5. 23. 22:14
8번 문제다.

사용자 삽입 이미지

앞의 문제들과는 다른점이 있는데 search 버튼이 Make a Link 로 변했다는거다.
아무튼 일단 "><script>alert(document.domain);</script> 를 넣고 결과를 지켜보자.

사용자 삽입 이미지

Make a Link 말처럼 링크를 만들어서 보여주는걸 확인 할 수 있다.
페이지 소스코드를 확인해 보자.

사용자 삽입 이미지

" 와 <> 는 이제 계속 필터링을 시켜버리는거 같다.
하지만 alert(document.domain); 만 실행하면 되니까 의외로 쉽게 풀 수 있었다.


,