<<< 21번 문제 >>>
이번 문제는 아래 사진에서 보다시피 우리가 위에서 알아본 Blind SQL Injection 문제이다.
어떤 오류가 뜰지 확인해보기 위해 ‘ 를 넣어 제출해보았지만 결과는 아래에서 보다시피 Ture냐 False만 나타내주고 오류는 나타내주지 않는다.
해당 제출하는 문자가 어디에 어떻게 들어갈지 확인해보기 위해 여러 시도를 해본 결과 아래의 사진과 같이 no에 숫자형으로 들어간다는 것을 알 수 있다.(‘가 없으므로)
또한 자세히 보면 id와 pw가 있는데 해당 값들을 우리가 찾아야 하는 것이다.
또한 1과 2를 넣었을 때만 Ture가 되고 다른 값들은 모두 False로 나오는 것으로 보아 테이블의 no에는 1과 2만 존재한다는 것을 알 수 있다.
no | id | pw |
1 | ?? | ?? |
2 | ?? | ?? |
이제 1과 2에 해당하는 id와 pw를 알아야한다. 그러려면 substr와 ascii함수를 이용해야하는데 id와 pw가 몇글자로 이루어진 문자열인지를 먼저 알아야한다.
문자열의 길이를 리턴해주는 length()함수를 이용하자.
1부터 넣어본 결과 5일 때 True가 나타나다.
위와 같은 방식으로 no가 1일 때 id와 pw , no가 2일 때 id와 pw의 길이를 알아본 결과
아래와 같은 표를 얻을 수 있었다. ( 괄호 안의 숫자가 문자열 길이)
no | id | pw |
1 | ?????(5) | ?????(5) |
2 | ?????(5) | ???...?(19) |
그럼 이제부터 substr함수와 ascii함수를 이용하여 예측해보자.
가장 먼저 1의 id는 guest, 2의 id는 admin이라고 가정하고 진행해보았다.
2번의 id의 첫번째를 admin의 첫번째 문자인 a의 아스키코드 값인 97과 비교해보았더니 그 결과 True가 나왔다. 두번째 문자가 d인지 확인해보자
역시 True가 나온다!! 고로 no가 2인 것은 admin이라고 생각하자
그럼 자연스럽게 1은 할 필요가 없겠다.
이제 pw를 찾아야하는데…..이건 일일이 할 수가 없다. 고로 파이썬을 이용하자.
간단하게 설명하면 현재 웹해킹 사이트에 연결되어있는 PHPSESSID값을 넣어서 나의 계정으로 로그인되어있는 상태로 접속을 한다.
(PHPSESSID는 크롬에서 F12를 누른 뒤 Resources의 Cookies를 누르면 얻을 수 있다.)
r=requests.post("http://webhacking.kr/challenge/bonus/bonus-1/index.php?no=2%26%26ascii(substr(pw,"+str(j)+",1))="+str(i),cookies=session)
그리고 no가 2인 pw를 얻기 위해 위와 같은 주소로 접속을 한다.
여기서 %26은 and를 대신 나타내주기 위해 &&를 사용하는데 그냥 &를 써주게 되면 GET 방식에서 매개변수를 구분하는 &로 생각하기 때문에 URL ENCODING 해준 값을 써준 것이다.
j는 몇 번째 자리인지 나타내주기 위한 수이고 i는 문자의 아스키코드를 나타내주는 수이다. str()함수로 해준 이유는 하나의 주소로 만들어주기 위해 문자로 변환 해준 것이다.
str() = 매개변수를 문자열로 리턴
chr() = 아스키코드를 문자로 리턴
(참고. ord() = 문자를 아스키코드로 리턴)
두 번의 for 문을 돌다가 i가 126이란 것은 아스키코드 표를 다 돌았지만 없었다는 것이다. 혹시 몰라서 count에 +1해주고 한번 더 돌려본 뒤 그래도 아스키코드가 끝나면 문자열이 종료된 것이라 생각하고 exit()로 프로그램을 종료시킨다.
마지막에 time.sleep 해준 이유는 그냥 돌렸을 때 오히려 멈췄다가 다시 돌고 해서 더 느리다. 그래서 실행마다 약간 시간을 주어서 더 잘 돌도록 해준 것이다.
비밀번호가 총 19자리인 것을 strlen 함수로 확인했으므로 1부터 20까지(파이썬은 마지막 조건의 전 숫자까지 돌린다) 돌리면 비밀번호가 무엇인지 확인 가능하다.
해당 프로그램을 돌리면 위와 같이 비밀번호가 blindsqlinjectionkk 인 것을 알 수 있다.
해당 비밀번호를 인증해주면~?
이렇게 해결이 된다 ㅎㅎ
'Solve Problem' 카테고리의 다른 글
[webhacking.kr] 7번 문제 (0) | 2015.07.06 |
---|---|
[webhacking.kr] 49번 문제 (0) | 2015.06.29 |
[webhacking.kr] 27번 문제 (0) | 2015.06.29 |
[webhacking.kr] 18번 문제 (0) | 2015.06.29 |
프로젝트 오일로 문제풀이 (0) | 2014.11.15 |