본문 바로가기

IT/웹 해킹(Web Hacking)

webhacking.kr [문제 21번]




잠깐 여행을 다녀오느라


문제풀이를 하지 못하였다.


오늘은 웹해킹 21번 문제를 풀어보겠다.





배점은 250point이다.


해당 문제 클릭





다음과 같이


BLIND SQL INJECTION이라는 힌트가 주어져있고,


인풋박스가 한가지 있다.



해당 문제는 BLIND SQL INJECTION기법을 이용하여


풀이하는 문제로 예상된다.



실제로 데이터를 입력해보자.



1~10까지 차례대로 입력해보았다.





1과2는 참(TRUE)이였고,


3~10까지는 거짓(FALSE)이였다.



또 한가지 입력시


URL을 통해 GET방식을 통해 서버에 전달되는 정보가 무엇인지 확인해보았다.






no값 말고도 id와 pw가 전달되어지는 것을 확인하였다.


이를 통해 예상해볼 때


정보를 가져오는 테이블은


아이디와 비밀번호를 저장해둔 데이터 테이블이고


구조는





다음과 같은 구조로 예상된다.



우리가 이전에 시도했던 BLIND SQL INJECTION기법을 이용하려면


먼저 알아내고자 하는 요소들의 길이를 알아내어야 한다.




쿼리를 날려 해당 데이터들의 길이를 알아내보자.




날리고자 하는 쿼리는


QUERY : [no값] and length([요소])=해당 데이터의 길이



이와 같은 형태가 된다.



과거 포스팅을 보면 확인할 수 있겠지만,



and를 기점으로


전 후가 참이되어야 결과값으로 참을 반환할 것이다.


이를 통해 해당 데이터 요소들의 길이를 알아낼 수 있다.


설명보다 실습을 통해 직접적으로 확인해보자.





1) no=1 데이터의 아이디와 비밀번호를 알아내는 경우




no=1인 데이터의 id의 길이가 4인지를 확인해보려 한 경우, FALSE값을 반환하였다.


이를 통해서 해당 아이디의 길이가 4가 아님을 확인하였다.




같은 맥락으로 숫자를 하나씩 증가시키면서 비교(노가다)해보면


해당 데이터 요소들의 길이를 알 수 있다.



다음과 같은 결과를 통해


no=1의 데이터의 id요소 길이가 5인 것을 확인하였고,



no=1의 데이터의 pw요소 길이가 5인 것을 확인하였다.






2) no=2 데이터의 아이디와 비밀번호를 알아내는 경우




다음과 같은 결과를 통해


no=2의 데이터의 id요소 길이가 5인 것을 확인하였고,





no=1의 데이터의 pw요소 길이가 19인 것을 확인하였다.







Brute-Force(무차별대입)공격을 기반으로한 BLIND SQL INJECTION기법을 이용한 풀이의 모든 정보가 갖추어졌다.




허나 한가지만 고려해보자.


해당 회원정보 데이터 테이블에는 한가지는 분명 admin일 것이고,


admin 정보의 비밀번호를 알아내는 것이 해당 문제가 바라는 바일 것이다.



하지만 두 아이디의 길이(length)가 모두 5이기 때문에,


어떠한 no값의 비밀번호를 알아내야 할지 모른다.



이를 알고 소스코드를 작성하는 것이 더욱 효율적인 풀이일것이다.



추가적인 쿼리를 날려서 확인해보자.








해당 쿼리는 id값의 첫번째 글자 a(=97)인지 알아내는 쿼리이다.



이를 통해 



no=1값의 아이디의 첫번째 글자가 a가 아닌 것을 확인하였고,


no=2값의 아이디의 첫번째 글자가 a인 것을 확인하였다.



그렇다면


확실히 알기위해


no=2의 두번째 글자가 d인지 확인해보자.





해당 값은 TRUE를 반환한다.



결과적으로





다음과 같은 테이블 구조를 가지고 있다.





파이썬을 이용하여 공격 스크립트를 작성하여, 비밀번호를 확인해보자







해당 스크립트의 결과





해당 스크립트를 통해


admin계정의 비밀번호는 blindsqlinjectionkk인것을 확인하였다.





풀이완료










'IT > 웹 해킹(Web Hacking)' 카테고리의 다른 글

webhacking.kr [문제 23번]  (0) 2018.03.31
webhacking.kr [문제 22번]  (0) 2018.03.30
webhacking.kr [문제 20번]  (0) 2018.03.17
webhacking.kr [문제 18번]  (0) 2018.03.13
webhacking.kr [문제 17번]  (0) 2018.03.13