前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次有意思的代码审计(初学)

一次有意思的代码审计(初学)

作者头像
Ms08067安全实验室
发布2020-06-30 16:18:11
5590
发布2020-06-30 16:18:11
举报

本文作者:一合(Kali Linux2020星球学员)

对于代码审计初学者而言,bluecms拿来练手是不二之选.对于bluecms的审计方法,我先是用了通读全文,又用回溯危险函数进行审计.对于这个远古cms的漏洞,随便看看就能找到一堆,多数是一些注入未过滤或未有单引号保护之类的.但是在昨天晚上,我发现一个很有意思的漏洞,拿出来自己记录一下,顺便给星球的初学者朋友们分享一下思路,说的不对的地方还请大佬们轻喷.

漏洞是再/include/common.fun.php文件中,这个文件是定义的公共函数文件,代码在579行,

$sql = "INSERT INTO".table('post_att')." (post_id, att_id, value) VALUES ('$post_id','$k', '$v')";

这条sql语句中存在变量(见下图).

可以看到$post_id是函数形参传过来的,$k,$v是形参$att_val的键和值,这个参数应该是一个数组.我们在程序中搜索insert_att_value函数,用来追溯该函数实例化传参的地方(见下图).

发现根目录下user.php 文件实例化了该函数并传递了参数,于是跟进去.

这个函数传入两个实参,$must_att_arr, $post_id 其中$post_id经过了intval过滤,且单引号导入sql语句,无法利用.而$must_att_arr的值来自于另一个函数,如下:

$must_att_arr = get_att($model_id, $_POST['att1'], 'must_att');

追踪到get_att函数中,发现该函数就是处理数组的函数,

这时候我决定用xdebug传入参数调试一下,看看数组的处理,注意,该函数主要处理的是post进来的’att1’数组,我们构造get和post请求,是user.php满足if条件,如下图.

我们传入的att1接受的数组key值是key,value值是abc’,然后我发现post进来的abc’被过滤成abc\’了.

过滤函数我也找到了,文件一开始就包含进来了!

可见,post/get/cookie都做了防注入,但没有过滤xss,当然我们重点是找注入点,但是我发现传入的数组key值没有过滤,现在很多框架都不过滤key值,试着用key’进行注入测试.

发现成功报错.用sqlmap跑一下,搞定.(sqlmap截图用的之前缓存,懒得从新跑了)

总结,这次虽然过滤了value值,但是没有过滤数组的key值,利用insert语句进行注入.现在很多框架都没有过滤key值,这次审计算积累了一点小经验吧

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档