목록분류 전체보기 (106)
훈훈훈
이번에 공부할 내용은 바로 구글 해킹이다. 필자는 처음에 구글 해킹이라는 단어를 듣고 실제로 구글 사이트를 해킹하는 것인줄 알았다 .....어쨋든 구글 사이트를 해킹하는것 만큼은 아니지만 구글 해킹 또한 사회적으로 대단히 위험한 공격 중 하나라고 생각한다.이제 구글 해킹에 대해 좀 더 자세히 알아보자. 1. 구글 해킹이란 ?구글 검색 엔진을 이용하여 정보를 수집하는 기법이다.공격자는 공격 전 사전에 구글 검색 연산자 혹은 키워드 등을 이용해 정보를 수집할 수 있다. 2. 구글 해킹으로 얻을 수 있는 정보 ?? 1. 개인정보2. 웹 서버 기본정보3. 관리자 페이지 노출 등 여러가지 있다. 구글 해킹에 대해 더 알아보고 싶으면 "https://www.exploit-db.com" 사이트를 참조하면 도움이 될 ..
먼저 코드를 살펴보면 다음과 같은 정보를 얻을 수 있다. 1. if(preg_match('/or|and/i', $GET[pw])) => 'or' 와 'and'를 필터링하고 있다. 2. $_GET[pw] = addslashes($_GET[pw]) => addslahes( ) 함수를 사용함으로서 싱글쿼터를 사용할 수 없다. 3. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) => GET 방식으로 입력 받은 pw 값이 admin과 같아야 한다. 이제 문제를 어떻게 해결할지 생각해보자. 1. 'or' 그리고 'and'는 필터링을 하고 있기 때문에 우회할 방법을 찾아야한다.2. 문제에서 addslahes( ) 함수를 사용하고 있다.3. 따러서 Blind SQL i..
먼저 코드를 살펴보면 다음과 같은 정보를 알 수 있다. 1. if(preg_match('/or|and/i', $GET[pw])) => 'or' 과 'and'를 필터링하고 있다.2. if($result['id'] == 'admin') => id='admin' 을 만족해야한다. 이제 문제를 어떻게 풀지 고민해보자 1. 'or' 과 'and'를 필터링 하기 때문에 우회할 방법이 필요하다.2. 'or' = || , 'and' = &&로 우회하자.3. 'or' 를 우회한 다음 id = 'admin'을 삽입하자. pw='||id='admin'%23 을 입력했을 때 다음과 같이 "클리어 메세지"를 확인할 수 있다.
먼저 코드를 보고 정보를 뽑아보자. 1. if(preg_math('/ /i', $GET[pw])) => 공백 필터링2. if($result['id'] == 'admin') => "id = admin" 이 되어야 한다. 이제 문제를 어떻게 해결할지 생각해보자. 쿼리를 보면 where id = 'guest' 인 것을 확인 할 수 있다. 따라서 이 부분을 False 시키고 id = 'admin' 을 삽입시켜야 한다. 그다음 공백 필터링에 대해 고민해 봐야한다. 공백 필터링을 하기 위해서는 어떻게 해야할까?? 여기에 공백 필터링을 우회 할 수 있는 기호를 몇 가지 정리해 보았다. - %09 : TAB - %0a : \n - %0d : \r - 주석 : /**/ - 괄호 : () 필자는 %09(TAB)을 이용하여..
먼저 쿼리를 살펴보자.id는 admin으로 전달 받고 pw는 사용자 입력으로 전달되는 것을 알 수 있다. 이제 코드를 살펴보자. 1. 3번 문제와는 다르게 싱글쿼터, 더블쿼터, 백퀘터에 대한 필터링은 존재하지 않는다. 2. $_GET[pw] = addslahes($_GET[pw]); : addslashes( )함수 이용 => pw 우회 불가 3. if($result['id'] == 'admin') solve("goblin"); : 입력 받은 pw와 데이터베이스에 저장된 admin의 pw가 같아야 한다. 따라서 이번문제는 "Blind SQL injection"을 이용해서 문제를 풀어야 한다. 먼저 데이터베이스에 저장된 admin의 pw 문자의 길이를 알기 위해 length( )함수를 이용해 pw의 길이를 ..
쿼리와 코드를 살펴보자.쿼리를 보면 id는 guest 값이 전달 되어있고 no에 값을 전달해야되는 것을 볼 수있다. 이제 코드를 살펴보자 1. if(preg_match('/\ |\"|\`/i', $GET[no])) => 싱글 쿼터( ' ) 더블 쿼터( " ) 백 쿼터( ` )를 필터링 하고 있다. 2. if($result['id'] == 'admin') solve("goblin") => id=admin 일 때 문제를 풀 수 있다. 임의로 no에 1 값을 넣었을 때 어떤 반응이 나오는지 확인을 해보았다."Hello guest"라는 문자열이 출력된 것을 통해 no=1은 guest인 것을 확인할 수 있다. 이제 문제를 어떻게 해결할지 고민을 해보자. 1. id = admin 이어야된다. 2. 싱글쿼터 더블쿼터..
이제 두 번째 문제인 Cobolt를 풀어보자.문제를 들어가면 다음과 같은 코드를 볼 수 있다.먼저 가장 먼저 보이는 쿼리를 확인하자 id를 입력 받고 pw는 md5( ) 함수로 해쉬 값으로 변환 후 저장되는 것을 확인 할 수 있다. 그 다음 코드를 확인해보면 첫 번째 문제와는 다르게 if($result['id'] == 'admin') solve("cobolt"); 부분을 보면 id = admin 일 때 문제가 풀리는 것을 알 수 있다. 먼저 임의의 값을 삽입했을 때 쿼리가 어떻게 출력 되는지 확인하기 위해 id = admin & pw = 1111 을 삽입을 해보았다.이제 문제를 어떻게 해결할 것인지 고민해보자. 1. id = admin 이어야 한다.2. 하지만 pw는 md5( ) 때문에 결과 값을 항상 ..
문제를 들어갔을 때 다음과 같은 코드를 볼 수 있다.코드를 살펴보면 몇가지 흰트를 파악 할 수 있다. 1. if($result['id']) solve("gremlin"); => id만 일치하면 pw에 관계없이 로그인이 가능하다.2. 참을 만들어 주기 위해 or '1' = '1' 형태로 만들어야 한다. 위에 그림은 id=1 & pw=1 을 넣었을 때 쿼리이다. 이제 위의 그림을 보고 어떻게 쿼리문을 삽입해야 문제를 풀리는지 유추할 수 있다. id 부분을 참으로 만들어주고 그 뒤 나머지는 주석처리를 해주면 문제가 풀릴 것 이다. id= ' or '1'='1'%23 을 삽입 했을 때 문제가 풀리는 것을 확인 할 수 있다.