命令执行

在这里的只有这个地方可以修改,猜测可能存在文件读取,命令执行,sql注入等 漏洞,抓包查看路由以及传参

这里使用了dbSubmit,这个在数据包中发现是1,这里的作用是检查表单是否已经提交

在第33行调用了databasedatabaseBackup()方法,跟进一下

这里235行通过控制filename参数来控制我们上传的文件名,236行对一些后缀进行了过滤

getRequest()方法则是获取我们不同类型的请求参数,getQuery、getPost、getParam这些方法是YII框
架下封装好的一些获取请求参数的方法这些方法可直接调用

我们知道filename可控,那我们就跟踪$filename

这里是将/ \\ . '替换成了空进行了第二次过滤后赋值给$backupFileName

下面设置$method=multivol,并将$backupFileName赋值给$dumpFile

else的话也是经过分支拼接到dumpFile,但是这里的dumpFile后续会被拼接到这里

这里用到了反引号并且dumpfile可控,所以我们可以传入

1
&whoami>demo1&

进行命令执行

sql注入

在标签页

里面的汇报中

存在sql的报错

抓包看看

通过api控制器调用了module层的getlist类,跟进查看

结合数据包我们可以发现存在问题的是keywordsubject

跟踪一下发现

30行判断keyword是否存在,32行将他带入到getListCondition里面,getListCondition是进行sql拼接查询的,将结果带入到33行的getListCondition方法进行的sql参数执行的操作

这里教程是用的debug的方式查看参数的传递过程,但是不知道为什么我的xdebug每次一调试就是

导致我调试不了

教程是说

这里经过调试最后返回的结果是完整的没对特殊字符进行过滤的完整sql语句

原因是YII框架的DB类库没有对sql进行处理兵器开发人员在二次开发的过程中没对报错进行异常捕获导致产生错误

文件上传

这里可以自定义上传的文件类型,所以我们可以通过修改这个来进行文件上传,发现定义了.php还是不能上传

抓包分析路由

这里是调用的file文件夹下面的personal的add,所以我们能找到actionadd
方法,这个方法是通过op参数帮助我们进行功能定位,但是他会先调用actionindex方法获取后台配置参数

actionIndex 方法中调用了getUploadConfig获取上传配置参数

跟踪发现进行了一些过滤

他107的dangerTags中如果存在变量就要unset

所以我们的php没法上传

但是我们真正上传的类中还包含着过滤

它调用了CommonAttach类下的方法,这里面封装着所有用于上传的方法

这里的checkExt就是第二处过滤的地方了

所以我们可以用

1
2
3
gif

.htaccess

等等进行文件上传

任意文件读取

查找危险函数unlink,发现这个

这里通过post获取kety,然后判断是不是文件就进行了删除

所以可以抓一个删除包然后进行../的返回,类似这样

至此,结束iboscms

总结:

yii框架有明显的过滤但是在module层没有封装好导致可能存在sql漏洞

unlink危险函数