74cms代码审计—二次注入代码审计

二次注入代码审计

经过前面可以知道,该CMS 全局都进行了魔术符号转义

那么还想进行注入的话那就两个办法

1.宽字节注入

2.二次注入

这次我们主要说二次注入。

图片[1]-74cms代码审计—二次注入代码审计-Drton1博客

先上一个原理图 其实并不复杂,就是我们输入数据时候带一个’ 他会给我转义加上 \ 不让闭合sql语句

然后他存的时候还是存的 ‘ 然后再某个地方用到这个数据时候 他又拿出来用了,就实现了sql语句的闭合 ,就可以执行sql恶意语句。

我们直接白盒审计来看

我们先想一下原理,然后看看有没有相似的功能点。 原理的必要条件:必须有输入 这时黑盒来看必须要有的功能,那么创建简历是不是符合这个要求 ? 我们拿他开刀,然后呢,我们设想一个场景,就是我们创建简历去输入我们的信息,然后他去insert 到数据库,如果 他又把放到数据库中的信息

拿到某个地方去执行update 更新某个地方的资料 这个时候是不是就符合二次注入了?

那我们最简单的事情是监控数据库:

开始动手

第一步基本信息 填完后 进行监控数据库:

图片[2]-74cms代码审计—二次注入代码审计-Drton1博客

可以看到我们输入的数据就是被insert进数据库了 并没有 在某个地方进行更新

图片[3]-74cms代码审计—二次注入代码审计-Drton1博客

继续下一步:

图片[4]-74cms代码审计—二次注入代码审计-Drton1博客

保存 继续查看数据库执行情况

图片[5]-74cms代码审计—二次注入代码审计-Drton1博客

可以看到我们输入的数据只是被 update更新了。并没有插入,是不是还是不符合我们的要求

因为如果在这里注入的话会被直接转义。

于是继续下一步

图片[6]-74cms代码审计—二次注入代码审计-Drton1博客

图片[7]-74cms代码审计—二次注入代码审计-Drton1博客

这个跟上面同理,还是不行,继续下一步看看。

图片[8]-74cms代码审计—二次注入代码审计-Drton1博客

保存后 看数据库

图片[9]-74cms代码审计—二次注入代码审计-Drton1博客

注意看 这时是不是执行了 isnert 跟 update

是不是符合我们的条件? 先把内容放数据库 再把数据从数据库拿出来 进行update更新

此时就会构成二次注入。

在分析一波:

图片[10]-74cms代码审计—二次注入代码审计-Drton1博客

下面那个drton1 是不是直接拿我们输入数据库的数据进行更新?

如果我们输入一个 a’ 呢? 试验一下

图片[11]-74cms代码审计—二次注入代码审计-Drton1博客

可以看到再执行uodate时候报错了为什么呢? 因为再执行insert时候 是a\’ 然后存入数据库 a’

再拿出来执行update时候 a’就多一个单引号是不是就闭合了 让sql语句错误。

那么我们构造payload:

drton1’,fullname=user()#

图片[12]-74cms代码审计—二次注入代码审计-Drton1博客

可以看到成功实现二次注入。

图片[13]-74cms代码审计—二次注入代码审计-Drton1博客

因为fullname是我们姓名的参数,然后我们让他去等于user() 就把这个参数给修改了 然后显示到简历上。 这就是二次注入 ,接下来 什么写php 反弹shell 那都是正常的了。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论