跨站脚本攻击xss-labs(1-20)靶机练手

目录

一、跨站脚本攻击(XSS)

1.1 漏洞简介

1.2:类型

1.3 XSS危害

1.4XSS防御规则

二、环境搭建

三、xsst通关记录

Level 1:文本解析为 HTML

Level 2:htmlspecialchars;input 标签 value 注入

定义和用法

字符过滤绕过

Level 3:

level 4:双引号闭合+添加事件

level 5:新建标签

level 6:大小写绕过

level 7 双写绕过

level 8 编码绕过

level 9 检测关键字

level 10 隐藏信息

level 11 Referer信息

level 12 user-agent信息

level 13 cookie信息

level 14

level 15(ng-include包含)

level 16 空格实体转义 

level-17(参数拼接)

level-18(参数拼接)

level-19(Flash XSS)

level-20(Flash XSS)

四.总结:

几种注入方式

on事件属于点击触发事件

 收集信息的方法

xss常见注入点

参考


一、跨站脚本攻击(XSS)

        1.1 漏洞简介


        XSS又叫CSS(Cross Site Script)跨站脚本攻击,是指恶意攻击者往web页面中插入恶意代码,当用户浏览该网页时,嵌入其中的恶意代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击。
        XSS最大的特点就是能注入恶意的HTML/JavaScript代码到用户浏览的网页上,从而达到劫持用户会话的目的。由于HTML代码和客户端JavaScript脚本能在受害者主机上的浏览器任意执行,这样等同于完全控制了Web客户端的逻辑,在这个基础上,黑客或攻击者可以轻易地发动各种各样的攻击。

        xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

常见的输出函数有: echo printf print print_r sprintf die var-dump var_export。

  1.2:类型

从攻击代码的工作方式可以分为三个类型:

(1)持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。

(2)非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。

(3)DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。

基于DOM的XSS漏洞是指受害者端的网页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。

1.3 XSS危害

   (1)盗取管理员cookie

        窃取用户的cookie非法登录,使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。

(2)网站挂马。

        先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。

(3)发送广告或者垃圾信息

        攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

1.4XSS防御规则

  1. – 不要在允许位置插入不可信数据
  2. – 在向HTML元素内容插入不可信数据前对HTML解码
  3. – 在向HTML常见属性插入不可信数据前进行属性解码
  4. – 在向HTML JavaScript Data Values插入不可信数据前,进行JavaScript解码
  5. – 在向HTML 样式属性值插入不可信数据前,进行CSS解码
  6. - 在向HTML URL属性插入不可信数据前,进行URL解码

二、环境搭建

xss-labsxss-labsxss-labs 是一套基于 PHP 的 XSS 靶场,以闯关的形式让我们体验各种 XSS 漏洞利用方式。虽然已经是很多年前的了,但其中基本的 XSS 漏洞依然很有意义。

一共有 20 关,每一关的目标都是实现弹窗(alert(1)),如果成功就会自动进入下一关。

克隆这个代码仓库的代码,其中是 xss-labs 的 PHP 源文件。只要放在 PHP 环境下即可.本机使用phpstudy_pro,将将文件放在phpstudy_pro下的www文件里边就欧克了。

部署完成后,访问 index.php,就可以看到入口了:

​ 

三、xsst通关记录

Level 1:文本解析为 HTML

URL 为 level1.php?name=test 时,传入的参数是 test,显示的是「欢迎用户 test」。显然,这个页面会将我们传入的名字显示出来。

我们打开开发者工具(F12)

这里name=test,放到了<h2>这个标签里,前端是可以执行JS代码的,我们执行如下代码

http://127.0.0.1/xsslabs/level1.php?name=<script>alert(1)</script>

Level 2:htmlspecialchars;input 标签 value 注入

定义和用法

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体编码。

预定义的字符是:

  • & (和号)成为 &
  • " (双引号)成为 "
  • ' (单引号)成为 '
  • < (小于)成为 <
  • > (大于)成为 >

