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

admin 2021年3月17日01:09:10评论47 views字数 1194阅读3分58秒阅读模式

本文作者:一合(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+人已关注加入我们

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

本文始发于微信公众号(Ms08067安全实验室):一次有意思的代码审计(初学)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年3月17日01:09:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次有意思的代码审计(初学)http://cn-sec.com/archives/292549.html

发表评论

匿名网友 填写信息