个人刷题学习记录,如有错误请多多指教

进入题目如下,猜测是命令注入,输入ls弹框,估计是做了过滤

查看页面源代码,发现一串代码,但是不怎么看得懂,查看网上大佬的wp进行学习

看了别人的解题步骤知道这里有个url,存在calc.php,访问一下看看是啥

上面注释里面写了有waf,猜测这里应该是waf的规则,分析一下代码

点击查看代码
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
// get一个参数num
$str = $_GET['num'];
// 过滤了空格,单双引号,反引号等
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
// 将$blacklist循环遍历去判断
foreach ($blacklist as $blackitem) {
// 匹配传参里面是否有要过滤的字符,有就die
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo'.$str.';');
}
?>

大概意思都弄明白之后,接下来思路就是想办法找flag在哪,本来想着传入ls看看文件有什么,但是显示403,反应过来这里原来只是做个过滤,并不是真正的waf

输入1就正常打印,这里只能输入数字,不让输入字母,但是我们需要输入函数去执行得到我们想要的结果,所以就要想办法绕过去使其可以输入字母

参考了网上的wp,这里应该是被waf拦截了,那么就想办法绕过waf,这里涉及到一个知识点

PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除前后的空白符(空格符,制表符,换行符等统称为空白符)
2.将某些字符转换为下划线(包括空格)

例如下面这张表:

User input Decoded PHP variable name
%20foo_bar%00 foo_bar foo_bar
foo%20bar%00 foo bar foo_bar
foo%5bbar foo[bar foo_bar

假如waf不允许参数输入字母,那么我们可以在参数前面加个空格。

这样waf就找不到num这个变量了,因为现在的变量叫" num",而不是"num"。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

尝试输入phpinfo(),成功执行

那么接下来就是想办法找出flag在哪,这里需要使用几个函数

var_dump:函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构

scandir:列出参数目录中的文件和目录

chr:从不同的 ASCII 值返回字符

http://node5.buuoj.cn:28256/calc.php/? num=var_dump(scandir(chr(47)))

找到一个和flag相关的文件

flag到手

总结

知识点:

PHP的字符串解析特性

命令注入函数的使用(var_dump,scandir,chr)

参考链接

https://blog.csdn.net/weixin_44077544/article/details/102630714

https://www.cnblogs.com/sfsec/p/15205011.html

https://blog.csdn.net/qq_45521281/article/details/105871192

BUUCTF刷题_RoarCTF 2019_Easy Calc的更多相关文章

  1. Buuctf刷题:部分

    get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...

  2. BUUCTF刷题记录(Web方面)

    WarmUp 首先查看源码,发现有source.php,跟进看看,发现了一堆代码 这个原本是phpmyadmin任意文件包含漏洞,这里面只不过是换汤不换药. 有兴趣的可以看一下之前我做的分析,http ...

  3. BUUCTF刷题系列(2)5.27日记

    CTF-Bugku-安卓篇1signin Writeup Bugku安卓部分第一题,第七届山东省大学生网络安全技能大赛的题目,属于Android逆向分析.(常用工具:安卓模拟器.JEB.Cyberch ...

  4. buuctf刷题之旅—web—EasySQL

    打开环境,发现依旧是sql注入 GitHub上有源码(https://github.com/team-su/SUCTF-2019/tree/master/Web/easy_sql) index.php ...

  5. buuctf刷题之旅—web—随便注

    打开环境 根据提示应该是sql注入 查看数据库名,和数据表 1';show databases;# 1';show tables;# 查看表内字段(1';desc `1919810931114514` ...

  6. buuctf刷题之旅—web—WarmUp

    启动靶机 查看源码发现source.php 代码审计,发现hint.php文件 查看hint.php文件(http://7ab330c8-616e-4fc3-9caa-99d9dd66e191.nod ...

  7. BUUCTF刷题系列(1)5.25日记

    前面的题目都不太难,就直接从SQL注入开始了. 这个样子的话,明显就是注入,我们先拿出SQL语句:http://fb415201-6634-4fc3-a6bc-a67b84ea1ed2.node3.b ...

  8. BUUCTF刷题记录(更新中...)

    极客大挑战 2019]EasySQL-1 直接通过输入万能密码:' or 1=1#实现注入: 思考:服务端sql语句应该为:select * from users where username='xx ...

  9. buuctf刷题记录

    极客大挑战 2019]EasySQL-1 直接通过输入万能密码:' or 1=1#实现注入: 思考:服务端sql语句应该为:select * from users where username='xx ...

  10. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

随机推荐

  1. 3 MyBatis动态SQL之set标签|转

    1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...

  2. Android Studio 中 TextView 控件学习

    以下图片都来自于B站视频,仅留作学习记录,方便复习 视频链接 代码练习 <LinearLayout android:layout_width="match_parent" a ...

  3. java的StackOverflowError异常

    之前明明能查到,现在突然报错StackOverflowError,并一直在控制台返回空对象 多次遇到这种情况 发现是东西存入缓存中,缓存内存不够导致栈溢出,刷新kill缓存即可

  4. 1-python中的两大法宝和加载数据

    python中的两大法宝和加载数据 1. Python两大法宝 ① Python3.6.3相当于一个package,package里面有不同的区域,不同的区域有不同的工具. ② Python语法有两大 ...

  5. Docker安装与基础使用

    一.Docker介绍 Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.D ...

  6. Sql server 查看那个表占用的空间最多

    要查看 SQL Server 中哪个表占用的空间最多,您可以使用以下查询来列出所有表及其占用的空间大小,并按照占用空间从大到小进行排序: SELECT t.NAME AS TableName, p.r ...

  7. ngxinx基本使用

    前言 ngxin的所有功能,一般都是在nginx的配置文件中完成的. 所以这同样也是一篇nginx配置文件的熟练过程. 虚拟主机 nginx使用虚拟主机来配置站点:每个虚拟主机使用server { } ...

  8. MySQL 12 为什么我的MySQL会“抖”一下?

    一条SQL语句,正常执行时候特别快,但有时会变得特别慢,且这种情况很难复现,随机且持续时间很短,看上去像是"抖"了一下. 你的SQL语句为什么变"慢"了 在My ...

  9. CLTX 笔试题目预览

    error: multiple storage classes in declaration of `i' 代理服务器常用以下端口: (1). HTTP协议代理服务器常用端口号:80/8080/312 ...

  10. 如何测试wifi的吞吐率

    基本知识储备 Interval 表示时间间隔, transfer 表示时间间隔传输的数据量, Bandwidth是时间间隔里的传输速率. Jitter 表示抖动. Lost/Total 表示丢包的数量 ...