这关多了一个文本框。如果依然尝试传入 <script>alert(1)</script>,会发现在 h2 元素中符号被转义了(查看网页源代码能看到),<h2>&it;script&gtalert(1)&lt;/script;&gt</h2>,所以不会被解析成 HTML。

页面上能够正常显示是htmlspecialchars()给转换为HTML实体编码后HTML又给解析为正常显示。

然而,可以看到后面的文本框 input 元素,其 value 值并没有被转义。

<input name=keyword value="<script>alert(1)</script>">

既然如此,我们可以闭合 value 的内容的后引号,然后闭合这个 input 标签,接下来再加入我们想要注入的 <script>alert(1);</script>。只需要在其之前加上 "> 即可。

Level 3:字符过滤绕过

这一关的代码好像和第二关有点像,我们输入上一个看一下行不行

这里没有逃逸出来,这一招好像不管用了?

这是因为用的单引号闭合🤣既然单引号不会被转义,我们可以闭合 value 这个字符串。

但是,<> 都会被转义,似乎不能闭合这个标签。有什么办法能够不用 <script> 标签来注入 JavaScript 代码呢?答案是使用触发器,比如 onfocus 或者 onclick

可以看到这样就逃逸出来了,然后我们随便找个js代码就可以通关了。

level 4:双引号闭合+添加事件

第一处<>被实体转码
第二处地方<>被替换成空 

同样使用上一关方法:通过<input>标签的一些特殊事件来执行js代码
payload " onclick=alert(12) //
左边的">去闭合原先的" 

level 5:新建标签

虽然input被闭合了,但是script和on被过滤掉 

现在on和script都被过滤掉了,那就用一个不含on和script的标签来执行

level 6:大小写绕过

这里和上一关一样,script被过滤,

虽然input被闭合了,但是被关键字过滤就很难受;不行了那就试一下大小写

很明显成功了。。。换一个试一下也是可以的

level 7 双写绕过

1.<script>alert(‘xss’)</script>
2."οnfοcus=javascript:alert('xss')"
3.?keyword="> <a href=javascript:alert('xss') > xss</a> //
4. " οnclick=alert(12) //

尝试之后都是被过滤,就很难受,大小写在这也不灵了,那还有什么办法?

他过滤一个script,那我写一个这个呢?oonnclick,试一下

level 8 编码绕过

可以看到这里有被过滤,那就想办法绕过就行了么

之前使用过的方法都试了一遍还是不行,只能另找思路:

这里将javascript:alert(1)转换为实体编码试一下

这是转换之后的编码&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

可以看到当添加了友情链接之后a标签里的连接直接转换成我们想要的东西,这就欧克了。

level 9 检测关键字

可以看到不管你写啥都是链接不合法,这是咋回事?那我写个合法的:比如https://baidu.com,这合适的吧;

还不合法,那我试一下http 

这一下就合适了,看来是要加http呀,那我加上再看

又被过滤,那我转一下码(&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;http://)

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)//http://
备注:后边的//注释一定要加,不然它就驴唇不对马嘴,自然浏览器也懵逼,所以要把后边的网址注释掉。

level 10 隐藏信息

我们看到第十关没有输入框了所以我们在url栏里输入​

没有用;而且下边我们看不到有传进来值,我猜测应该是被隐藏起来了,但是有3个input,试着给这三个分别传一个值看一下

?t_link=qqqq&t_history=wwwww&t_sort=eeee

这里传进来了,那好像就有思路了

我的<>又被过滤了,那就换一个试一下

这里好像是好了,但是我的onclick没有显示,那没地方点啊,所以给后边再加点东西

欧克,下一关

level 11 Referer信息

和上一关有点像,先试一下之前的办法

?t_link=qqq&t_history=www&t_sort=eee&t_ref=rrr 

发现t_sort传进来值了,那不就简单了

