discuz7.2漏洞分析

本文深入分析了一种SQL注入漏洞的产生原因及利用过程,详细解释了如何通过构造特定的payload来绕过应用的安全检查,实现对数据库的非法访问。文章探讨了在faq.php文件中,由于对用户输入的不当处理导致的SQL注入风险,展示了如何利用二维数组构造payload绕过防御。
摘要由CSDN通过智能技术生成


参数的入口
在这里插入图片描述
这段话的意思时遍历三种提交的方法,获取参数传递的值。
在这里插入图片描述
在这里插入图片描述
有一个函数是daddslashes,跟进看一下。
在这里插入图片描述
这段代码的意思是对数据里的每一个字符都进行转义处理


漏洞产生的代码在faq.php195行
在这里插入图片描述
跟进implodeid函数,在faq.php的675行
在这里插入图片描述
这个函数的功能将数组里的值拆分出来,如图
在这里插入图片描述
到了这里我们知道,如果数组值当中存在在 / 或者 ’ ,那么在拼接sql查询语句的时候,/ 就会对后面的 ’ 进行转义或者多一个 ’ ,那么就会有一个单引号闭合不了,从而造成报错注入。
那么来看一下$groupids这个参数是从哪里传进来的
往上找,在faq.php的190行

在这里插入图片描述

由第一步分析知$gids是可以由我们传递的。
$gids就是我们构造传入的变量,从以上分析可以看出 全局对传入的参数进行了处理单引号会对 ‘ 处理为 /‘

在这里插入图片描述

这段代码是第一次调用$gids参数,把整段代码删除之后,发现还是发生了注入,证明这段代码并没有对数据进行过滤啥的。

第二次调用就到了sql语句执行的时候了。

因为KaTeX parse error: Expected 'EOF', got '&' at position 42: …load为gids[98]='&̲gids[99][0]=) o…action=grouppermission,所以构造完整的payload为
/faq.php?action=grouppermission&gids[98]=’&gids[99][0]=) or UpdateXML(50,concat(0x7e,(select group_concat(authkey) from uc_applications where appid=1),0x7e),1)%23’)

在这里插入图片描述
至于为什么要用二维数组,看以下代码
在这里插入图片描述
每次遍历取变量的第一个值,gids[98]的第一个值为/,gids[99][0]的第一个值为
) or UpdateXML(50,concat(0x7e,(select group_concat(authkey) from uc_applications where appid=1),0x7e),1)%23’),这两个值放进同一个数组,
至于为什么是从标号98开始,而不是从0开始,看以下分析
在这里插入图片描述
这段代码钟,如果 c g d a t a [ 0 ] = = ’ m e m b e r ’ 则 执 行 i f 里 的 代 码 , 否 则 执 行 e l s e 里 的 代 码 , 测 试 得 知 , cgdata[0]==’member’则执行if里的代码,否则执行else里的代码,测试得知, cgdata[0]==memberifelsecgdata[0]的值为system,所以gids[1]被占用了
所以最小是从gids[2]开始构造我们的payload
在这里插入图片描述
漏洞产生的原因
在这里插入图片描述
在这个函数进行切分的时候,并没有考虑到数组的数据当中有/,可以加一个判断过滤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值