웹 보안 취약점 중 가장 기본이면서도 위험한 공격 유형인 HTML Injection과 SQL Injection에 대해, bWAPP 환경에서 실습을 진행하였다.
특히 POST 방식에서는 Burp Suite를 활용하여 클라이언트와 서버 간의 데이터를 가로채고 분석하였으며, 일부 기능이 정상적으로 작동하지 않는 경우에는 PHP 코드를 직접 수정하여 취약점을 구현하고 공격을 재현하였다.
실습 환경
항목 | 내용 |
가상 머신 | VMware Workstation |
실습 도구 | BeeBox(bWAPP 내장), Burp Suite |
접속 URL | http://[IP 주소]/bWAPP |
계정 정보 | ID : bee, PW: bug |
브라우저 | Firefox 또는 Chrome |
1. HTML Injection (Get)
개념 설명
HTML Injection은 사용자 입력값이 웹 페이지에 그대로 반영되어 HTML 구조나 콘텐츠를 변경할 수 있는 공격 기법이다.
주로 Reflected XSS 형태로 나타나며, 경고창 출력이나 UI 변조에 사용된다.
실습 내용
1. bWAPP 로그인 => Bug 목록에서 HTML Injection (Reflected - GET)을 선택한다.
2. URL 끝에 스크립트를 삽입하고 결과를 확인한다.
<script>alert("Injected!")</script> 같은 script를 삽입하여 alert 창이 뜨는 걸 확인해도 된다.
2. HTML Injection (POST 방식)
개념 설명
POST 방식 HTML Injection은 사용자가 입력한 데이터가 서버를 거쳐 HTML 페이지에 그대로 반영될 때 발생한다. GET 방식과 다르게, URL이 아닌 본문에서 전송되며, Burp Suite를 통해 쉽게 가로채서 분석 가능하다.
실습 내용
1. Burp Suite를 실행하고 Proxy 탭에서 브라우저를 열어준다.
2. bWAPP에서 HTML Injection (Reflected - POST) 선택한다.
3. proxy 탭에서 Intercept를 on으로 바꾸고 아래 사진과 같이 작성한 후 Go를 누른다.
4. Burp Suite에서 Request를 가로채서 가져온다. 내용을 읽어보면 간단하게 보안이 되어있는 것을 볼 수 있다.
5. 그대로 복사해서 들고 온다.
6. 이제 testtest 대신에 funday를 넣어서 되는지 확인해 보겠다.
==> 잘되는 것을 볼 수 있다.
3. SQL Injection (GET 방식)
개념 설명
SQL Injection은 사용자 입력값을 SQL 쿼리에 그대로 삽입해 쿼리의 논리를 조작하는 공격 기법이다.
GET 방식에서는 URL 파라미터를 통해 공격이 진행된다.
실습 내용
1. bWAPP에서 SQL Injection (GET/Search)를 선택한다.
2. 검색 창에 아래와 같은 쿼리를 입력한다.
' or 1=1 --
3. 내부적으로 실행되는 SQL :
SELECT * FROM movies WHERE title LIKE '%' or 1=1 --%'
4. 결과적으로 모든 영화 리스트가 출력된다.
4. SQL Injection (POST 방식 + Burp Suite)
개념 설명
POST 방식 SQL Injection은 로그인, 검색 등 POST 요청을 통해 서버로 전달되는 데이터를 조작하여 공격하는 기법이다.
이 경우에도 Burp Suite를 활용하면 요청 내용을 확인하고 수정할 수 있다.
실습 내용
1. bWAPP에서 SQL Injection (POST/Search)를 선택한다.
2. 일반적인 값 입력하고 로그인을 시도한다.
3. Burp Suite에서 요청을 가로챈다.
login=' or 1=1 -- &password=아무거나
4. forward 해주면 로그인이 성공한다. (인증 우회)
5. Blind SQL Injection
개념 설명
Blind SQL Injection은 결과가 브라우저에 직접 보이지 않는 경우, 조건문을 통해 참/거짓 여부를 판단해 정보를 추출하는 방식이다.
실습 내용
1. 1' and 1=1 -- => 정상 출력
2. 1' and 1=2 -- => 결과 없음
=> 조건문에 따른 참/거짓 여부로 판단 가능하다.
6. 코드 수정 필요 사항
실습 중 일부 SQL Injection이 작동하지 않아 PHP 코드를 수정하였다.
수정 전
$link = mysql_connect($server, $username, $password);
$database = mysql_select_db($database, $link);
수정 후
$link = mysqli_connect($server, $username, $password);
$database = mysqli_select_db($link, $database);
※ mysql_* 함수는 PHP 7부터 제거되어 mysqli_*로 변경이 필요하다.
7. 주요 PHP 취약 코드 예시
if(isset($_GET["title"]))
{
$title = $_GET["title"];
$sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title) . "%'";
$recordset = mysqli_query($link, $sql);
}
위의 코드처럼 사용자 입력값 $title이 검증 없이 쿼리에 포함될 경우 SQL Injection이 발생한다.
8. 느낀 점
- 입력값 검증과 필터링이 없을 경우 다양한 인젝션 공격에 노출될 수 있음을 체감하였다.
- Burp Suite를 통해 클라이언트와 서버 간에 데이터 흐름을 이해하고 공격에 활용할 수 있었다.
- 실습이 정상적으로 작동하지 않을 때 직접 코드를 수정하면서 구조와 취약점 발생 원리를 더 잘 이해할 수 있었다.
이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.
모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.
'웹 해킹 & 보안' 카테고리의 다른 글
[웹 모의해킹] Brute Force 2 - 무차별 대입 공격 실습(Burp Suite & Python) (1) | 2025.05.29 |
---|---|
[웹 모의해킹] Brute Force1 - 무차별 대입 공격 실습 (Hydra) (0) | 2025.05.29 |
다크웹 만들기 실습 (Tor와 SocialPhish 이용) (4) | 2025.05.14 |
무차별 대입 공격 (브루트포스 어택) 실습 (2) | 2025.05.14 |
[2편] 웹 모의해킹 Tool (2) | 2025.05.13 |