这双引号没有闭合,没能逃逸出来,这个办法不行。那就在找找,回过头来仔细一看,刚开始咱们的t_ref里边是有值的啊,而且是咱们上一关的url,

那这个咱们能利用吗?猜测ref又可能是http头中的referer属性

抓包尝试修改一下

传个值试一下 

这里将值真的传进来了,那就试一下这个

referer:111" onclick ='javascript:alert(1)'// type=button

欧克了就

level 12 user-agent信息

到了t_ua这样一个标签,并且其中的value属性的值怎么看起来那么

像抓取数据包中User-Agent头的值?!

抓包尝试修改

发现双引号没有被过滤,我们尝试闭合引号构造事件弹窗

" onclick ='javascript:alert(1)'// type=button

level 13 cookie信息

还是四个隐藏框
t_cook可能是cookie
抓包仍然是相同的方式

发现双引号没有被过滤,我们尝试闭合引号构造事件弹窗

level 14

自动跳转到那个网址,但是失效了

level-14参考文章

level 15(ng-include包含)

后台源码:

window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level16.php?keyword=test"; 
}
</script>
<title>欢迎来到level15</title>
</head>
<h1 align=center>欢迎来到第15关,自己想个办法走出去吧!</h1>
<p align=center><img src=level15.png></p>
<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

观察源码发现短短的几行,实体转义了src的值

使用了ng-include这个表达式的意思是当HTML代码过于复杂时,可以将部分代码打包成独立文件,在使用ng-include来引用这个独立的HTML文件。

ng-include指令一般用于包含外部HTML文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一域名下,也就是要调用同一域名下的其他网页。因为默认情况下,包含的文件需要包含在同一个域名下。很有可能这个指令就是突破口,我们看看源代码,果然有ng-include,并且对其输入做了过滤,所以我们可以包含一个有漏洞的页面

定义和用法

ng-include 指令用于包含外部的 HTML 文件。

包含的内容将作为指定元素的子节点。

ng-include 属性的值可以是一个表达式,返回一个文件名。

默认情况下,包含的文件需要包含在同一个域名下。

引用文件名要加单引号 即 ng-include=" 'index.html' "

所以可构造以下payload

去包含其他关卡的漏洞:
http://127.0.0.1/xsslabs/level15/.php?src='level1.php?name=<img src=1 οnerrοr=javascript:alert(1)>'

level 16 空格实体转义 

源代码:

<title>欢迎来到level16</title>
</head>
<body>
<h1 align=center>欢迎来到level16</h1>
<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace("    ","&nbsp;",$str4);
echo "<center>".$str5."</center>";
?>
<center><img src=level16.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";
?>

通过源码发现,过滤了script,/,空格等(替换空格,script,/,再次替换空格)在html中是可以将%0a和%0d作为空格使用的

因为尖括号没被过滤掉,所以我们就用<a>标签,因此我们构造语句

可对script进行个拆分

payload:
/level16.php?keyword=<a%0dhref='javas%0acript:alert(1)'>xss

level-17(参数拼接)

查看源代码:

<title>欢迎来到level17</title>
</head>
<body>
<h1 align=center>欢迎来到level17</h1>
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
<h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2>
</body>
</html>

通过代码发现,本关卡有两个参数:arg01、arg02,当我们发送的时候,发现他们是会互相拼接起来的,那么我们就容易想到这里会不会就是突破口,发现这两个参数是在embed上,embed标签定义嵌入的内容,并且做了尖括号过滤,那么我们可以加入一个属性进去,生成恶意代码。(发现其两个变量使用=符号拼接的形式被加入到<embed>标签中,该标签用于一些插件如flash等的插入,那这就是一个突破口)

HTML embed src 属性 | 菜鸟教程

输入点在url中,过滤了尖括号和双引号,用on事件触发。

常规加尖括号的语句会被转为html实体字符,那就只有用事件触发来写,而且事件触发刚好是用等号来连接。

使用on事件,但是没有反应,后来发现是浏览器中不支持flash

