@23번문제
블라인드 인젝션으로 Suninatas에 있는 웹카테고리의 마지막 문제이다.
난이도가 있었지만, 보통의 블라인드 인젝션이었다.
MsSQL DB라는 것을 감안해야하고 곳곳의 어려운부분이 있기는 하다.




(23번 문제)



(문제 화면)



문제화면을 보니 필터링하고 있는 키워드 중에 admin 단어가 보인다.

블라인드 인젝션으로 이번 문제는 admin의 비밀번호를 찾는 것이 목적인데,
admin을 필터링 했다니.

일단 사용할 수 있는 키워드와 주석, numeric/string인지 여부를 확인하기 위해
인젝션을 시도하였다.
그 중 성공한 쿼리를 통해서 알 수 있는 내용은 다음과 같았다.



(성공 쿼리)



id 부분은 string으로 들어가고 있고 or, =, -- 기호를 사용할 수 있다.

또 이 문제에서 조금 힘들었던 부분이 길이제한인데..
예를들어 다음과 같이 길이가 조금 길다 싶으면 No hack이라고 떴다.
처음에는 어떤 단어를 필터링 하고 있는 줄 알았는데
키워드가 아닌 길이에서 필터링을 하고 있었다.



(필터링 된 모습)



최대 몇글자까지인지 확인해볼 필요가 있다.




(길이 확인)



최대 길이를 확인해보니 30 글자였고
30글자를 넘어가면 No hack이라고 떴다.

우리는 30글자 이내의 쿼리문을 만들어야한다.

그리고 또 우리가 해야할 일 중 하나는
admin의 행을 select할 수 있도록 해야하는데
처음에는 id에서 guest가 아닌 행을 찾도록해서 admin 계정의 행을 select 하는데 성공했다.




(admin select 성공)



하지만 이렇게 할 경우 블라인드 인젝션을 하려면 뒤에 긴 쿼리가 붙어야하는데
한계가 있었다..
즉, admin을 우회해서 입력할 수 있어야했다.

구글에 문자열 필터링을 치니 가장 먼저 나온것이
쿼터로 끊어주는 것이었다.
ex 'admin = 'adm'+'in'

이런 방법이 적용되는지 확인해 보았다.



(인젝션)



admin 행을 select 하는데 성공했다. :)
이제 블라인드 인젝션을 해야하는데 평소와 같이 나는 이렇게 입력했다.



(인젝션)



결과는 당연히 False였다. MsSQL에서는 mid함수를 지원하지 않는다...
그렇기에 내게 남은건 left 함수밖에 없었는데(substring을 필터링하고있어서...)
left를 쓰면 비밀번호 길이가 12글자인데(비밀번호 길이를 구하는 과정은 사진찍지 못했다.!)
30글자의 쿼리를 넘지않을까 걱정이 들었다.
하지만 우리에겐 right함수도 있으므로 막히면 right로 교체해서 반씩 알아내도 되겠다는 생각이 들었다.
첫글자는 파이썬으로 V였다.



(인젝션)



이런식으로 파이썬 코드를 작성하여 한글자씩 찾았다.
(12글자라서 금방 끝났다.)




(작성 코드)





(결과)



첫번째 글자는 V였고
두번째 쿼리는 admin'+'n'and left(pw,2)='V + chr(i)'-- 을 이용하여 찾았다.




(2번째 글자)




(결과)



결과는 3이었고
이제부터 No hack이 뜨기 시작했다.
그리하여 쿼리문을
'or left(pw,3)='V3 + chr(i)'-- 로 바꾸어서 찾았다.



(3번째 글자)




(결과)



이런 식으로 한글자씩 찾을 수 있었고

마지막에 admin으로 로그인해본 결과 비밀번호가 일치했다.



(문제 해결)



이제 이 비밀번호를 인증키에 입력해주면 끝이다. :)


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 22  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 8  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23

+ Recent posts