0%

极客大挑战 RCE ME

三叶草招新赛里面一个比较难的题,无字母数字命令执行+bypass disable_function
当时做的时候不会手搓上传就弃了,今天在buu上复现重做了一遍

无字母数字命令执行

<?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__);
}

// ?>

相比于SUCTF的命令执行简单了很多,直接使用取反~就能节约很多字符,也没有对使用字符种类的限制,可以直接构造简单的执行语句
var_dump(scandir(‘/‘));扫描目录发现根目录下有flag文件和readflag,直接读读不出来没权限,那么就是需要执行readflag了,但是从phpinfo里面可以看到禁止了能用的所有执行命令行的函数,但是有一个assert可以用,就构造一个assert($_GET[_];)进行命令执行,跳出长度限制,任意执行命令

阅读全文 »

[BJDCTF 2nd]部分wp

据说是萌新赛,就目前做的几个题来说的确较为简单

fake google

SSTI,测一下可以发现用的jinja2,搜一个payload直接打
SSTI上一次的BJDCTF也考过,具体判断什么的可以看上次比赛的WP

old-hack

阅读全文 »

[SWPU2019]Web4

buu上的一分题,说实话这个难度我是不相信它只有一分的

题解

打开是一个登录框,简单测试发现添加单引号会出现一个PHP的报错,而不是MySQL的报错,存在注入点,但不可使用报错注入
测了半天,感觉有关键词屏蔽,但是无论如何返回值就三种,登录成功,登录失败,PHP报错。那想直接查询回显也没机会了,只能盲注,并且登录成功啥也不给呜呜呜。
简单测一下发现select,sleep,or,逗号,大小于号,井号还有些七七八八的盲注需要的东西都给禁用了,但是另一个注释符–还能用,最主要的是回显根本没有帮助,完全不知道后台到底在干什么。
后来拿到源码之后看见了超级过滤select|information|insert|union|ascii|,|like|outfile|join|<|>|and|substr|#|or|\|\||sleep|benchmark|if|&&
最后看wp说是堆叠注入,并且使用预处理将语句变为16进制表示,直接绕过超级过滤

MySQL堆叠注入预处理

阅读全文 »

[HarekazeCTF2019]encode_and_encode

感觉是一个外国比赛的签到题,思路很清楚就是不知道怎么实现
题目给了源码

<?php
error_reporting(0);

if (isset($_GET['source'])) {
  show_source(__FILE__);
  exit();
}

function is_valid($str) {
  $banword = [
    // no path traversal
    '\.\.',
    // no stream wrapper
    '(php|file|glob|data|tp|zip|zlib|phar):',
    // no data exfiltration
    'flag'
  ];
  $regexp = '/' . implode('|', $banword) . '/i';
  if (preg_match($regexp, $str)) {
    return false;
  }
  return true;
}

$body = file_get_contents('php://input');
$json = json_decode($body, true);

if (is_valid($body) && isset($json) && isset($json['page'])) 
{
  $page = $json['page'];
  $content = file_get_contents($page);
  if (!$content || !is_valid($content)) 
  {
    $content = "<p>not found</p>\n";
  }
} 
else 
{
  $content = '<p>invalid request</p>';
}

// no data exfiltration!!!
$content = preg_replace('/HarekazeCTF\{.+\}/i', 'HarekazeCTF{&lt;censored&gt;}', $content);
echo json_encode(['content' => $content]);

获取我们的输入用json方式解码,解码前需要将输入内容进行一个过滤,然后再把file_get_contents的内容在进行一次过滤,两次均通过判断即可输出,输出之前再把flag给你替换掉

题解

阅读全文 »

[HFCTF2020]JustEscape

JS的题,又欺负我不会JS,稍微记一下以后入门用

题解

因为题目提示这可能不是一个PHP站,所以题目中run.php可能是一个故意设置的路由,简单测试之后发现报错完全不是PHP风格,猜测或为python或js。测着测着突然出现了一句TypeError: Cannot read property 'toString' of undefined,js无误了
后来看别人的wp,js测试的话可以用Error().stack直接查看报错信息,还能获取更多的信息
得到输出

Error
    at vm.js:1:1
    at Script.runInContext (vm.js:131:20)
    at VM.run (/app/node_modules/vm2/lib/main.js:219:62)
    at /app/server.js:51:33
    at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
    at next (/app/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/app/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
    at /app/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/app/node_modules/express/lib/router/index.js:335:12)
阅读全文 »