福州企业网站建站系统,东莞网站建设完整,潍坊寿光网站建设,创立一个公司需要多少钱一、XSS攻击
1.1. XSS 攻击简介
XSS#xff08;Cross-Site Scripting#xff0c;跨站脚本攻击#xff09;是一种常见的Web安全漏洞#xff0c;它允许攻击者在受害者的浏览器中执行恶意脚本。攻击者通常通过在Web应用程序中注入恶意脚本代码#xff08;如JavaScript…一、XSS攻击
1.1. XSS 攻击简介
XSSCross-Site Scripting跨站脚本攻击是一种常见的Web安全漏洞它允许攻击者在受害者的浏览器中执行恶意脚本。攻击者通常通过在Web应用程序中注入恶意脚本代码如JavaScript并在用户访问该页面时执行这些代码。
1.2. XSS 攻击类型
XSS 攻击通常分为以下三种类型
存储型 XSSStored XSS
攻击者将恶意脚本注入到服务器的数据库或其他存储位置。当用户访问含有恶意脚本的页面时脚本会在其浏览器中执行。 例如攻击者在一个评论区提交恶意代码服务器将该代码存储并返回给所有访问该页面的用户。 2. 反射型 XSSReflected XSS
攻击者将恶意代码附加到URL中诱使用户点击。服务器将这个恶意代码反射回用户的浏览器在页面加载时执行脚本。 例如攻击者通过邮件或社交媒体发送一个包含恶意脚本的链接用户点击后脚本在其浏览器中执行。 3. DOM-based XSS
在客户端浏览器端通过 JavaScript 操作 DOM文档对象模型时恶意脚本会被注入并执行。攻击者通过操控页面上的 JavaScript 来实现攻击。 这种类型的XSS攻击不依赖服务器端的输入验证而是直接通过客户端代码的漏洞来注入恶意脚本。
二、DVWA靶场-Vulnerability: Reflected Cross Site Scripting (XSS)
2.1 LOW
直接输入最简单的payload测试是否存在XSS漏洞大多数XSS漏洞可以利用该种方法检测。测试代码如下在输入框输入如下代码并提交。
scriptalert(hello xss)/script弹窗提示因此发现存在反射型XSS风险。 2.2 Medium
将等级改为Medium后再次输入以下脚本测试
scriptalert(hello xss)/script发现Medium等级应该对script进行了处理。 2. 查看Medium源代码分析具体对script进行了哪种处理 // Reflected XSS Source
// vulnerabilities/xss_r/source/medium.php
?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字符进行了过滤使用str_replace()函数将输入中的script替换成为空于是需要我们想办法绕过过滤字符。
破解
1双写绕过
scrscriptiptalert(hello xss)/script2大小写绕过
ScRiptalert(hello xss)/ScRipt提交后弹窗提示xss破解成功
2.3 High
将等级改为High后再次输入以下脚本测试
scrscriptiptalert(hello xss)/script提交后显示如下。发现High等级应该对script进行了处理。 2. 查看High源代码分析具体对script进行了哪种处理
?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;
}? 代码分析针对特殊符号均有过滤使得双写绕过以及大小写混淆绕过失效。(正则表达式中的i表示不区分大小写)。 3. 破解方法
script标签失效但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。
1采用img标签转换后的XSS payload
img src 1 onerror alert(/xss/)2使用DATA URL进行XSS:
object datadata:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4/object其中的PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4就等同于scriptalert(xss)/script
三、Vulnerability: Stored Cross Site Scripting (XSS)
3.1 Low
在界面输入经典payload发现name框对输入长度有限制因此将payload转而输入message框发现可以成功注入。
scriptalert(hello xss)/script手动更改Name输入框的长度修改maxlength 100然后在name框输入经典payload发现对长度已经没有限制
scriptalert(hello xss)/script提交后XSS攻击成功
3.2 Medium
尝试使用经典的方法发现之前经典的payload方法失败 查看源码
?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();
}? 对源码分析
strip_tags()函数剥去字符串中的HTML、XML以及PHP的标签但允许使用标签。addslashes()函数返回在预定义字符单引号、双引号、反斜杠、NULL之前添加反斜杠的字符串。message参数使用了htmlspecialchars函数进行编码无法再通过message参数注入XSS代码但是对于name参数只是简单过滤了
考虑对name输入框进行xss注入
1首先需要手动更改Name输入框的长度修改maxlength 100
2绕过方式类似于反射型XSS
双写绕过
scrscriptiptalert(hello xss)/script大小写绕过
ScRiptalert(hello xss)/ScRipt使用非script标签的xss payload。
img src 1 onerror alert(/xss/)3.3 High
High等级的name输入框使用正则表达式过滤了script标签但是却忽略了img、iframe等其它危险的标签因此name参数依旧存在存储型XSS。 1手动更改Name输入框的长度修改maxlength 100
2使用非script标签的xss payload注入注入成功。
img src 1 onerror alert(/xss/)四、Vulnerability: DOM Based Cross Site Scripting (XSS)
4.1 Low
观察主页面可以看到页面的功能是让我们选择默认的语言但是这里又没有对default参数没有进行任何的过滤。 因此我们在这里构造XSS代码在default参数后面写入脚本构造访问连接
?defaultscriptalert(hello xss)/script访问后弹出XSS攻击成功
4.2 Medium
过滤了script那么我们可以用图片插入语句法
?defaultimg src 1 onerror alert(dom)此时没有出现任何的变化界面没有反应。这个时候查看网页的源代码
可以看到我们输入的脚本语句被插入进了value值中没有插入到option标签的值中所以我们语句当中的标签就没有起到作用因此不会弹窗。
我们改进我们的语句尝试将前面的标签闭合注入成功
?default/selectimg src 1 onerror alert(dom)我们还可以直接在English值的后面直接进行拼接页面也能直接出现弹窗
?defaultEnglish/selectimg src 1 onerror alert(dom)4.3 High级别
字符 # 绕过服务端过滤
url中有一个字符为#该字符后的数据不会发送到服务器端#后面的内容是对浏览器的操作不会发送到http请求当中去从而绕过服务端过滤。因此可以这样构造连接
?defaultEnglish#scriptalert(high!!!)/script点击提交刷新页面后出现弹窗
五、参考资料
DOM-based XSS参考