【郑大二年级信安小学期】Day12:编写渗透测试脚本搭建虚拟环境
目录
1 渗透测试脚本
1.1 创建虚拟环境
1.2 虚拟环境·安装模块
1.2.1 安装编辑器
1.3 针对漏洞写脚本
1.4 搭建一个应用
1.4.1 模板注入
1.4.2 创建的目录
1.5 漏洞验证脚本
1.6 request用法
1 渗透测试脚本
一般怎么去写渗透测试脚本
poc:漏洞验证
exp:漏洞利用
有时候的话,用POC 去验证它,其实它是存在的,但是你可能没法去写出一个利用的一个脚本来。
下面讲怎么用python编写脚本(3.12)
用虚拟环境来写:
虚拟的环境就是 python 里面的话,其实它有虚拟的环境,就是呢,其实大家都知道,就是如果说你用 python 去写脚本的话,正常情况下来讲,就是可能你在你的这个,你的这个电脑终端上面,你可能会有。
多个 python 的版本,比如说你去下载了一些这个源码,那么这个源码是支持3.9的,你可能要用,但是你电脑上如果是3.6。
对吧,那么可能它就会出问题。另外一个的话就是如果说在某一个时候你用了一个 pth 的版本就是一个库的版本比如说,2.1你也想用3.1你也想用的话,那么你就需要一个虚拟环境去虚拟环境的话,就是单独给这个 python 开辟一个空间和我们其他的空间相隔离,这样的话你写代码更自由,对你的这个相关的模块的安装不发生冲突
1.1 创建虚拟环境
安装pipenv:创建虚拟环境
新建一个目录
在这个目录进入终端
然后呢在这个目录下面。安装一个虚拟环境是这样子的。所以我们在这个地方可以进去一下。稍等一下对吧!
出现两个配置文件
进入虚拟环境
多了一个 test0715,后面还跟了一个随机的值,这个的话就是你虚拟环境的名称,也就是说在你的这个环境下面,其实你是一个全新的 python 环境
这是一个全新的环境,只有一个pip,需要重新安装模块
socket 这是自带的。它是进行网络通信的一个模块,那这个模块呢,对于我们就是做网络安全来讲的话,它其实是一个比较重要的模块。网络通信基于 TCPIP 的协议,你要去探测服务的话,探测服务,探测端口其实离不开这个模块,而这个模块的话,其实也是这个 request 这个模块的一个底层的一个,你可以理解为它更底层一点。
request 这个模块是一个专门来做这个 HTTP 请求的
beautiful soup,这是来解析数据的,有时候可能会用到,有时候的话可能就是可能做爬虫的时候用的多一点,但是我们其实写这个漏洞的这种渗透,利用的脚本的话,可能很多时候不需要它来解
1.2 虚拟环境·安装模块
1.2.1 安装编辑器
ai编辑器:trae,适合写前端代码
vscode 直接打开刚才创建虚拟环境的目录
1.3 针对漏洞写脚本
针对flask漏洞
虚拟环境当中安装一下 flask 的框架
1.4 搭建一个应用
app当成web应用
每一个 web 应用,它都有一个进入的这样的一个文件,
那么当前我们 flask 的这个入口文件的话,它是叫做 APP. PY 这样一个文件。
1.4.1 模板注入
创建一个模板,专门来解析前端页面的 python 脚本。
1连串的 HTML 的这个标签当中,你想去执行 python 的代码,对于我们来讲是不可能的,对 python 来讲是不可能的。想这样去做,怎么办?得另外创建一个语法,创建一个模板,专门来解析,就是前端页面的这一个就是 python 的脚本。要用一个字符串,其实就是处理字符串,你前端的这一串字符串里面,假如说这段代码的话,它是有 python 的这个特征的,你把它就是识别为 python 脚本来执行就可以了。
但是呢,就是在设计的时候,你就必须要明确的告诉我们的这个就是模板引擎,对吧,哪一段是 python 的脚本需要我去解析的,就这个就这个作用就是这个模板的一个作用,其实在我们去看这个框架的时候,大家注意看框架的话,你会在这个地方。
模板简单而言来讲,就是为了在前端去执行这个 python 的代码。
这一串python代码就是模版
模板的本质呢,其实是就是在前端执行 python 脚本
模板的语法就是这两个花括号的话,它其实代表了一个什么呢?代表了一个就是 python 表达式这里面。所以这个如果是写在这里面的话,这个 python 表达式可能会被执行的。
1.4.2 创建的目录
解释器要选中test0715
每一个应用的话,它一定有一个 URL
@代表装饰器
0.0.0.0代表本机
可以直接执行,也可以在终端执行
访问5000端口
1.5 漏洞验证脚本
漏洞验证:发起一个http请求或payload,如果返回期望的值,就证明有这个漏洞
请求方式:get,post,增删改查
安装request
判断有没有漏洞:
1.6 request用法
发起http请求
response200 代表访问成功
2 Python底层知识
python 里面如果说我们要去调用一些系统命令的话,首先要用到一个模块,就叫 OS 模块
要把字符串当做这一个代码来执行,需要用到 EVAL 函数
凭什么可以被调用?那我我自己写的函数为什么不能这样调用呢?对不对?所以的话,它肯定有一个全局的空间,在这个地方,就当你在你你可以这样去理解它,就是在你当前的脚本当中,一定是一定有一个命名的空间,那么在这个空间里面肯定存在。EVAL 不然的话你是没法去调用它的。
这就是为什么在你的空间当中,比如说你在另外一个脚本当中定义了一个函数,为什么在你的脚本当中不能用,对吧?因为你没有导入到当前的空间当中来,这这是就是它这个为什么不能调用的原因。那么为什么就是这些内置的函数可以被调用?它肯定是提前就被注入到当前的空间当中,你才能够用它。所以你就要通过一些方式获取当前空间当中的这一些,通过其他的方式来获取这些函数。
所有的对象都会有一个 class 属性
所有 python 类都会有一个父类,
只要你是一个类,在 python 当中还有一个方法叫 subclasses 方法。
获得到的是 python 所有内置的类或者叫内建的类,就是 python 他自己有的
全局空间其实是有属性的
这里的话涉及到 python 的一些基础的东西,其实本质上要明白一个为什么要这样去做,首先要明白为什么要这样去做,就是因为在模板当中你不能任意的去执行 python 里面的函数或者是模块不能任意的导入,要想其他的方式去导入这一个模块去执行这些函数。因为如果说直接去执行的话,可能会检测到你的这个在调用一些命令,或者是一些敏感的函数都禁用掉了,要通过其他的方式去调用它才行,要寻找一个方式去调用。
终端执行:
3 漏洞利用脚本
怎么把payload拼接在这里
Python中换行情况下,需要把每一行都连接起来,那就加一个斜杠
通过self调用url,就可以共用一个
payload可能成功不了
环境目录
各种脚本: