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

本文作者:一合(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’数组,我们构造getpost请求,user.php满足if条件,如下图.


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

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

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

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

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

 

 

 

扫描下方二维码加入Kali linux2020星球学习

加入后会邀请你进入内部微信群,内部微信群永久有效!

目前28000+人已关注加入我们

展开阅读全文
©️2020 CSDN 皮肤主题: 1024 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值