
渗透工具 - metasploit/原型链污染/ PHP的curl会话
metasploit
简介
Metasploit 是目前世界上领先的渗透测试工具,也是信息安全与渗透测试领域最大的开源项目之一。它彻底改变了我们执行安全测试的方式。Metasploit之所以流行,是因为它可以执行广泛的安全测试任务,从而简化渗透测试的工作。Metasploit 适用于所有流行的操作系统,本书中,主要以Kali Linux为主。因为Kali Linux预装了 Metasploit 框架和运行在框架上的其他第三方工具。
框架和相关术语简介:
Metasploit Framework:这是一个免费的、开源的渗透测试框架,由 H.D.Moore 在 2003 年发布,后来被 Rapid7 收购。当前稳定版本是使用 Ruby 语言编写的。它拥有世界上最大的渗透测试攻击数据库,每年超过100万次的下载。它也是迄今为止使用 Ruby 构建的最复杂的项目之一。
Vulnerability:允许攻击者入侵或危害系统安全性的弱点称为漏洞,漏洞可能存在于操作系统,应用软件甚至网络协议中。
Exploit:攻击代码或程序,它允许攻击者利用易受攻击的系统并危害其安全性。每个漏洞都有对应的漏洞利用程序。Metasploit有超过 1700 个漏洞利用程序。
Payload:攻击载荷。它主要用于建立攻击者和受害者机器直接的连接,Metasploit有超过 500个有效攻击载荷。
Module:模块是一个完整的构件,每个模块执行特定的任务,并通过几个模块组成一个单元运行。这种架构的好处是可以很容易的将自己写的利用程序和工具集成到框架中。
Metasploit框架具有模块化的体系结构,exploits、payload、encoders都是独立的模块
一、metasploit 是什么?
Kali 最强渗透工具 - metasploit
msf 是一款开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行的 shellcode,并持续保持更新
metasploit 让复杂的漏洞攻击流程变的非常简单,一个电脑小白经过几小时的学习,就能对操作系统等主流漏洞发起危害性攻击
二、metasploit 攻击 windows 操作系统
1、msfconsole:启动 metasploit 命令行 [命令行效率高,使用方便]
2、启动 metasploit 前需要做:
打开 kali 终端
使用 sudo su 命令,并输入 kali 的密码 kali,切换至 root 用户
使用 msfdb init 命令初始化 metasploit 数据库(*可选)
3、操作步骤:
msf使用法则:
-
使用模块 - use[module name]
-
配置模块必选项 - set [opthin name] [value]
-
运行模块 - run
-
三步操作就能实现对主流漏洞的攻击
原型链污染
原型链
大部分面向对象的编程语言,都是通过“类”(class)实现对象的继承。传统上,JavaScript 语言的继承不通过 class,而是通过“原型对象”(prototype)实现
1、prototype 属性的作用
JavaScript 规定,每个函数都有一个prototype属性,指向一个对象
js中类的建立
js 中,定义一个类,需以定义“构造函数”的方式来定义:
function Foo() {
this.bar = 1;
}
new Foo();
解析:
Foo函数的内容,就是Foo类的构造函数,this.bar就表示Foo类中的一个属性
(为简化编写js的代码,ECmAScript6 后增加了class语法,但class其实只是一个语法塘)
js中的类中方法的建立
一个类中必然有一些方法,类似属性this.bar,也可将方法定义在构造函数内部
function Foo() {
this.bar = 1;
this.show = function() {
console.log(this.bar);
}
}
(new Foo()).show() // 1
解析:
出现问题:新建Foo对象时,this.show = function()... 就会执行一次,这个show方法实际上是绑定在对象上的,而不是绑定在“类”中
js中原型prototype的引用
在创建类时只创建一次show方法,需要使用原型(prototype)(相当于隐藏属性)
解析:
原型prototype是类Foo的一个属性,所有用Foo类实例化的对象,都有这个属性的所有内容,包括变量和方法。foo对象,天生具有foo.show()方法
此时Foo.prototype访问Foo类的原型,但是Foo实例化出来的对象,不能够通过prototype访问原型(在各自的定义里才能访问)
2、proto
是 JavaScript 中一个对象的内部属性,它指向该对象的原型。原型是另一个对象,包含共享的属性和方法,对象可以通过原型继承这些属性和方法。
js 中__proto__的引用(prototype是函数(类)中的隐藏的对象,__proto__是函数(类)被建立为对象后,在(函数)对象中的隐藏对象)
一个 Foo 类实例化出来的 foo 对象,可通过foo.__proto__属性来访问Foo类中的原型!
prototype和__proto__的定义
prototype:一个类的属性,所有类对象在实例化的时候会拥有prototype中的属性和方法
proto:一个对象的__proto__属性,指向这个对象所在的类的prototype属性
例题:
PHP的curl会话
介绍:
Curl(Client for URLs)在PHP中是一个强大而灵活的工具,用于进行各种网络请求。PHP中的Curl库允许开发者通过代码模拟HTTP请求、与API交互、进行数据传输等。在这里,我们将详细解析PHP中Curl会话的各个方面,涵盖基本的GET和POST请求,以及一些高级功能。
初始化Curl会话:
在PHP中使用Curl开始一个会话非常简单,可以使用curl_init()函数初始化一个Curl句柄,如下所示:
这个句柄将用于后续的Curl操作。
设置Curl选项:
通过curl_setopt()函数,可以设置Curl句柄的各种选项,例如URL、请求方法、请求头等。以下是一些常用的选项设置:
GET请求
发送GET请求非常简单,只需设置请求方法为GET即可。通过curl_exec()执行Curl会话:
处理响应:
可以通过curl_exec()获取请求的响应。如果需要同时获取响应头和响应体,可以设置CURLOPT_HEADER为1:
错误处理:
可以使用curl_errno()和curl_error()来获取Curl操作的错误码和错误信息:
设置请求头:
可以使用CURLOPT_HTTPHEADER选项设置请求头:
HTTPS请求:
对于HTTPS请求,可以设置CURLOPT_SSL_VERIFYPEER为false,跳过SSL证书验证:
Cookie处理:
使用CURLOPT_COOKIE选项设置发送的Cookie,使用CURLOPT_COOKIEFILE设置存储的Cookie文件:
文件上传:
可以使用CURLOPT_UPLOAD和CURLOPT_INFILE设置文件上传:
设置超时:
可以使用CURLOPT_TIMEOUT和CURLOPT_CONNECTTIMEOUT设置请求的超时时间:
关闭Curl会话:
使用curl_close()关闭Curl句柄:
例题:
知识点:
我们根据Express框架的特点进行分析,当我们传入的参数超过1000个时,之后的参数会被舍弃掉。于是这里我们最开始发个"admin":"a"设置好admin的值,再加上999个没用的参数,把程序拼接的&admin=false挤掉,即可绕过过滤。
关于headers数组的过滤,我们可以通过在每一行前面至少加一个SP 或 HT 来扩展到多行。以此绕过对 headers 的过滤