环境准备
攻击机:kali(192.168.30.176)
目标靶机:Kioptrx4 (NAT模式/192.168.30.198)
考察点:
1. sql注入
1. ssh登录
1. mysql提权
信息收集
一、主机探测
nmap 192.168.30.0/24 -sP
发现目标主机192.168.30.198
二、端口及版本探测
nmap 192.168.30.198 -sV
开放了22,80,139,445端口,使用apache2.2.8,php5.2.4,及操作系统ubuntu
三、指纹探测
whatweb 192.168.30.198 -v
收集到的信息与上述差不多
四、目录扫描
dirb http://192.168.30.198
sudo dirsearch -u 192.168.30.198
有一个database.sql,查看一下
信息泄露了一个账户 john:1234
Web渗透
访问80端口web页面
可以看到仅是一个登录页面,目录扫描的结果也没有什么别的特别的页面,看来只能考虑从登录框突破,尝试使用泄露的账户登录
结果是失败,密码错误,尝试一下万能密码
a'or'1'='1'#
成功登录,仅显示用户名密码,然后就是 一个登出,没有别的可利用点
不会无缘无故显示一个账密,猜测是密码复用
ssh登录
尝试ssh登录
出现报错,显示没有匹配的host key,需要额外添加参数
ssh -o HostKeyAlgorithms=+ssh-rsa john@192.168.30.198
成功登录,有提示说LiGoat shell已就位,所以不会搞砸,然后让我们输入?查看可以执行的命令
好家伙,很明显就是一个restricted shell
shell逃逸
整体思路就是当前的shell限制太多,比较严格,称为restricted shell,这时候我们需要绕过这种restricted shell,也可以叫shell逃逸
分析一下可以执行的几个命令,先执行一下看看
思考一下,能利用的命令好像也只有echo了,查询一下有关shell逃逸以及echo的资料,最终得到下面命令
echo os.system('/bin/bash')
这会尝试启动一个新的bash shell,在Python中,os.system()
是用来执行一个shell命令的函数,echo作为一个输出用于执行启动
shell逃逸成功,执行whoami查看用户名,以及id查看用户信息
uid=1001(john)
:这表示用户john的用户ID(UID)是1001。gid=1001(john)
:这表示用户john的主要组ID(GID)是1001,这个组通常与用户名相同,也是john。groups=1001(john)
:这表示用户john属于组(john)
后渗透
收集信息
查看用户账户信息
cat /etc/passwd //查看用户账户信息
可以看到John用户的信息,对应的shell是/bin/kshell,刚才我们也知道John的shell是一种restricted shell
除了John用户还有一个robert用户对应的也是restricted shell,还有一个用户名为loneferret的,拥有bash shell,这时候可以尝试去爆破这个用户,这是一种思路,但我们先收集更多的信息
查看组信息
cat /etc/group //查看组信息
在最后几行,可以发现loneferrt对应的用户组是lpadmin和admin
这时候有另外一种思路就是将我们的john添加到组admin或者lpadmin,获取bash权限,但是添加组需要sudo
查看sudoers文件
cat /etc/suoders
没有该文件
查看进程
ps aux
发现root用户有运行mysql进程
搜集相关配置文件,最终在/var/www/john/john.php发现有信息泄露。mysql用户为root 空密码
登录mysql,这个时候mysql用户为root,权限还是很高的
查看全局配置
show global variables;
可以看到secure_file_priv为空
可以写文件,可以打一个udf提权,查阅资料,发现有些mysql的函数可以执行系统命令,也就是说我们可以通过这些函数来添加用户到admin组
在MySQL中,可以执行系统命令的函数主要有以下几个:
- sys_exec():这是MySQL提供的内置函数,允许用户在数据库中执行系统命令。这个函数会返回一个整数值,表示命令的执行结果。使用这个函数执行系统命令需要具有相应的权限。
- system():这是MySQL中的一个特殊函数,允许在数据库查询中执行外部系统命令。当这个函数被调用时,MySQL会执行指定的系统命令,并将命令的输出返回。
- !:在MySQL命令行界面中,可以直接使用反斜杠(
!
)符号来执行系统命令。例如,!ls
会列出当前目录下的文件。- sys_eval():这是一个用户自定义函数(UDF),可以通过加载动态链接库(DLL)到MySQL中来实现执行系统命令的功能。
- load_file():这个函数可以读取文件系统中的文件内容,虽然它不是直接执行系统命令,但它可以被用来读取由系统命令生成的文件内容。
要查看是否有这些函数,我们要查看mysql数据库
use mysql;
show tables;
有一个 func表,应该有函数说明
select * from func
可以看到一个sys_exec函数,可以用来执行系统命令,添加john到admin组
select sys_exec('sudo usermod -a -G admin john');
sudo
:以超级用户(root)的权限执行后面的命令。usermod
:用于修改已存在的用户账户的命令。-a
:这个选项用于追加组,即把用户添加到一个附加的组,而不是将其从所有其他组中移除。-G
:这个选项后面跟的是要修改的用户组信息。在这里,它用于指定用户要被添加的附加组。admin
:这是用户john
要被添加到的组名。john
:这是要修改的用户账户名。
我们退出mysql命令行检验一下
发现还是没有添加成功,查询资料发现需要重新登录或者重启才能更新配置,我们这里选择切换用户重新登录
首先我们的ssh登录账密都是网站得来的,相当于有存储数据库,所以我们查询数据库获取另外一个用户robert的密码,或者去到web页面采用该robert用户使用万能密码应该也可以
我这里选择查询数据库
切换用户
最后可以看到john已经添加到admin组了,这时候我们可以sudo su输入用户John的密码进入root的bash shell
sudo su
成功提权
近期泷羽推出oscp培训,价格实惠,只需要4000,学生还可以优惠500,可以分期,培训六个月,提供官方教材,以及带着刷众多靶机(大约200多台),每天都有直播教学,以及录播,有想考oscp证书意向的师傅可以私信我,也可以扫描海报上的二维码咨询详情
文章原创,欢迎转载,请注明文章出处