ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Webhacking.kr :: old-59번
    SECURITY/Webhacking 2021. 2. 16. 15:10

    JOIN κ³Ό LOGIN 이 μžˆλŠ”λ°, 

    JOIN 에 λŒ€ν•œ μ½”λ“œλŠ”

    이고, LOGIN 에 λŒ€ν•œ μ½”λ“œλŠ” 

     

    이닀. 

    tavle chall59 μ—λŠ” id, phone, lv 의 3 가지 column 이 μ‘΄μž¬ν•˜λŠ” κ²ƒμœΌλ‘œ μΆ”μ •λœλ‹€.

    κ·Έλž˜μ„œ LOGIN ν•  λ•Œ, lv 의 값이 admin 이면 solve 이고, μ•„λ‹ˆλ©΄ 별 λ°˜μ‘ μ—†λŠ” 것이닀. 

     

    그런데 JOIN ν•  λ•Œ lv 의 값이 기본적으둜 guest 이닀.

    mysqli_query($db,"insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'guest')");

     

    그리고 phone 은 "" 둜 κ°μ‹Έμ Έμžˆμ§€ μ•ŠμœΌλ‹ˆ, μ •μˆ˜ν˜•μž„μ„ μ•Œ 수 μžˆλ‹€.

    κ·Έλž˜μ„œ join 에 test , 1 을 ν•˜κ³  같은 μ •λ³΄λ‘œ λ‘œκ·ΈμΈμ„ ν•˜λ‹ˆ, μ•„λž˜μ™€ 같이 λ–³λ‹€.

     

     

    μ—­μ‹œ guest λ₯Ό 기본으둜 μ„€μ •ν•΄μ€€λ‹€.

     

    이걸 SQL Ingection 을 μ΄μš©ν•΄μ„œ ν’€μ–΄μ•Ό ν•œλ‹€.

    κ·ΈλŸ¬λ‹ˆ, id μ—λŠ” 아무 값을 λ„£μ–΄μ£Όκ³ , 뒀에 guest λŠ” SQL 의 ν•œ 쀄 라인 주석을 μ΄μš©ν•œλ‹€.

    SQL μ—μ„œ ν•œ 쀄 라인 주석은 '--' 을 μ‚¬μš©ν•œλ‹€.

    즉, --'guest' 라고 ν•œλ‹€λ©΄ -- λ’€μ˜ λ‚΄μš©μ€ 주석 처리 λœλ‹€λŠ” 것이닀.

     

    κ·Έλž˜μ„œ, 'test', 1, 1-- λ₯Ό λ„£μ–΄μ€€λ‹€λ©΄ vl 을 1 둜 해석할 것이닀.

     

    id 에 myPhone', 1, 1-- 을 λ„£λŠ”λ‹€ν•΄λ„ id λŠ” κ·Έ 자체λ₯Ό μΈμ‹ν•˜κΈ° λ•Œλ¬Έμ— μ‹€νŒ¨ν•œλ‹€.

    κ·Έλ ‡λ‹€λ©΄ phone 정보에 λ„£μ–΄μ•Ό ν•˜λŠ”λ°,

    λ‚˜λŠ” id 에 myPhone 을, phone μ—λŠ” 1, 1)-- 을 λ„£μ–΄μ£Όμ—ˆλ‹€.

     

    μ£Όμ˜ν•  점은, 주석 뒀에 곡백을 넣어주어야지 주석 μ²˜λ¦¬κ°€ μ„±κ³΅μ μœΌλ‘œ 되고, (-- )

    ) 으둜 쿼리λ₯Ό 닫아야지 정상적인 쿼리가 λ„˜μ–΄κ°ˆ 것이닀.

     

    즉, μ•„λž˜μ™€ 같이 ν•΄μ„λ˜λ„λ‘ λ§Œλ“  것이닀.

    insert into chall59 values('myPhone', 1, 1)-- ,'guest')

    이제 lv κ°€ 1 둜 ν•΄μ„λ˜κ²Œλ” λ§Œλ“œλŠ” 데 μ„±κ³΅ν–ˆλ‹€.

     

    λ‹€μŒ λ‹¨κ³„λ‘œλŠ” lv κ°€ admin 으둜 ν•΄μ„ν•˜κ²Œ λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”λ°, 

    phone 에 λŒ€ν•œ 필터링이 λͺ‡ 가지 μžˆλ‹€.

    if(strlen($_POST['phone'])>=20) exit("Access Denied");
        if(preg_match("/admin/i",$_POST['id'])) exit("Access Denied");
        if(preg_match("/admin|0x|#|hex|char|ascii|ord|select/i",$_POST['phone'])) exit("Access Denied");

     

    "Access Denied" κ°€ λœ¨λŠ” 경우

    1. phone 이 20μžκ°€ λ„˜μ–΄κ°€λŠ” 경우

    2. id 에 admin 이 ν¬ν•¨λ˜μ–΄ μžˆλŠ” 경우

    3. phone 에 admin/0x/#/hex/char/ascii/ord/select κ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” 경우

     

    근본적으둜 admin 을 λ°”λ‘œ μž…λ ₯ν•˜μ§€ λͺ»ν•˜λ‹ˆ, SQL λ‚΄μž₯ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

    SQL injection μ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” SQL λ‚΄μž₯ ν•¨μˆ˜λŠ” bin, hex 인데 이것듀을 λ§‰μ•„λ’€μœΌλ‹ˆ,

    μœ„μ— 필터링에 걸리지 μ•ŠλŠ” ν•¨μˆ˜λ₯Ό μ°Ύμ•„μ•Ό ν•œλ‹€.

     

    λ˜ν•œ 20자 μ œν•œμ΄ μžˆμœΌλ‹ˆ replace 와 같은건 μ‚¬μš©ν•˜κΈ° νž˜λ“€κ³ , μ­‰ μ‚΄νŽ΄λ³΄λ‹€ λ³΄λ‹ˆ μ λ‹Ήν•œ ν•¨μˆ˜λ₯Ό λ°œκ²¬ν–ˆλ‹€.

    (μ°Έμ‘° - featur.tistory.com/136)

     

    REVERSE(str) : str 의 μˆœμ„œλ₯Ό 거꾸둜 λ§Œλ“€μ–΄ λ°˜ν™˜ν•΄μ€€λ‹€.

    ex. REVERSE("hack") 은 "kcah" 을 λ°˜ν™˜

     

    λ”°λΌμ„œ, REVERSE("nimda") 을 λ„£μ–΄μ£Όλ©΄, λ‚΄κ°€ μ›ν•˜λŠ” 것을 얻을 수 μžˆμ„ 것이닀.

     

    라고 μƒκ°ν–ˆλŠ”λ°, 1,REVERSE("nimda"))-- 을 μž…λ ₯ν•΄μ£Όλ©΄ 20μžκ°€ λ„˜μ–΄κ°€μ„œ Access Denied κ°€ λœ¬λ‹€ γ…Žγ…Ž

     

    쀄일 수 μžˆλŠ” 뢀뢄은 nimda 인데,, id λ₯Ό nimda 둜 λ„£κ³  μ•ˆμ— id λ₯Ό μ£ΌλŠ” 방법이 μžˆκ² λ‹€.

     

    λ”°λΌμ„œ, λ‹€μŒκ³Ό 같이 μž…λ ₯ν•˜λŠ” 것이닀.

     

    id: nimda / phone: 1, REVERSE(id))--  

     

    κ²°κ³ΌλŠ” 성곡 !

     

    'SECURITY > Webhacking' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    Burp Suite μ„€μΉ˜ 및 μ‚¬μš© - Windows 64 bit  (0) 2021.02.17
    Webhacking.kr :: old-12번  (0) 2021.02.16
    Webhacking.kr :: old-36번  (0) 2021.02.16
    Webhacking.kr :: old-20번  (0) 2021.02.16
    Webhacking.kr :: old-23번  (0) 2021.02.15

    λŒ“κΈ€

Designed by Tistory.