提示

  1. call_user_func()函数
  2. 通过php内置函数来进行代码审计
  3. 绕过system(##不止一种方法

拿到题目养成一个好的习惯先抓个包

从抓到的包以及它首页报错来看,这里死活会post传输两个参数func以及p

func传输函数,而p则是传输参数内容

这里直接尝试system读取文件列表

返回页面来看,对func做了防护测试一下哪些可以

####这里其实可以通过一个php特性绕过直接执行命令,但是还是先按着作者的想法来做

随便输了几个函数,他这里就报出了call_user_func()

call_user_func()这里似乎是利用这个函数然后执行用户输入的然后去调用内部函数

#####本文最后做了简单讲解

首先应该通过php内置函数来尝试读取index.php页面

这里可以使用highlight_file()高亮显示页面或者file_get_contents()来读取文件

####这里注意,此页面五秒刷新一次

这里过滤的还是很完整基本上所有的命令执行函数都过滤干净了了

这里我的思路通过序列化入参绕过网站func的防护,通过反序列化后执行system函数

先随便去找个在线php一个序列化出来

首先我们知道了他接收参数的变量func和p那么序列化也得一样,类也得一样(class Test

这里url编码了一下应为怕有些编码识别

<?php
class Test {
	var $p = "ls /";
	var $func = "system";
}

echo urlencode(serialize(new Test()));
?>

到这一步可以进行的命令执行了

O%3A4%3A%22Test%22%3A2%3A%7Bs%3A1%3A%22p%22%3Bs%3A4%3A%22ls+%2F%22%3Bs%3A4%3A%22func%22%3Bs%3A6%3A%22system%22%3B%7D

这里直接去找了根目录flag但是没有

尝试使用find去找

找到flag位置直接去读取

/tmp/flagoefiu4r93

####注意,服务器运行很慢使用find函数需要等待服务器查找一会

获得flag

现在来说第二种方法

php里反斜杠会被认定为特殊字符,如果在system中加上反斜杠例如system就会绕过验证

通过此方法可以成功获得shell获取flag

关于call_user_cunc()

call_user_func函数类似于一种特别的调用函数方法,它可以调用php内部函数也可以调用用户自定定义的函数

例如

<?php
function barber($type)
{
echo "You wanted a $type haircut, no problemn";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?>

以上示例输出

You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem

其余更详细内容可自行去参考php官方内容

原文地址:https://blog.csdn.net/whale_waves/article/details/134776693

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_43722.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注