본문 바로가기

hacking

리버스 엔지니어링(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)이란? 관련 포스팅1. 리버스 엔지니어링(Reverse Engineering)이란? 2. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(1)3. 리버스 엔지니어링(Reverse Engineering) 0과 1로 이루어진 세계(2) ■ 리버스 엔지니어링(Reverse Engineering)이란? 리버스 엔지니어링(Reverse Engineering)이란 주로 역공학이라고 불리우며, 어려운 용어와는 달리 우리에게 있어 다소 친숙한 개념입니다. 인류는 과거부터 자연에 주어진 것들을 이용하여 도구를 만드는 등 무엇인가 가치있는 것을 만들어왔습니다. 예를 들어 자연에 있는 폭포등의 물의 흐름을 활용하여 물레방아를 만들고 물레방아의 움직임을 활용하여 떡을 빻는 등의 다양한 도구를 만들어왔.. 더보기
리버스 엔지니어링(Reverse Engineering) 카테고리 설명 ■ 카테고리 설명 해당 카테고리는 리버스 엔지니어링(Reverse Engineering)이하 리버싱(Reversing)이라고 불리는 기술에 대해 학습하고 이를 정리하기 위한 카테고리입니다. 더나아가 정보가 필요한 사람들에게 보다 양질의 정보를 제공하므로 도움이 됬으면 하는 바램으로 만들어지게되었습니다. ■ 카테고리 방향성 저 또한 리버스 엔지니어링(Reverse Engineering)의 배워나가는 과정이며 많은 것이 부족하다고 생각되지만공부를 하며 겪었던 여러 시행착오로 조금이나마 시행착오를 덜어드리려는 작은 바램으로 해당 포스팅의 방향성을 결정하려 합니다. 리버스 엔지니어링(Reverse Engineering)을 공부하면서 느꼈던 바로는 다소 진입장벽이 높다는 사실입니다. 여러모로 해당 이유에 대하여 .. 더보기
webhacking.kr [문제 27번] 27번 문제를 해결해보자. 해당 문제의 배점은 150point이며, 클릭해보자. 접속하니 SQL INJECTION을 이용하여 풀라는 힌트와 인풋박스가 주어진다. 어떻게 인젝션하라는 정보가 없으므로 소스코드 또한 확인해보자. 해당 소스코드를 확인하니 인덱스 페이지의 소스코드가 주어져있다. 접속하여 확인해보자. php 소스코드만 살펴보자 if($_GET[no]) { if(eregi("#|union|from|challenge|select|\(|\t|/|limit|=|0x",$_GET[no])) exit("no hack"); $q=@mysql_fetch_array(mysql_query("select id from challenge27_table where id='guest' and no=($_GET[no])").. 더보기
webhacking.kr [문제 24번] 24번 문제를 풀어보겠다. 해당 문제의 배점은 100point이며, 다소 쉬운 문제로 예상된다. 군말없이 클릭해보자. 현재 접속 클라이언트의 IP주소가 보여지며, Wrong IP!라는 메세지를 보여준다. 무언가 적절한 아이피 주소로 변경한다면, 해당 문제를 풀 수 있을 것 같다. 소스코드 또한 확인해보자. 소스코드에 눈에 띄는 부분이 있다. index.phps 를 제공하고 있다. 의심의 여지없이 확인해보자. 다음과 같은 소스코드를 보여주며, 해당 소스코드를 분석하여, 공격방법을 생각해보자. 코드 분석) 분석에 주석을 구체적으로 달아놓았으니 참고하자. 여기서 눈여겨 봐야할 부분이 '12'와 '7.' '0.'을 공백으로 대체한다는 것이다. 만약 112277..00..00..1 해당 문자열을 대입했을 경우, .. 더보기
webhacking.kr [문제 23번] 23번 문제를 풀어보겠다. 해당 문제의 배점은 200point이다. 23번 문제를 접속해보니, 입력 폼 한가지가 있고, 힌트로는 를 인젝션하라고 한다. 그럼 한번 해당 스크립트를 인젝션해보자. 당연히 이렇게 쉽게 될리가 없다. 특정 문자들이 필터링 되어 있는 것으로 확인된다. 어떤 문자열들이 필터링 되어 있는지 체크해보자. 해당 문자열을 토큰 단위로 쪼개어 체크해보았다. 1) 4) alert 5) ( 6) 1 7) ) 8) ; 9) / 해당 필터링 된 문자들을 확인해보면, 각 특수문자들을 필터링 되어있지 않지만, 'script'와 'alert'문자열들은 필터링 되어있는 것으로 확인됬다. 그렇다면 해당 문자열을 이루고 있는 문자들도 필터링 될까? 다행이 아닌 것으로 확인되었다. 그렇다면 해당 문자들을 nu.. 더보기
webhacking.kr [문제 22번] 오늘은 22번 문제를 풀어보겠다. 사실은 며칠전에 풀었지만, 포스팅하지 못하였다. 해당 문제의 배점은 500point이며, 점수 배점이 높은거로 봤을 때, sql injection문제가 아닐까 조심스레 예상해본다. 해당 페이지 접속시, 다음과 같은 로그인 폼이 보인다. 힌트에 유의해야 할 부분이 있는 데, if($id=='admin') echo("good! Password is $solution"); 해당 부분에서 로그인한 아이디($id)가 'admin'이면 패스워드를 출력하는 것으로 확인된다. 먼저 해당 입력폼의 임의의 아이디를 넣고 로그인해보자. 역시나 Wrong! 이라는 메세지를 보여주면서 로그인 실패한다. 한번 회원가입해볼까? username은 'lidron'으로 password는 'crack'으.. 더보기
webhacking.kr [문제 21번] 잠깐 여행을 다녀오느라 문제풀이를 하지 못하였다. 오늘은 웹해킹 21번 문제를 풀어보겠다. 배점은 250point이다. 해당 문제 클릭 다음과 같이 BLIND SQL INJECTION이라는 힌트가 주어져있고, 인풋박스가 한가지 있다. 해당 문제는 BLIND SQL INJECTION기법을 이용하여 풀이하는 문제로 예상된다. 실제로 데이터를 입력해보자. 1~10까지 차례대로 입력해보았다. 1과2는 참(TRUE)이였고, 3~10까지는 거짓(FALSE)이였다. 또 한가지 입력시 URL을 통해 GET방식을 통해 서버에 전달되는 정보가 무엇인지 확인해보았다. no값 말고도 id와 pw가 전달되어지는 것을 확인하였다. 이를 통해 예상해볼 때 정보를 가져오는 테이블은 아이디와 비밀번호를 저장해둔 데이터 테이블이고 구조.. 더보기