payload:
/level17.php?arg01=a&arg02=b οnmοuseοver=javascript:alert(1)

/level17.php?arg01=a&arg02=b 666 οnmοuseοver=javascript:alert(1)

onmouseover(鼠标移动到上方触发)触发器来进行恶意语句利用

火狐不支持flash(火狐浏览器中,发现该组件根本不显示,完全不给我们事件触发的机会,无法利用了),尝试没有反应,切换浏览器,在edge上试一下

level-18(参数拼接)

这个和上一关有点像,我们看一下源代码

</script>
<title>欢迎来到level18</title>
</head>
<body>
<h1 align=center>欢迎来到level18</h1>
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf02.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
</body>
</html>

通过代码发现,和上一关基本差不多,我们继续使用上一关的代码进行测试,看是否弹窗

payload:
/level18.php?arg01=a&arg02=b οnmοuseοver=alert(1)

/level18.php?arg01=a&arg02=b  8888 οnmοuseοver=alert(1)

level-19(Flash XSS)

后台源码:

<title>欢迎来到level19</title>
</head>
<body>
<h1 align=center>欢迎来到level19</h1>
<?php
ini_set("display_errors", 0);
echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
</body>
</html>

这关是flash xss,涉及到反编译,暂时搞不懂

payload:
?arg01=version&arg02=<a href='javascript:alert(/xss/)'>xss</a>

level-20(Flash XSS)

后台源码:

<title>欢迎来到level20</title>
</head>
<body>
<h1 align=center>欢迎来到level20</h1>
<?php
ini_set("display_errors", 0);
echo '<embed src="xsf04.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
</body>
</html>

观察源码发现,和上面19关差不多,就是插件不同。

payload:
?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//&width&height

四.总结:

几种注入方式
  1. ?keyword=<script>alert('xss')</script>
  2. ?keyword='οnfοcus=javascript:alert('xss') >
  3. 当某些字符串被删掉时,用双写绕过
  4. ?keyword="oonnfocus=javascrscriptipt:alert('xss') "
  5. ?keyword="> <a href=javascript:alert('xss') > xss</a>
  6. src错的话,触发onerror,然后处理alert
  7. ?name=<img src=111 οnerrοr=alert('xss')
  8. http前面必须要//,将后面的注释掉
  9. ?keyword=javascript:alert('xss')//http://www.baidu.com
  10. ?t_sort=" type="text" οnclick="alert('xss')
  11. 不需要闭合的标签`img`
  12. ?keyword=<img%0Dsrc=1%0Dοnerrοr=alert('xss')>
  13. b后面有空格,后面就相当于一个新的属性
  14. ?arg01=a&arg02=b οnmοuseοver=alert(‘xss’)
on事件属于点击触发事件

绕过的方法

1.img标签src出错时用onerror注入

2.将a标签闭合,用script标签进行注入

3.用onmoseover等焦事件可以实现绕过执行脚本,焦事件可以用到input标签,a标签中的href属性,img标签等标签处。

4.可以尝试将代码进行unicode编码等浏览器可以解析的编码方式进行注入

5.可用转义序列实现绕过,转义序列是SGML类语言如xml、html中的中的一个设定,标志就是在一个数字前有 ”&#“ 这个字符后面可以跟十进制数或十六精进制,在构造语句时可以使用这种方法,从而实现绕过。

6.不只是转义序列,当你碰到删除空格的过滤时可以常识使用url编码,用%0a换行

 收集信息的方法

<1>查看网页源码,留意源码中常见存在注入的语句,并留意可以向服务器传递的参数
<2>向服务器传递参数,并判断,哪些参数被用到了网页上,并且初步记录
<3>将用了传递参数的语句总结出来之后,将常见存在注入的语句挑出,并且对它们的闭合方式进行记录
<4>对初步记录进行分析,并总结结论,结论的标准是
我要在哪些语句上用哪些xss绕过方法进行注入

xss常见注入点

