幻梦终醒,本无不散之宴,却不悔付此华年。|

木易同学

园龄:4年3个月粉丝:10关注:3

[RoarCTF 2019]Easy Calc

先打开题目发现是一个计算器,先输入1+1,输出2

 

 

 

先判断是否是SQL注入,发现并没有任何变换

Ctrl+u查看源代码,发现提示信息,有waf,发现参数是传到calc.php,num值的加密,在执行eval();题目应是命令执行

 

 

 先看看calc.php页面,发现过滤挺多的

 

 

揭发

复制代码
 原理1:利用PHP的字符串解析特性
    PHP将查询字符串(在URL或正文中)转换为内部$_GET或关联数组$_POST。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。
    例如:
    /?foo=bar变成Array([foo]=> “bar”)。
    /? foo=bar变成Array([foo]=> “bar”)。 //?号后有一个空格
    /?+foo=bar变成Array([foo]=> “bar”)。 //?号后有一个+号
原理2:利用scandir()列出目录和文件,var_dump()用于输出
  scandir()函数返回指定目录中的文件和目录的数组。
  scandir(/)相当于ls /
  var_dump()相当于echo
原理3:利用file_get_contents()读取并输出文件内容
例如 file_get_contents(/flag.php),读取/flag.php的代
复制代码

先经过waf检测,大概就是只允许num的值为数字。那我们就让waf检测不到num的存在。

利用原理1

 

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

 

 然后利用原理2

构造payload:  ?num=var_dump(scandir(chr(47))),因为/被过滤了,用chr数值表达式可以绕过,chr表在文章末尾

 

 

发现f1agg,利用原理3,使用file_get_contents获取f1agg里的数据,构造payload:num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)),即可得到flag

 

 chr表:

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

本文作者:木易同学

本文链接:https://www.cnblogs.com/mu-yi2/p/16875355.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   木易同学  阅读(181)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示