2020. 5. 1. 06:21ㆍ정보보안/웹 어플리케이션 해킹
최초 개정일 : 2020.05.01. ver 1.0
1주차 스터디 04.28
Summary
- Java Script 난독화
- Java Script : Eval() 함수
- Java Script : String.fromCharcode () - decimal ASCII 에 해당 되는 값을 string으로 변환
본 스터디의 방향은 웹해킹 워게임 사이트를 대상으로 진행하기로 하였다.
대상 사이트는 Root Me > Web Client 이다.
이에 따른 문제와 문제 풀이 방법을 기록하며, 풀이 방법 중 Key Point를 남긴다.
0. Intro
Root ME 사이트를 사용하는 방법을 소개한다.
(사용법을 몰라서 헤맷기 때문에)
이 페이지를 통해서 가입하게 되며, 가입할 때 이메일 주소창에Gmail을 사용할 것을 추천한다.
(Naver 메일로 가입 했더니 인증 메일이 오지 않았었다.)
가입후에는 Root Me > Web Client를 클릭해주며 되며 문제를 클릭하면 아래와 같은 페이지가 뜬다.
여기서 「Start the challenge」를 클릭하면 문제를 풀 수 있으며, 문제를 풀고난 뒤 찾은 password( flag 라고도 부른다)를 「Enter password」창에 입력하면 된다.
1. HTML - disabled buttons
문제에서 입력 form와 button이 눈에 보이는데 클릭이 되지 않는다.
F12를 사용하여 보면 <input disable ... > 로 disable라는 말이 떡하니 자리잡고 있다.
*disable이라는 영어가 비활성화 이므로, 우리는 감으로 이를 enable 시키면 되지 않을까? 생각할 수 있겠다.🤔 *
2. Javascript - Authentication
login이라는 버튼을 누르면 「Login()」 이라는 함수가 실행된다고 써져있다.
이 「Login()」 이라는 함수는, 함수이므로 Java Script를 봐야 한다고 생각 할 수 있다.
(HTML, CSS, Java Script에서 유일하게 프로그래밍 가능한 언어는 Java Script 입니다. HTML은 뼈대를 만들고, CSS는 골조에 살을 덧붙이는 용도이기 때문입니다.)
따라서, F12 > Sources 를 열어 login.js 를 보도록 합니다.
역시아 우리가 생각한대로 Login() 이라는 함수가 존재합니다.
그리고 조건문 if에 아이디와 패스워드가 특정 값일 경우 다른 메시지가 출력되는 것을 알 수 있습니다.
따라서 이 아이디 값과 패스워드 값이 Key가 될 수 있겠습니다.
3. Javascript - Source
이번에는 페이지를 띄웠는데 아무것도 뜨지 않습니다.
F12를 클릭해서 보면 body onload 시 (페이지를 열었을 시 ) 「login()」 이라는 함수가 바로 실행되도록 되어있네요.
바로 F12 > Sources를 열어봅시다
네, 대놓고 패스워드가 써져 있네요? 꿀꺽 해줍시다.
4. Javascript - Authentication2
앗 login 이라는 버튼이 보이네요? 왠지 이 버튼을 클릭했을 때 어떠한 Action이 발생할 것 같습니다.
F12 > Elements로 해당 부분의 소스를 보니 클릭시 「connection()」 이라는 함수가 실행 된다고 써져 있네요.
함수는 Java Script만 가능하니까 F12 > Sources로 가보도록 합니다.
여기 보시면 코드가 좀 길게 되어있어서 보기 어려울 수 도 있는데요.
자 일단 우리는 「패스워드」 를 찾아야 하니까. Password라는 단어에 주목해서 아래 라인을 보도록 합시다.
var TheSplit = TheLists[i].split(":");
var TheUsername = TheSplit[0];
var ThePassword = TheSplit[1];
이 부분이 보이시나요? TheSplit[0] 이라는 것은 TheSplit이라는 배열의 첫번째 인자를 가져온다는 것을 의미합니다.
그럼 TheSplit은 배열이네요 !
그리고 TheSplit은 TheList의 문장에서 :를 기준으로 토큰화 되었다는 것을 알 수 있습니다.
(문장인지 어떻게 알았냐고요? .split이란 함수는 string 대상으로만 쓸 수 있어요. 토큰화인지는 어떻게 아냐고요? .split이라는 함수는 python에서도 tokenizing할 때 사용하거든요. 저는 java script를 모르지만 python을 할 줄 알아서 .. 대충 비슷한 감으로 찍어 맞췄어요. 만약에 아에 전혀 감이 오지 않을 때에는 google에 「java script split」 이라고 검색하시면 될거에요 !)
따라서 TheList의 GOD이 ID가 되고 HIDDEN이 Passwd가 되겠네요.
5. Javascript - Obfuscation 1
Obfuscation은 난독화 입니다.
자바스크립트는 소스보기를 통해서 소스가 외부에 노출 되기 떄문에 이를 방지하고자 난독화를 사용하여 알아보기 어렵게 한 것 입니다.
처음에는 이 난독화가 어려워서 어떻게 해야하나 인터넷에 「자바스크립트 난독화」 도 쳐보고 고민을 많이 했습니다만.
결론은 그냥 F12 > Sources 에서 중단점(break point) 걸고 디버깅 해버리면 되는 거시어씁니다 🤣🤣
문제를 보시면 pass에 %(퍼센트)가 엄청 많이 되어있는것을 보실 수 있죠?
저는 이것을 보고 「%(퍼센트)인코딩」 을 떠올렸습니다. URI에 입력할 때 파라미터 조작에 많이 사용되죠.
그리고 자바 스크립트의 unescape() 함수를 찾아보면,「%16진수의 ASCII 아스키코드 값을 ISO LATIN-1 문자로 변환하여 되돌려주는 함수이다.」
라고 나옵니다.
이걸 일일이 해보긴 귀찮으니까, F12 > Console 을 사용해봅시다
콘솔창에 아까 봤던 자바스크립트 소스를 그대로 긁어다 치면 비밀번호가 등장합니다.
6.Javascript - Obfuscation 2
이번에는 아무것도 안떠요. F12를 눌러서 무엇이 있나 열어봅시다.
아하 !tag 쪽에 자바스크립트가 숨어있었군요!
앗 그리고 이번에도 %인코딩이 보이네요? 아까와 비슷한 방법으로 풀 수 있을 것이란 감이 옵니다.
그리고 아까처럼 콘솔창에다가 쫙 긁어서 넣어주고 엔터를 쳐줍니다.
이번 문제에서는 String.fromCharCode 라는 JavaScript 함수를 처음 보았는데요.
이는 ASCII code에 해당 하는 값을 string으로 변환 시켜주는 함수 같습니다.
7. Javascript - Native code
F12 > Element를 열면 아래와 같은 창이 나옵니다.
뜨헉 ... 이게 무슨 외계어 인가. 처음에 보고 엄청 당황하면서 구글검색을 막 때렸습니다.
하지만 나오는 것은 없엇고 ... ㅜㅜ
자 이럴땐 어떻게 하느냐 ~ 드디어 알려드립니다. 검색을 삽질하면서 알아낸 ..!
8번 line에 파란색 보이시나요? 8번 위에 마우스를 대고 클릭하면 저렇게 Break point가 걸립니다.
이제 디버깅을 할 수 있는데요. Step 이라는 F9를 누르면서 디버깅을 해나가다 보면 아래 같은 그림을 보실 수 있어요.
난독화를 몰라도 이렇게 볼 수 있다는 사실 !!😀
+추가합니다. toString 메소드를 이용해서도 풀 수 있습니다.
난독화된 함수의 맨뒤에 ()를 지운뒤 .toString()을 사용하면 아래와 같이 함수내용을 확인할 수 있습니다.
8. Javascript - Obfuscation 3
이번에도 빈페이지가 나오는데요, F12를 눌러보시면
Break point를 걸고 Debugging을 해보면 입력값에 상관없이 항상 같은 문장이 출력됩니다.
자꾸 가짜 패스워드라고 하는데요. 그래서 21번째 줄을 사용해봤습니다.
일단 헥사 값이 알아보기 힘드니까 unescape 함수를 쓰고 (왜썻는지는 저도 모르겠어요.. 감으로 그냥 이렇게 해야 할거 같은데 ... 아시는분 댓글로 알려주시면 ㅜㅜ..)"55 , 56 .." 이런 값은 ASCII에 대응 될거 같아서 String으로 변환 시켜 주었습니다.
먼저 "\x35" 와 같은 Hex ASCII 값을 String ASCII로 바꿔줍니다. ("55" ..)
그리고 이 string ASCII 값을 10진수의 ASCII의 해당되는것으로 보고 다시 한번 string ASCII로 치환해줍니다 (String.fromCharcode)
이 문제에서 관해서는
아래와 같은 참고자료들이 존재하는데요 ! 논문도 있고 ppt, report도 있으니 보시면 좋을것 같습니다.
4 related ressource(s)
- Automatic simplification of obfuscated JavaScript code(Virologie)
- Spiffy: Automated JavaScript deobfuscation(Virologie)
- Automatic detection for javaScript obfuscation attacks(Virologie)
- DEFCON a different approach to JavaScript obfuscation(Virologie)
* Eval() 함수 : ()안에 문자열을 넣으면 eval('string')이 Code로 인식되어 실행 된다 .
이 경우 아래와 같이 활용 될 수 있다.
var x1 = "te ActiveX Co";
var x2 = "ntrol";
var x3 = x1 + x2;
var x4 = "Execu" + x3;
...
eval(x4);
'정보보안 > 웹 어플리케이션 해킹' 카테고리의 다른 글
1. HTTP 프로토콜의 명령어과 상태코드, 쿠키와 세션쿠키, 인코딩스키마 (0) | 2020.05.01 |
---|---|
웹 해킹 테스트 사이트 및 워게임 사이트 (0) | 2020.05.01 |
[SUA] WEEK1 - BOF, FOB, LDAP Injection (0) | 2020.04.24 |
[SUA] 1. 웹/어플리케이션 서비스의 구성 이해 (0) | 2020.04.24 |
[SUA] 0. 2020 1학기 웹해킹 스터디 OT (0) | 2020.04.23 |