1.<input>
2.<script>
3.<embed>等
这些标签都有一个特点就是都有src属性,如果网页可以发送form表单且其中的参数被用在了这些标签的属性中,那么我们注意闭合之后,加入onerror、onmouseover、onclick、onfocus等焦点之后触发脚本内容。
4.<h1>、<h2>、<h3>、<h4>、<h5>、<h6>
5.<div>等
这些标签的特点是只有对网页显示的编辑功能,或者说有分割网页源码文本的功能,如果网页传回去的参数有被用于这些标签的参数,我们可以将完整的dom节点传进去,因为一般这些标签都有包含的功能。

参考

以xss-labs举例反射型xss注入的方式及基本思路_span标签xss-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_53061933/article/details/114755460nj.rs---Tiny XSS Payloads

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零自制docker-1-【环境配置 docker go介绍与安装】

文章目录 docker简介举例docker安装go语言go安装go 配置 docker简介 Docker可以看作是一种极其轻巧的“虚拟机”&#xff0c;它允许你将一个或多个程序及其运行环境打包在一起&#xff0c;形成一个标准化的单元&#xff0c;这个单元可以在任何支持Docker的系统上运行&#xff…

实用!IntelliJ IDEA离线开发使用要点(一)

如果IntelliJ IDEA在本地网络之外没有HTTP访问&#xff0c;它将无法检查更新和应用补丁。在这种情况下&#xff0c;您必须下载新版本的IDE并按照离线安装中的描述手动安装它们。 IDEA v2023.3正式版下载 注意&#xff1a;没有互联网接入&#xff0c;您不能安装IntelliJ IDEA使…

SaaS 电商设计 (九) 动态化且易扩展的实现购物车底部弹层(附:一套普适的线上功能切量的发布方案)

