mkcms注入审计学习
0x00 目标
本次学习目标为找出mkcms的sql注入漏洞
0x01 CMS目录说明
核心目录 |
0x02 审计工具使用
对于新手来说,当然是先各种审计工具一把梭,用法师的审计工具对mkcms自动审计一波,扫出了不少漏洞。
0x03 后台管理员修改处SQL注入漏洞
主题是挖sql注入,自然是先怼注入,第一个是后台管理员修改处
//为了简洁,我删除了部分代码,留下漏洞代码,此漏洞存在admin/cms_admin_edit.php |
代码是这样的
直接抓包做测试,使用审计工具中的mysql数据库监控工具,长这样子
万事俱备,只差测试了,各种‘、“、and 1=1、 and 1=2测试,结果???
作为新手慌得一批,感觉又是各种安全函数,过滤函数,正则过滤啥的。。所以直接上sqlmap跑一波验证一下,如果这个点跑不出来,直接就放了。。毕竟小白,不会像大佬各种绕过。
看见这个心放下了,说明没有找错,回去翻一下,发现system下有个safe.php,内容是这样的
$getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; |
正则
$getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; |
看见这段代码我是懵逼的,仔细看了下发现貌似是过滤整条SQL语句。。不确定就问了下大佬,的确是,不止是过滤sql语句也过滤xss,嗯,对大佬说这是很简单的一个正则表达式(我真垃圾,正则后面还是得好好学一波。。)
可以看见这段正则匹配完整的SQL语句大致把常规的增删改查都给过滤了。
System/library文件对GET、POST、COOKIE、REQUEST使用函数addslashes转义
if (!empty($_GET)) { |
正则可以使用盲注中的延时注入或布尔注入绕过
延时注入 |
payload: |
验证是存在注入,并且可以用延时注入绕过正则匹配。此处需配合ascii码表来进行测试,如果对应字母的ascii码正确不会延时,错误会延时
数据库名称 |
101==e,而数据库第一个字符为m==109
payload: |
以此类推
数据库第二个字符 |
判断数据库中一共有多少张表,由于cms过滤了引号,所以将数据库名转成hex
and if((select count(table_name) from information_schema.tables where table_schema=0x6D6B636D73)=17,sleep(5),0)//如果数据库中有17个表,延时5秒 |
查询数据库的第一个表名
payload: |
逐步查询多个表
查询第n个表的表名长度,修改n即可 |
查询列名
//查询mkcms_manager共有9列 |
由于手工太麻烦,建议使用sqlmap一把梭
0x04 用户注册处SQL注入
漏洞存在点:ucenter/reg.php
if(isset($_POST['submit'])){ |
sqlmap一把梭
0x05 密码找回处SQL注入
漏洞存在点:ucenter/repass.php
if(isset($_POST['submit'])){ |
知道作者使用了stripslashes函数反向转义后,可以直接定位此函数来寻找SQL注入