관리 메뉴

FU11M00N

Lord of injecton assassin (15)단계 본문

Web Hacking/Lord of injection

Lord of injecton assassin (15)단계

호IT 2019. 11. 5. 01:26

안녕하세요!! 이번엔 assassin 15단계입니다!!

자 이번 문제도 소스가 비교적 짧네요!! 보러 가 봅시다! 

음 우선 preg_match로 금지시키는 문자는 '(싱글쿼터) 입니다.

쿼리문은  pw에 사용자 입력을 하는 것 같고요,

 

&result ['id']가 admin이면  solve가 되어 문제가 풀립니다!
 즉, 쿼리 문의 pw가 일치하는 id값을 가져와야 하는 건데요,

최종적으로 id가 admin인 pw를 알아내야 합니다!!

 

저는 처음에 이 문제를 보자마자 엄청 쉽네~ 하고 접근했다가

왜 안돼....... 가 되었습니다... 

 

우선 문제에 대한 접근은 왜 where절에 pw = 이 아니고 pw like를 했냐 의심해야 봐야 합니다.

우선 w3 schools에서 like에 대해 자세히 알아봅시다.

 

링크는 여기 있고 자세한 설명은 아래에서 하겠습니다!

https://www.w3schools.com/sql/sql_like.asp

 

LIKE연산자는 열에 지정된 패턴을 검색하기 위해 WHERE절에서 사용됩니다.

LIKE연산자와 함께 자주 사용되는 두 개의 와일드카드가 있습니다.

 

그럼 와일드카드란 무엇인가???

 

와일드카드 문자(wildcard character)는 컴퓨터에서 특정 명령어로 명령을 내릴 때, 여러 파일을 한꺼번에

지정할 목적으로 사용하는 기호를 가리킨다. 이 문자는 어느 곳에서 사용하느냐에 따라 약간의 차이를 보인다.

주로 특정한 패턴이 있는 문자열 혹은 파일을 찾거나, 긴 이름을 생략할 때 쓰인다. 

-출처 위키백과 -

 

LIKE 오퍼레이터 설명

WHERE CustomerName LIKE 'a%' "a"로 시작하는 값 찾기
WHERE CustomerName LIKE '%a' "a"로 끝나는 값 찾기
WHERE CustomerName LIKE '%or%' 임의의 위치에 "또는" 있는 값 찾기
WHERE CustomerName LIKE '_r%' 두 번째 위치에 "r"이 있는 값을 모두 찾음
WHERE CustomerName LIKE 'a__%' "a"로 시작하고 길이가 3자 이상인 값을 찾음
WHERE ContactName LIKE 'a%o' "a"로 시작하고 "o"로 끝나는 값을 찾으십시오.

그럼 이 개념 그대로 응용해봐서 pw를 알아내 봅시다!

그럼 하나하나 때려 넣어서 pw값을 알아내야 할 거 같은데요..

우선 제가 ?pw=0~9 a~z를 해봤는데 ?pw=8만 Hello guest가 뜹니다!!

그럼 이게 무슨 뜻이냐면

 

데이터베이스 안에 guest와 admin이 있다면

둘 다 맨 처음 pw의 값은 8이란 소리입니다.

 

근데 hello admin이 아닌 hello guest가 뜨는 이유는 

prob_assassin 데이터베이스 안에 제일 첫 번째에 있는 값이 guest이고

두 번째가 admin이라

첫 번째에 있는 guest가 출력되는 것입니다!!

그럼 계속 하나하나 맞춰가 보면 ?pw=832%를 하면 solve가 되면서 hello admin이 뜨게 됩니다!

하지만 admin의 pw가 832가 아니고 832 뒤에 아마 몇 글자가 더 있을 겁니다.

 

여기서 admin의 pw를 다 알고 싶다면 

?pw=________ 을 하게 되면 pw의 길이를 알 수 있는데요,

 

언더바를 8개 쓰면 hello guest가 뜨고 아까와 같은 원리로

guest와 admin 둘 다 pw의 길이가 8 글자일 것입니다!!!

 

그럼 admin의 pw 값은

 ?pw=832edd10으로  admin의 암호를 전부 알아냈습니다!

Comments