目录 一.背景1.1 业务背景1.2 技术负债 二.技术目标三.方案设计3.1 解决移动端频繁发版3.1.1 场景分析3.1.2 技术方案 3.2 减少后端坏味道代码&无法灵活扩展问题3.2.1 通过抽象接口完成各自单独楼层渲染逻辑3.2.2 通过配置能力做到部分字段可配 四.升级上线(普适于高并发大…

学习:吴恩达:什么是神经元?神经网络如何工作?

学习-吴恩达《AI for everyone》2019 深度学习非技术解释 第2部分 可选.zh_哔哩哔哩_bilibili 深度学习Deep learning 人工神经网络Artificial Neural network 什么是神经网络&#xff1f; 只有一个神经元 4个神经元的神经网络 神经网路的绝妙之处 神经网路的绝妙之处就在…

Java快读

java的快读 (1)BufferedReader BufferedReader br new BufferedReader(new InputStreamReader(System.in));//定义对象String[] strings br.readLine().split(" ");//读取一行字符串&#xff0c;以空格为分隔转化为字符串数组int n Integer.parseInt(strings[0])…

k8s分布式图床(k8s,metricsapi,vue3+ts)

image-manage 图像管理应用 图像管理应用提供了一个方便管理图片的平台&#xff0c;支持单机和Kubernetes集群部署。请确保您至少拥有一个MySQL数据库和一个Redis数据库&#xff0c;以及一个至少为Kubernetes 1.29版本的集群&#xff08;如果选择集群部署&#xff09;。 文档…

PCL1.14.0安装、使用教程

写在前面 本文内容 本文是PCL1.14.0在Windows下的安装、使用教程&#xff1b; PCL、Open3D其他版本的编译和使用相关教程见 各个版本的Open3D、PCL的编译、使用教程平台/环境 windows11(windows10): visual studio 2022&#xff1b;cmake 3.22; VsCode转载请注明出处&#xff…

http和https的区别是什么?

–前言 传输信息安全性不同、连接方式不同、端口不同、证书申请方式不同 一、传输信息安全性不同 1、http协议&#xff1a;是超文本传输协议&#xff0c;信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息。 2、h…

排序(3)——直接选择排序

目录 直接选择排序 基本思想 整体思路&#xff08;升序&#xff09; 单趟 多趟 代码实现 特性总结 直接选择排序 基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的…

BUUCTF---数据包中的线索1

1.题目描述 2.下载附件&#xff0c;是一个.pcap文件 3.放在wireshark中&#xff0c;仔细观察数据流&#xff0c;会发现有个叫fenxi.php的数据流 4.这条数据流是http,且使用GET方式&#xff0c;接下来我们使用http.request,methodGET 命令来过滤数据流 5.在分析栏中我们追踪htt…

查看端口占用命令

fuser 8080/tcp netstat -tuln | grep 8080 lsof -i:8080 ss -tuln | grep 8080

数据挖掘:航空公司的客户价值分析

需求分析 理解并掌握聚类分析方法&#xff0c;掌握数据的标准化&#xff0c;掌握寻找最佳聚类数&#xff0c;掌握聚类的绘图&#xff0c;掌握聚类分析的应用场景。 系统实现 实验流程分析 借助航空公司数据&#xff0c;对客户进行分类对不同类别的客户进行特征分析&#xf…

IEEE754标准的c语言阐述,以及几个浮点数常量

很多年前&#xff0c;调研过浮点数与整数之间的双射问题&#xff1a; win7 intel x64 cpu vs2013 c语言浮点数精度失真问题 最近重新学习了一下IEEE754标准&#xff0c;也许实际还有很多深刻问题没有被揭示。 计算机程序设计艺术&#xff0c;据说这本书中也有讨论。 参考&…

抖音视频批量采集软件|视频评论下载工具

在日常工作中&#xff0c;需要频繁下载抖音视频&#xff0c;但逐个复制分享链接下载效率太低&#xff1f;别担心&#xff01;我们推出了一款专业的抖音视频批量采集软件&#xff0c;基于C#开发&#xff0c;满足您的需求&#xff0c;让您通过关键词搜索视频并自动批量抓取&#…

力扣每日一题 受限条件下可到达节点的数目 DFS

Problem: 2368. 受限条件下可到达节点的数目 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 灵神 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {int ans 0;boolean[] set;List<Integer>[] es;publ…

Unity中URP下实现水体(C#动态生成渐变图)

文章目录 前言一、Shader部分1、申明水渐变图纹理和采样器2、在片元着色器&#xff0c;进行纹理采样&#xff0c;并且输出 二、C#脚本部分1、我们新建一个C#脚本2、我们定义两个变量3、在Start内&#xff0c;new 一个Texture2D(宽&#xff0c;高)4、定义一个Color[宽*高]的颜色…

企微hook源码第二弹

免费的企微框架&#xff0c;可下载测试。 支持文本消息&#xff0c;图片消息&#xff0c;视频消息&#xff0c;文件消息。 有兴趣可以进群交流。649480745&#xff0c;群内不定期开源企微hook源码 接下来就是第二弹的企微hook源码。后续会在群内开源完整源码。

diskMirror-backEnd-spring-boot | diskMirror 后端服务器 SpringBoot 版本!

diskMirror-backEnd-spring-boot 开源技术栏 diskMirror 后端服务器 SpringBoot 版本! 此版本中拓展了 DiskMirrorBackEnd&#xff0c;是一个完全的SpringBoot项目&#xff01; 目录 diskMirror-backEnd-spring-boot 目录我如何使用&#xff1f; 部署与配置我如何使用其中的…

Java+SpringBoot+Vue:志愿服务的数字化之旅

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

理想汽车狂飙18%,造车新势力洗牌

2月27日&#xff0c;#理想汽车狂飙18%#话题冲上热搜&#xff1b;前一日&#xff0c;理想汽车(02015.HK)公布了2023年第四季度及全年财报。尽管其营收净利双增长&#xff0c;但业绩增长背后仍有隐忧。 「不二研究」据其2023年报发现&#xff1a;2023年&#xff0c;理想汽车研发…