【Web方向】 PHP代码审计 CTF题目wp1

7 篇文章 0 订阅
3 篇文章 0 订阅


README

一、 第一步

分析这道题,是要求使判断条件符合,然后输出flag
请添加图片描述
第一个if语句是不能直接给data赋值Welcome to CTF的,否则会这样无反应:

在这里插入图片描述
查了下才知道这是因为有file_get_contents()函数在搞鬼

file_get_contents() 函数把整个文件读入一个字符串中。
所以这里要写成 ?data=data://text/plain,Welcome to CTF
我试了下 ?data=data://text/html,Welcome to CTF也可以

知识点:

text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。
在这里插入图片描述
这里就是绕过第一层判断了,开始下一层

二、 第二步

第二层判断是if(md5($_GET['key1']) === md5($_GET['key2']) && $_GET['key1'] !== $_GET['key2']),就是要key1的md5与key2的md5数值和格式完全一致,同时key1不等于 key2或它们类型不相同
这里对初学者的我来说还是有点挑战性的,我先用md5碰撞脚本跑,但是跑不出结果,网上搜索了下才知道
0e绕过只能绕过弱类型比较(==),不能绕过强类型比较( ===)

md5不能加密数组,传入数组会报错,但会继续执行并且返回结果为null,
因此数组绕过不只可以绕过弱类型比较,还可以绕过强类型比较(===)

然后构造链接?data=data://text/plain,Welcome to CTF&key1[0]=123&key2[0]=345
在这里插入图片描述
这里就是绕过了第二层判断

三、第三步

if(!is_numeric($_POST['num']) && intval($_POST['num']) == 2077)
可以看出第三层判断是要用post方法输入num,使得num不是数字,且整数部分为2077
这样就可以直接上hackbar,post :num=2077abc

is_numeric() 函数用于检测变量是否为数字或数字字符串。
intval() 函数用于获取变量的整数值。

在这里插入图片描述

四、第四步

最后一层是eval()函数,这个函数的作用是返回传入字符串的表达式的结果。也就是说,将字符串当成有效的表达式来求值并返回计算结果。然而,这个题目里面的eval()就有点坑……

eval("#".$_GET['cmd']);中,.#$_GET[cmd]拼接起来了,即把后面的语句注释掉……
因为想到#是单行注释,我试试换行
查了下url表,发现换行url编码是%0a,构造代码cmd=%0a phpinfo();测试查看php信息,要记得代码后面记得加;结束语句!
在这里插入图片描述
以上查找phpinfo(),但是并没有flag,那么我就用linux系统命令来一级一级地查文件
构造system('ls')查看当前文件夹,没有flag,不碍事
在这里插入图片描述
继续system('ls ../')查看父目录,还是没有
在这里插入图片描述
继续system('ls ../../')还是没有flag,耐心继续找
在这里插入图片描述

system(‘ls …/…/…/’)再上一级目录……在这里插入图片描述

终于再这个目录找到了它(flag)
构造system('cat ../../../flag')命令查看flag
在这里插入图片描述
最终还是得到了flag{766210aa-f32f-4bde-a5ee-051244a8a5fd}

参考文章:
https://blog.csdn.net/weixin_42416812/article/details/90897040
https://blog.csdn.net/wangyuxiang946/article/details/119845182
https://blog.csdn.net/weixin_46329243/article/details/113405669

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTF(Capture The Flag)竞赛中,常见的一个攻击技术是PHP代码注入(PHP Code Injection)。这种攻击利用了应用程序对用户输入的不充分验证和过滤,使得攻击者能够将恶意的PHP代码注入到应用程序中,从而执行任意代码或实施其他攻击。 以下是一些常见的PHP代码注入漏洞场景和防范措施: 1. 用户输入的直接执行:如果应用程序直接将用户输入作为PHP代码执行,而没有进行充分的验证和过滤,攻击者可以通过提交恶意代码来执行任意操作。防范措施是使用合适的输入验证和过滤,例如使用白名单来限制允许的操作或使用安全的函数来处理用户输入。 2. 变量覆盖:如果应用程序在解析用户输入时,没有正确处理变量覆盖的情况,攻击者可以通过构造特殊的输入来覆盖应用程序中的变量,并执行恶意操作。防范措施是在处理用户输入之前,将其赋值给新的变量,并确保不会被覆盖已有的变量。 3. 文件包含漏洞:如果应用程序在包含文件时没有进行充分的验证和过滤,攻击者可以通过构造特殊的文件路径来包含恶意的PHP代码文件。防范措施是使用白名单来限制允许包含的文件路径,并对用户输入进行适当的过滤和验证。 4. 数据库查询注入:虽然不是直接的PHP代码注入,但数据库查询注入漏洞可能导致执行恶意的SQL语句,从而进一步执行PHP代码。防范措施是使用参数化查询或预处理语句,避免直接将用户输入拼接到SQL查询中。 总之,要防范PHP代码注入漏洞,开发者应该始终进行充分的输入验证和过滤,使用安全的函数和方法处理用户输入,避免直接执行或拼接用户输入作为代码执行。同时,定期更新和修复应用程序中使用的框架、库和组件,以确保使用的是最新的安全版本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值