2013-06-23 4 views
1

브라우저를 시뮬레이트하고 XSS를 시뮬레이트하려했습니다. 누군가 나를 추천 PhantomJS, 그러나, 나는 간단한 JS 명령을 실행하는 데 몇 가지 문제가있었습니다.XSS 공격 시뮬레이션

나는 간단한 PHP 웹 사이트를 만들었습니다

내 브라우저에서 실행
<form id = "myform" action="xss.php" method="POST"> 
<input id="x" name='x' type="text" /> 
<input type="submit" value="ok" /> 
</form> 
<?php 
    echo $_POST['x']; 
    $fp = fopen("logs.txt", "a"); 
    fwrite($fp, $_POST['x']); 
    fclose($fp); 
?> 
<script>document.getElementById('x').value='payload'; 
document.getElementById('myform').submit();</script> 

는 양식이 전송됩니다 (그 결과 logs.txt에 자사 넣어하지만,이 xss.php을. 문제 PhantomJS를 통해 해당 웹 사이트를 실행하는 동안

run.js :

var page = require('webpage').create(); 
var url = 'http://127.0.0.1/xss/xss.php'; 
page.open(url, function (status) { 
    if (status !== 'success') console.log('Network error'); 
    else 
    { 
     var p = page.evaluate(function() { 
     }); 
     console.log('DONE'); 

    } 
    phantom.exit(); 
}); 

내가 명령 줄을 통해 실행을 : ./phantomjs run.js 지금까지 내가 이것을 이해 스크립트는 브라우저 동작을 시뮬레이션하고 위의 양식을 보내야합니다. 그러나 logs.txt에는 아무 것도 없으므로 phantomj가 해당 스크립트를 실행하지 않았습니다. 내가 뭘 잘못했는지 말해 줄래?

+0

궁극적 인 목적은 보안을위한 것이지만 귀하의 질문은 보안에 관한 것이 아니라 웹 프로그래밍에 관한 것입니다. 다른 포럼에서 더 좋은 답변을 얻을 수 있습니다. 보안 관련 문제 (예 : 시뮬레이션 개선)가있을 경우 도움을 드릴 수 있습니다. – schroeder

답변

0

스크립트는 브라우저를 영원한 루프에 넣고 xss.php 페이지를 다시로드합니다. 이렇게하면 자바 스크립트 실행을 중단 할 때까지 'payload'라는 단어가 logs.txt에 삽입됩니다. 당신이 양식 submition을 시뮬레이션하려면

, 당신은 명시 적으로 PHP 스크립트에 POST 데이터를 전송해야합니다

var page = require('webpage').create(); 
var url = 'http://127.0.0.1/xss/xss.php'; 
var data = 'x=phantom'; 
page.open(url, 'post', data, function (status) { 
    if (status !== 'success') console.log('Network error'); 
    else 
    { 
     console.log('DONE'); 
    } 
    phantom.exit(); 
}); 

이 logs.txt하는 단어 '팬텀'을 추가, POST 데이터가 xss.php을 공급합니다. 그러나 브라우저와 달리 PhantomJS는 영원한 루프에 들어 가지 않고 한 번만 요청을 보냅니다.