메인은 1,2,3 링크 표시와 패스워드를 입력하는 란으로 구성되어 있습니다.

소스보기를 했을 경우 no파라미터로 숫자를 입력하면 해당페이지로 이동하는 것을 확인 할 수 있습니다.

입력란은 최대 크기가 11이네요 ~ 입력한 것은 pw의 파라미터로 index.php로 전달하는 것을 확인 할 수 있습니다.

이제 링크를 하나씩 클릭해보겠습니다.

1을 클릭하면 Apple 이라는 글자가 보입니다.

2를 클릭하면 Banana가 보이구요 ~

3을 클릭하니 힌트가 보입니다.

컬럼은 id, no 로 이루어져 있고 no3의 ID가 곧 패스워드라고 하네요 ~

그럼 no3의 ID를 구하면 되겠습니다.

기본적으로 no의 파라미터 값에 따라 페이지의 내용이 변하기 때문에 파라미터 값 조작을 통해 인젝션을 시도하면 될 것 같습니다.

먼저 파라미터 값에 0을 넣어보겠습니다.

메인 페이지로 이동하네요 ~

no 가 3의 컬럼이 id와 no 이기 때문에 no3을 기준으로 id값이 참이면 3페이지를 보여주고 아닐경우 다른 페이지를 보여주는 blind sql injection을 시도하면 될 것 같습니다.

인젝션 테스트를 위해 mysql 을 이용하여 비슷하게 구조를 짜보았습니다.

총 3개의 no, id의 컬럼이 있고 no에 해당하는 id를 페이지 상단에 보이는 메시지로 설정했습니다.

no3의 id는 모르기 때문에 임의의 값으로 설정했습니다.

위의 쿼리는 Chall9테이블에서 id를 뽑는데 id컬럼의 첫번째 한글자가 'U'와 같을 떄 no의 값을 3으로 설정하고 아닐경우 0으로 설정하여 id를 검색하는 쿼리입니다.

id컬럼에 값의 첫번째 글자가 'U'가 맞으므로 no를 3값으로 id를 검색합니다.

URL에 싱글쿼터를 대입할 경우 필터링 되기 때문에 헥사값으로 설정하여 질의해도 되는지 확인해보겠습니다.

동일한 결과가 나옵니다.

저는 파이썬의 requests 모듈을 이용하여 blind sql injection을 수행했습니다.

전체적인 소스코드의 해석을 하자면 최종적으로 대입할 패스워드의 길이는 11이기 때문에 첫번째 for문은 11번을 돌도록 설정하였고 payload부분에 알파벳을 하나씩 대입하면서 http request를 보내고 그 결과를 받아서 페이지내용에 "Secret"이라는 문자열이 있다면 no=3 일 경우에 해당하므로 참이 되고 해당 알파벳(숫자포함)를 저장하고 다음 글자를 검색하는 식으로 id컬럼의 값을 추출해내는 소스코드입니다.

결과는 아래와 같습니다.

"ALSRKSWHAQL" no=3 일때의 id컬럼의 값이 되겠습니다.

얻어낸 id를 패스워드에 입력했으나 반응이 없었습니다....

뭐가 잘 못 된걸까 생각을해서 구글링을 해보았는데.. 소문자라고 하네요. 허허

그래서 소문자로 입력했습니다.

성공했습니다.

챌린지9 클리어 !

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level11 (old)  (360) 2020.04.27
[webhacking.kr] Level10 (old)  (587) 2020.04.27
[webhacking.kr] Level8 (old)  (0) 2020.04.27
[webhacking.kr] Level7 (old)  (0) 2020.04.27
[webhacking.kr] Level6 (old)  (2) 2020.04.27

+ Recent posts