CTF题目-message board

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