본문 바로가기

컴퓨터 보안

리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(2) 관련 포스팅1. 리버스 엔지니어링(Reverse Engineering)이란? 2. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(1)3. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(2) ■ 개요 [리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(1)] 에서 0과 1로 이루어진 데이터가 어떻게 표현되어 있는지 알아보았습니다. 그렇다면 컴퓨터 상의 데이터(파일)이 실제로 0과 1로 이루어져 있는지 실습을 통해서 확인해보고 간단한 변조를 해보겠습니다. ■ 실습 오늘의 실습은 빨간색(RED) 그림 파일이 실제로 0과 1로 이루어진 모습을 확인하여 보고 이를 변조하여 파란색(BLUE) 그림 파일로 바꾸어 보겠습.. 더보기
리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(1) 관련 포스팅1. 리버스 엔지니어링(Reverse Engineering)이란? 2. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(1)3. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(2) ■ 2진수 10진수 16진수 [리버스 엔지니어링(Reverse Engineering)이란?] 에서 컴퓨터가 0과 1로 어떻게 이루어지는지 언급한 바 있습니다. 컴퓨터에서 데이터를 표현함에 있어 0과 1로 이루어지는 이유는 전기의 흐름 또는 흐르지 않음 자기장의 N극 또는 S극(하드디스크) 다음과 같은 물리적 특성을 기반으로 데이터를 표현하기 때문입니다. 그렇다면 우리는 0과 1로 이루어진 정보를 읽을 줄 알아야만 컴퓨터 내부의 약속된 신호체계에 대해 .. 더보기
webhacking.kr [문제 21번] 잠깐 여행을 다녀오느라 문제풀이를 하지 못하였다. 오늘은 웹해킹 21번 문제를 풀어보겠다. 배점은 250point이다. 해당 문제 클릭 다음과 같이 BLIND SQL INJECTION이라는 힌트가 주어져있고, 인풋박스가 한가지 있다. 해당 문제는 BLIND SQL INJECTION기법을 이용하여 풀이하는 문제로 예상된다. 실제로 데이터를 입력해보자. 1~10까지 차례대로 입력해보았다. 1과2는 참(TRUE)이였고, 3~10까지는 거짓(FALSE)이였다. 또 한가지 입력시 URL을 통해 GET방식을 통해 서버에 전달되는 정보가 무엇인지 확인해보았다. no값 말고도 id와 pw가 전달되어지는 것을 확인하였다. 이를 통해 예상해볼 때 정보를 가져오는 테이블은 아이디와 비밀번호를 저장해둔 데이터 테이블이고 구조.. 더보기
webhacking.kr [문제 15번] 15번 문제를 풀어보겠다. 해당 문제의 배점은 50point이다. 클릭해보자. 해당 메세지박스가 출력되며 바로 튕긴다. 그리고 바로 어떤 페이지가 보였다가 다시 돌아온다. 너무 빨라서 확인할 수 없다. 하지만 찰나의 순간에서 단축키를 이용하면 확인할 수 있다. 페이지 소스 보기의 해당 단축키를 확인하면, Ctrl+U이다. 해당 메세지 박스가 떳을 때 빠르게 단축키를 눌러보자. 다음과 같은 소스코드 페이지를 확인할 수 있다. 그렇다면 해당 문서에 출력되는 문자열 "password is off_script"를 확인할 수 있다. 너무 간단하지만 Auth들어가서 off_script를 입력해보자. 더보기
webhacking.kr [문제 14번] 문제 14번을 풀어보겠다. 해당 문제의 점수는 100point이다. 문제를 클릭하게 되면, 다음과 같은 입력창 하나가 보인다. 정보가 부족하니 먼저 소스코드를 확인해보자. 앞서봤던 입력 폼에 onclick메소드로 ck()라는 함수가 등록되어 있는 것으로 확인되었다. function ck() { var ul=document.URL; ul=ul.indexOf(".kr"); ul=ul*30; if(ul==pw.input_pwd.value) { alert("Password is "+ul*pw.input_pwd.value); } else { alert("Wrong"); } } 해당 소스코드를 분석해보자. ul에 해당 문서의 URL을 담는다. ul에 담긴 문자열(해당 문서의 URL)에서 ".kr"의 인덱스 값을 구.. 더보기
webhacking.kr [문제 13번] 3번째 라인으로 넘어가서 문제 13번을 풀어보겠다. 해당 문제의 배점은 1000point이며 지금까지 나온 문제 중 제일 높은 배점을 갖고있다. 클릭해보자. SQL INJECTION기법으로 푸는 것으로 예상되며 힌트로 select flag from prob13password라고 주어져 있다. 그렇다면 시험삼아 인젝션을 시도해보자. 몇가지 문자들이 필터링 되어있는 것 같다. 다사다난한 삽질(?)이 예상된다. 임의로 여러가지를 테스트해보자. 1) 0을 입력시 아무런 반응이없다. 2) 1을 입력시 3) 2를 입력시 4) 2이상을 입력시 해당 결과를 토대로 예상해보면 result가 1일때는 참 0일때는 거짓으로 나온다고 생각된다. 해당 가설을 검증해보자. no=2 or 1 (참) 이라는 쿼리를 보내서 해당 결과.. 더보기
webhacking.kr [문제 12번] 웹해킹 12번 문제를 풀어보겠다. 포스팅하기전 테스트할 겸 혼자서 한번 풀어보았는데 미리 풀려버려서, 해당 문제가 풀려진 상태지만 정보도 정리할겸 다시 한번 풀어보겠다. 점수는 250point이다. javascript challenge라고 작성되어 있으며, 문자열을 확인해보면 해당 문제는 자바스크립트를 이용하여 푸는 문제인 것 같다. 이렇게해서는 정보가 부족하니 소스코드를 확인해보자. 해당 소스코드를 확인해보니, 여러가지 숫자가 나열된 것을 확인할 수 있다. 이것이 아마 비밀정보(?)로 예상된다. 소스코드를 한번 구체적으로 해석해보자. String.fromCharCode(인자1,인자2, ...) eval(인자1) 해당 정보를 토대로 해석해보면, 정수값의 나열로이뤄진 부분이 특정 문자열을 반환할 것이고, .. 더보기
webhacking.kr [문제 11번] 웹해킹 11번 문제를 풀어보겠다. 해당 문제의 배점은 300point이다. 해당 문제를 클릭하면 다음과 같은 정보가 주어진다. 해당 힌트를 분석해보자. $pat="/[1-3][a-f]{5}_.*CLIENT_IP.*\tp\ta\ts\ts/"; if(preg_match($pat,$_GET[va])) { echo("Password is ????");} 간단하게 해석해보면 $pat란 변수에 정규표현식을 담고 GET방식으로 전해진 val이라는 변수에 해당 정규표현식에 맞는 문자열이 전해지면, Password를 출력하는 것으로 확인된다. 정규표현식을 하나하나 살펴보자. 1. [1-3] [1-3] : 1~3사이의 문자 중 하나를 찾음 예시) 1, 2, 3 2. [a-f]{5} [a-f]{5} : a~f사이의 문자 중.. 더보기