打开环境,发现一个动图,没有什么东西。
题目说它是一个反序列化的漏洞,常规先用御剑扫描一波,扫到了两个,有一个robots.txt
这里我们需要了解robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。
然后直接访问一下,发现了一些东西。
继续访问这个php文件。
得到了一大段php代码,审计一下。
它定义了一个名为wllm
的类。该类具有两个公共属性:admin
和passwd
。在类的构造函数中,将admin
属性设置为字符串"user",将passwd
属性设置为字符串"123456"。
在类的析构函数中,首先检查admin
属性是否等于字符串"admin"且passwd
属性是否等于字符串"ctf"。如果条件成立,则包含一个名为"flag.php"的文件,并输出其中的变量$flag
的值。否则,输出admin
、passwd
属性的值以及字符串"Just a bit more!"。
最后,从GET请求中获取名为'p'的参数,并将其反序列化为对象。
写一个反序列化脚本,构造出来payload:
?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
这个两个博主写的很详细,可以研究一下。
反序列化漏洞详解_一句话木马的博客-CSDN博客
【精选】[CTF]PHP反序列化总结_ctf php反序列化-CSDN博客
直接访问一下就可以得到flag了。
打开环境,发现一个可爱的图片
点一下那个???就可以进入下面这个页面,访问class.php文件了。
开始进行php代码审计。
它用于创建一个名为HaHaHa的类。该类具有两个公共属性:admin和passwd。在构造函数中,将admin设置为"user",将passwd设置为"123456"。
此外,该类还定义了两个魔术方法:__wakeup()和__destruct()。
__wakeup()方法在对象被反序列化时自动调用,它将passwd属性的值进行SHA1哈希处理。__destruct()方法在对象被销毁时自动调用,它检查admin属性是否为"admin"且passwd属性是否为"wllm",如果满足条件,则包含并输出flag.php文件中的内容;否则,输出passwd属性的值和"No wake up"字符串。
最后,通过$_GET['p']获取URL参数,并将其反序列化为一个对象,然后将其赋值给$Letmeseesee变量。
题目要求GET传入p,并对其反序列化。
题目初始赋值有:
$this->admin ="user";
$this->passwd = "123456";
随后是__wakeup()魔术方法,对passwd进行sha1加密
最后判断$this->admin === "admin" && $this->passwd === "wllm"
,这里用的是强比较
当返回true时输出flag
我们读懂这些之后。开始构造payload
对于上述代码,我们需要给$this->admin
赋值admin
,给$this->passwd
赋值wllm
,同时需要绕过__wakeup()
绕过方法:
序列化字符串中表示对象属性个数的值大于真实的属性个数
写出php代码如下:
admin ="admin";
$this->passwd ="wllm";
}
}
$p = new HaHaHa();
echo serialize($p);
?>
运行得到:
O:6:"HaHaHa":2:{s:5:"admin";N;s:6:"passwd";N;}
再修改下对象属性个数(大于2即可),最终payload如下:
?p=O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}
然后进行访问就可以得到flag了。
启动环境
常规思路,上传一个一句话木马修改成jpg上传。
然后用bp抓包,改成php,然后forward。
发现出错了。
只能换思路了
我们先了解一下htaccess。
htaccess文件是Apache服务中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮助我们实现:网页301重定向、自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能
.htaccess文件内容:SetHandler application/x-httpd-php
的意思是设置当前目录所有文件都使用php解析,那么无论上传任何文件,只要符合php语言代码规范,就会被当做PHP执行。不符合规则则报错
这里随便访问一个不存在的页面造成Not Found
报错,就可以看到服务器信息
我们按照这个思路传一个.htaccess文件。
文件内容如下:
SetHandler application/x-httpd-php
它表示将jpg文件解析为php文件
然后我们直接上传用bp抓包。
上传成功后我们再传个a.jpg即可,里面包含一句话木马的。
上传成功之后,然后用蚁剑连接
在里面找一下就可以找到flag了。