BlueCMS审计

审计过程

还是采用正则搜索sql语句的方式,一个一个找可控变量

image-20250102162334992

ad_js.php

image-20250102162402142

这里很明显,ad_id参数值可控,然后又是直接拼接的sql语句,拿给getone函数去执行,那么再跟进看看getone函数写了什么过滤逻辑没有

image-20250102162725530

很好,没有过滤逻辑

那么来触发漏洞,存在漏洞的文件是ad_js.php,参数是ad_id,数字型注入,不用闭合引号

那么直接注入就行

image-20250102163356581

image-20250102163443826

结果输出在注释

但是这里其实也是有过滤的,过滤的逻辑没有直接写在本文件中,而是在包含的文件中:

image-20250102163628298

这里有对输入的参数值进行转义的逻辑

image-20250102163849058

检查是否启用了魔术引号功能,如果没有启用,则用自定义的函数对输入的参数进行引号等符号转义,跟进一下deep_addslashes函数

如果参数是数组类型,则递归处理数组每一个元素,都进行引号等符号的转义

image-20250102164059480

使用php内置的addslashes函数进行转义

image-20250102164339126

1
2
3
4
5
6
addslashes() 是 PHP 的一个内置函数,用于向字符串中的特殊字符添加反斜杠(\),以便它们可以在某些上下文中被安全地使用。具体来说,它会为以下字符添加反斜杠:

单引号 (')
双引号 (")
反斜杠 (\)
NULL 字符(空字符)

在后面的注入利用时,如果用到了引号,那怎么该绕过这个转义呢?可以使用十六进制编码绕过

ad_pone.php

image-20250102201438736

显然,这里的id参数可控,而且上下文也没有什么过滤逻辑,只有包含的文件中有一个全局过滤,转义引号,那么这里又是数字型的注入,是不会受到很大影响的

然后就去找触发,由于这里接收了多个参数,于是我直接去找更新相关的功能点

看了看文件位置,又是admin目录下的,那么大概率是后台的一处功能点了

image-20250102202518571

于是翻找后台功能点,找到更新相关的功能

image-20250102202833008

抓包看看参数是否对应

image-20250102202730229

image-20250102202754470

完美匹配

然后在id参数处注入即可,使用数字型盲注

image-20250102203226246

实际情况需要使用截断函数一位一位得爆破盲注

image-20250102203322045

1
2
1 and if(0x352e352e3533=(select version()),1,0)
0x352e352e3533 : 5.5.53

admin_log.php

这个也是和上面的差不多,只是从update变成了dalete,还是盲注

image-20250102203903672