开发app的网站,dede模板蓝色大气简洁企业网站模板下载,制作一个手机app需要多少钱,安徽论坛网站建设XSS(DOM)
XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击#xff0c;攻击者在网页中插入由JavaScript编写的恶意代码#xff0c;当用户浏览被嵌入恶意代码的网页时#xff0c;恶意代码将会在用户的浏览器上执行。
XSS攻击可分为三种#xff1a;分别为反射型(Reflected…XSS(DOM)
XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击攻击者在网页中插入由JavaScript编写的恶意代码当用户浏览被嵌入恶意代码的网页时恶意代码将会在用户的浏览器上执行。
XSS攻击可分为三种分别为反射型(Reflected)存储型(Stored)和DOM型。
反射型xss只是简单地把用户输入的数据反射给浏览器简单来说黑客往往需要引诱用户点击一个恶意链接才能攻击成功。经后端不经数据库存储型XSS将用户输入的数据存储在服务器端。用户访问了带有xss得页面代码后产生安全问题。(经后端和数据库)DOM XSS通过修改页面的DOM节点形成的XSS。客户端的脚本程序可以通过DOM动态地检查和修改页面内容它不依赖于提交数据到服务器端而从客户端获得DOM中的数据在本地执行如果DOM中的数据没有经过严格确认就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。(不经过后端是基于文档对象模型的一种漏洞是通过url传入参数去控制触发的)XSS危害
1.挂马
2.盗取用户Cookie。
3.DOS拒绝服务客户端浏览器。
4.钓鱼攻击高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题LOW级别
?php# No protections, anything goes?发现并没有做任何过滤
点击了select按钮后地址栏链接发生变化 构造xss语句看到出现弹窗代码执行成功说明存在xss漏洞。
scriptalert(/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;}
}?stripos() 函数查找字符串在另一字符串中第一次出现的位置。此处过滤了script
尝试使用img标签
img src1 οnerrοralert(xss)发现页面没有变化
查看页面代码发现我们构造的语句已经被插入到了value当中不能成功执行的原因是select标签中只允许内嵌option标签而option标签是不能嵌套我们构造的img标签的因此我们需要先将前面的select标签和option标签都闭合后才能使用img标签. /select/optionimg src1 onerroralert(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);/scriptXSS(Reflect)反射型 ?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;
}?
LOW级别
发现没有什么防御直接scriptalert(xss);/script Medium级别
?phpheader (X-XSS-Protection: 0);// Is there any input?
if( array_key_exists( name, $_GET ) $_GET[ name ] ! NULL ) {// Get input$name str_replace( script, , $_GET[ name ] );// Feedback for end userecho preHello {$name}/pre;
}
? 发现源码过滤了script,可以通过大写字母双写输入其他可执行弹窗的标签等方法来实现攻击.
如果用scriptalert(xss)/script会直接显示alert(‘xss’)
//大写
Scriptalert(xss)/script//双写
scscriptriptalert(xss)/scriptimg src1 οnerrοralert(xss);High级别
?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 ] );// Feedback for end userecho preHello {$name}/pre;
}
发现preg_replace 函数是执行一个正则表达式的搜索和替换直接将所有的script无论大小写都进行了过滤但并未对其他标签进行限制所以我们继续使用img等标签来进xss利用。
img src1 onerroralert(XSS)XSS(Stored)存储型
LOW级别
?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();
}? 查看源代码发现使用mysqli_real_escape_string函数来对string中的特殊符号进行转义处理但并未对我们输入的Name和Message进行xss的过滤。
因此我们只需要直接输入JS代码进行攻击即可得到弹窗攻击成功。
在name输入框中输入scriptalert(xss)/script Medium级别 ?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();
}?
查看源代码发现将Message所有可能xss攻击的标签都进行了转义或过滤但对Name仅仅限制了script的标签因此我们依旧可以在Name中使用大写、双写、使用其他标签等方法来进行注入。
Scriptalert(1)/script修改最大长度 Hign级别 ?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();
}?查看代码发现在Medium的基础上对Name的输入进行了
img src1 onerroralert(2);