본문으로 바로가기

[Lord of SQLinjection] - orc

category Wargame/Lord Of SQLinjection 2017. 1. 4. 19:59

orc 문제이다. 여기 문제들 부터 블라인드 인젝션 까지 추가되었다. 


블라인드 인젝션은 말그대로 시각적으로 보여지는 것이 없을 때 하는 기법이다. 여기서 자세히 다룰 필요는 없으니 나중에 따로 포스팅 할 예정이다.


어려운 정도는 아니고 패스워드의 값을 알아내야 하는 문제들이 대부분이다.  풀면서 알게된건 이 페이지에서 pw는 대게 8글자이고 숫자랑 문자가 섞여있다... (그 외 문자 x)


문제푸는거랑은 상관 없지만 addslashes라는 함수가 나와있어서 찾아 봤는데 입력값을 받을 때 문자열 중간에 쿼터(')가 들어가 있을 때 에러가 나지 않도록 잡아주는 함수라고 한다. 


예를 들어 내가 H'ello 라는 값을 넣고 싶은데 ' 때문에 문제가 생길 때 ' 를 \로 바꿔줌으로써 H'ello 값을 그대로 넣을 수 있도록 해준다.


다시 문제 얘기로 넘어가자면 쿼리문을 보면 현재 아이디는 admin으로 되어 있고 패스워드를 입력받도록 되어 있는데 내가 입력한 pw가 기존의 pw와 동일해야 풀리게 되어 있다. 즉 블라인드 인젝션으로 패스워드의 값을 알아 내야 한다는 소리다.


블라인드 인젝션 할때 자주 쓰이는 함수를 잠깐 짚고 넘어가자면


내가 알고 싶은 패스워드나 다른 값들의 길이를 알아내주는 length() 가 있다.

예를들어 패스워드가 5글자 일때 length(pw)=5라고 쿼리를 날려주면 true값이 뜬다.



URL


앞의 쿼리를 false로 날려주고 뒤에 id 값을 다시 admin으로 지정해 주고 length를 이용해서 pw는 8 이라고 했더니 true가 되면서 Hello admin이 뜨게 된다.



길이를 알아냈으니 이제 패스워드의 값들을 알아내야 한다.


여기서 쓰이는 함수는 문자들을 숫자로 바꿔주는 ascii()와 문자열을 끊어주는 substr 함수 이다.


만약 'abc'라는 문자열이 패스워드라면..


ascii(substr(pw,1,1)) = 97 / ascii(substr(pw,2,1)) = 98 / ascii(substr(pw,3,1))=99


가 되는 것이다.



보통은 파이썬으로 코드를 짜서 알아내지만 본인은 코드를 짤 줄 몰라서 그냥 노가다로 했다. 길이가 10글자 이하이니 노가다로해도 시간이 많이 걸리지 않는다. 


이 것도 싫다면 코드를 검색하는 걸 추천.. 많은 분들이 좋은 코드를 많이 짜놓았다.



아스키 코드표를 보면 어느 구간이 숫자이고 어느 구간이 문자인지가 나와있으니 그걸 활용해서 부등호를 쓰면서 하면 편하다.


첫번째 글자는 아스키코드표의 57이하라고 나와 있으니 숫자의 범위에 있는 것이다.



이렇게 총 8글자를 알아내면 클리어.

'Wargame > Lord Of SQLinjection' 카테고리의 다른 글

[Lord of SQLinjection] - darkelf  (0) 2017.01.04
[Lord of SQLinjection] - wolfman  (0) 2017.01.04
[Lord of SQLinjection] - goblin  (0) 2017.01.04
[Lord of SQLinjection] - cobolt  (0) 2017.01.04
[Lord of SQLinjection] - gremlin  (0) 2017.01.04