BUUCTF刷题_RoarCTF 2019_Easy Calc
个人刷题学习记录,如有错误请多多指教
进入题目如下,猜测是命令注入,输入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的更多相关文章
- Buuctf刷题:部分
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...
- BUUCTF刷题记录(Web方面)
WarmUp 首先查看源码,发现有source.php,跟进看看,发现了一堆代码 这个原本是phpmyadmin任意文件包含漏洞,这里面只不过是换汤不换药. 有兴趣的可以看一下之前我做的分析,http ...
- BUUCTF刷题系列(2)5.27日记
CTF-Bugku-安卓篇1signin Writeup Bugku安卓部分第一题,第七届山东省大学生网络安全技能大赛的题目,属于Android逆向分析.(常用工具:安卓模拟器.JEB.Cyberch ...
- buuctf刷题之旅—web—EasySQL
打开环境,发现依旧是sql注入 GitHub上有源码(https://github.com/team-su/SUCTF-2019/tree/master/Web/easy_sql) index.php ...
- buuctf刷题之旅—web—随便注
打开环境 根据提示应该是sql注入 查看数据库名,和数据表 1';show databases;# 1';show tables;# 查看表内字段(1';desc `1919810931114514` ...
- buuctf刷题之旅—web—WarmUp
启动靶机 查看源码发现source.php 代码审计,发现hint.php文件 查看hint.php文件(http://7ab330c8-616e-4fc3-9caa-99d9dd66e191.nod ...
- BUUCTF刷题系列(1)5.25日记
前面的题目都不太难,就直接从SQL注入开始了. 这个样子的话,明显就是注入,我们先拿出SQL语句:http://fb415201-6634-4fc3-a6bc-a67b84ea1ed2.node3.b ...
- BUUCTF刷题记录(更新中...)
极客大挑战 2019]EasySQL-1 直接通过输入万能密码:' or 1=1#实现注入: 思考:服务端sql语句应该为:select * from users where username='xx ...
- buuctf刷题记录
极客大挑战 2019]EasySQL-1 直接通过输入万能密码:' or 1=1#实现注入: 思考:服务端sql语句应该为:select * from users where username='xx ...
- 刷题记录:[BUUCTF 2018]Online Tool
目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...
随机推荐
- 3 MyBatis动态SQL之set标签|转
1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...
- Android Studio 中 TextView 控件学习
以下图片都来自于B站视频,仅留作学习记录,方便复习 视频链接 代码练习 <LinearLayout android:layout_width="match_parent" a ...
- java的StackOverflowError异常
之前明明能查到,现在突然报错StackOverflowError,并一直在控制台返回空对象 多次遇到这种情况 发现是东西存入缓存中,缓存内存不够导致栈溢出,刷新kill缓存即可
- 1-python中的两大法宝和加载数据
python中的两大法宝和加载数据 1. Python两大法宝 ① Python3.6.3相当于一个package,package里面有不同的区域,不同的区域有不同的工具. ② Python语法有两大 ...
- Docker安装与基础使用
一.Docker介绍 Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.D ...
- Sql server 查看那个表占用的空间最多
要查看 SQL Server 中哪个表占用的空间最多,您可以使用以下查询来列出所有表及其占用的空间大小,并按照占用空间从大到小进行排序: SELECT t.NAME AS TableName, p.r ...
- ngxinx基本使用
前言 ngxin的所有功能,一般都是在nginx的配置文件中完成的. 所以这同样也是一篇nginx配置文件的熟练过程. 虚拟主机 nginx使用虚拟主机来配置站点:每个虚拟主机使用server { } ...
- MySQL 12 为什么我的MySQL会“抖”一下?
一条SQL语句,正常执行时候特别快,但有时会变得特别慢,且这种情况很难复现,随机且持续时间很短,看上去像是"抖"了一下. 你的SQL语句为什么变"慢"了 在My ...
- CLTX 笔试题目预览
error: multiple storage classes in declaration of `i' 代理服务器常用以下端口: (1). HTTP协议代理服务器常用端口号:80/8080/312 ...
- 如何测试wifi的吞吐率
基本知识储备 Interval 表示时间间隔, transfer 表示时间间隔传输的数据量, Bandwidth是时间间隔里的传输速率. Jitter 表示抖动. Lost/Total 表示丢包的数量 ...