일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- 이진탐색트리
- materialize
- 그래프
- 포렌식
- node.js
- 써니나타스
- 자바
- 자료구조
- nodeJS
- mongoose
- node
- 자바기초
- 자바문제풀이
- GIT
- 웹기초
- Express
- bootstrap
- NavBar
- 포렌식워게임
- 뷰
- gitbash
- 웹개발
- CTF
- wargame.kr
- 이진트리
- 워게임추천
- 워게임
- MongoDB
- 웹해킹
- 웹해킹기초
- Today
- Total
보안 전공생의 공부
wargame.kr #6 fly me to the moon | javascript 난독화 본문
start를 눌러주니 웬 게임창이 뜬다.
비행기가 형관선에 안 닿게 유의하면서 조종하여 점수가 31337점이 나와야 게임이 성공한다.
javascript 구문을 우회하여 게임에 성공해야 되는 것 같다.
소스코드의 스크립트 구문은 도통 뭘 말하는 건지 알 수 없게 난독화되어 있다.
▶ 자바스크립트 난독화
자바스크립트는 클라이언트(Client)에서 실행되도록 하는 언어여서 사용자가 웹사이트에 접근하게 되면 해당 스크립트를 그대로 볼 수 있게 된다. 이를 방지하고자 적용하는 기법이다.
(출처 : https://kkamikoon.tistory.com/165 )
이 난독화 된 스크립트 구문을 해독해야 문제의 단서가 보일 것이다.
문제에서 난독화 수준은 문자열로 치환한 정도로,
이를 해독하는 사이트가 있다.
엄청 긴 코드지만 앞부분에서 var _0x8618x6 = 0; 이 부분이 왠지 의심스러워 이 부분만 파보려고 한다.
함수이름들이 이해하기 어렵게 되어있어서 쉽게 납득은 안가지만 저렇게 0이라고 초기화 시켜놓은 것이 왠지 점수를 나타내는 변수일 것 같다.
function secureGame() {
var _0x8618x2 = this;
var _0x8618x3 = true;
function _0x8618x4() {
_0x8618x3 = false;
return true
};
function _0x8618x5() {
return _0x8618x3
};
this['killPlayer'] = function() {
_0x8618x4();
return true
};
this['checkLife'] = function() {
return _0x8618x5()
};
var _0x8618x6 = 0;
변수 _0x8618x6을 선언한다.
function _0x8618x7() {
return _0x8618x6
};
function _0x8618x8() {
if (_0x8618x3) {
_0x8618x6++
};
true(_0x8618x3)이면 변수 _0x8618x6값이 1씩 증가한다.
return true
};
this['getScore'] = function() {
return _0x8618x7()
};
getScore 변수가 _0x8618x6을 리턴하는 _0x8618x7() 함수이다.
this['BincScore'] = function() {
_0x8618x8();
return true
};
true(_0x8618x3)이면 변수 _0x8618x6값이 1씩 증가한다.
이 정도면 이 변수가 점수를 나타내는 것이라고 간주할 수 있을 것 같다.
이 변수값을 31337으로 변경해주고 다시 스크립트문에 넣어주었다.
바로 원래 있던 스크립트 문을 바꿔주었다.
그랬더니 적용되지 않는다. (페이지 소스를 변경할 수 없게 한 걸까 ? 이유는 잘 모르겠다.)
구글링해보니 다들 console창에서 수행을 한다. 원본 소스를 변경하지 않고도 console창에 소스를입력만 해도 실행이 가능하다고 한다.
+) 피드백
개발자 도구 Element에는 이미 정의된 난독화 코드에 대한 값이 있다.
그래서 Element에 값을 아무리 바꿔주어도 이미 저장되어 있는 요소이고, 동적으로 페이지가 작동하기 때문에 게임을 다시 실행해도 초기 상태로 돌아갈 수 없다. (정적인 페이지면 변수가 바뀌었을 수도 있다)
그래서 콘솔 창에서 수정을 해야한다.
소스를 입력하고 다시 게임을 시작하면 바로 게임에 성공했다고 뜨고, 플래그값을 얻을 수 있다.
+) 피드백
난독화는 Javascript가 아니더라도 CTF에서 간혹 쓰이는 기법이다.
난독화는 Beautify라는 툴을 이용하면 해독할 수 있다.
난독화가 되어 있다는 힌트 : 처음에 eval(function(p, a, c, k, e, d) 이다.
CTF에서 난독화 기법이 의심되는 문제가 나오면, [언어이름] Beautifier을 치면 관련된 툴을 더 쉽게 찾을 수 있다.
'Wargame > web' 카테고리의 다른 글
HackCTF #5 Guess me (0) | 2021.01.15 |
---|---|
Lord of SQL Injection#6 darkelf (0) | 2021.01.15 |
Lord of SQL Injection#5 wolfman | White Space filtering (0) | 2021.01.15 |
Lord of SQL Injection#4 orc | Blind SQL Injection (0) | 2021.01.15 |
wargame.kr #4 login filtering | SQL 우회기법 (0) | 2021.01.15 |