遇到了一道CTF题目,页面如下 通过目录扫描可以发现www.tar,一看就知道是网站备份文件,接下来套路估计就是代码审计 打开可以看到2个php文件 看过一遍代码,再结合题目的web页面,就会大概清楚这是一个提交留言的系统, 会涉及到数据库的更新和查询操作, 数据库查询的语句已经写死,无法利用,只能考虑insert语法的注入,最常用的就是报错注入 msg属于我们的可控变量,可以通过它注入恶意语句,通过源码知道msg变量通过单引号闭合 但是我们发现这里还使用了addslashes函数做转义, 还有个replace_bad_word函数通过数组,替换我们msg变量中的违法字符 继续阅读代码,发现解题的关键问题——变量覆盖 通过变量覆盖漏洞覆盖数组里的值,使addslashes函数转义出来的反斜杠(\)通过replace_bad_word函数被替换为空 怎么理解这段变量覆盖代码呢?简单理解就是把_GET,_POST请求中变量名和参数值循环赋值一遍 为了更好理解,把源码中主要内容复制到一个php文件运行,实际感受变量覆盖的效果 主要的代码保留,再建一个html表单,传递name和age值 再把每个过程的变量值ehco出来 burp抓包正常的返回包 我们再加一个变量试一下,覆盖之前的变量 发现变量覆盖成功 再覆盖数组变量试一下 数组变量被替换,测试到这里就差不多了,我们再回到CTF题目,抓取数据包 利用变量覆盖,改变数组内容,执行到替换函数时把转义的反斜杠替换,执行报错注入,获取flag值
标签:题目,变量,覆盖,CTF,board,数组,message,替换 From: https://www.cnblogs.com/byzd/p/17705022.html