代码审计----sql注入篇
web安全 内网安全。
目录
反序列化漏洞分析篇
1-----------反序列化漏洞分析
2-----------session反序列漏洞分析
PHP代码审计篇
1-----------文件上传
2-----------SQL注入
说在前面
次审计纯属分享审计过程和审计思路 请勿用于非法用途!
审计过程
拿到源码 我们可以本地搭建 进入后台看看有什么可能存在漏洞功能块。
我们可以看到里面有一些功能 里面有一个sql的写入框 有问题看看有没有过滤 我们随便输入东西看一看
看来存在过滤
但是我们有源码不怕 通过报错信息里有一个非法操作 放到工具里面源码审计系统搜搜看
发现里面1到17个都有感叹号 说明这个程序运行是在最后一个里面 发现后面两个都是在同一个php文件里面我们先看第一个
后来发现最后面两个搜索结果都是同一个地方 可能是搜索结果出现问题了
回到正题 通过这个搜索我们还不能判断是否程序运行在这里 我们再看看里面的参数有titl limits orders isall sqls
等等他们都是通过frparam函数将这些参数里面的具体内容传递给$data这个数组里面 既然是参数可以肯定在抓
包的时候会出现 我们就抓个包试试
在前面那个功能块里面点击保存 并抓包
我们可以看到里面的参数和我们源码里面看到的参数一样且sql的输入框框是sqls这个参数 基本可以肯定是这里了
接下来就是代码审计了
我们可以看到他做了一个if判断 通过frparam函数的运行结果是否等于1,我们看看frparam函数这个函数一看就
是自定义的,对于自定义的函数肯定有function frparam这个函数声明,我们去搜一搜。
找到了 点进去看看
可以看到它是获取URl的参数值,通过前面调用这个函数 他已经go和1传过来了 所以这里的$str和$int为go和1。
这里$data = $this->_data;意思是把前端的所有数据传过来 这时候再判断$str是否为空 再通过这个array_key_exists函数判断
$str是否在不在$data里面,显然都不满足 所以跳过 后面他在$method变量判断 显然是为空的 因为我们没有赋值给他就默认
了然后把 $data[$str]赋值给$value了,最后再return format_param($value,$int,$default);看一看format_param函数。
这里他参数过滤 格式化了 通过前面传来的int=1 我们直接跳到case 1:里面他通过
SafeFilter函数进行了过滤 我们定位看看
可以看到他里面过滤了xss攻击了 简单看了一下 是过滤xss的 顺便看下这个框框有没有xss漏洞
通过 $arr = preg_replace($ra,'',$arr)这个函数判断$arr有没有在$ra里面 有就替换成空了看到
$ra里面就过滤了一些基本的js语句,可能会有,然后再接着看下去 就回到前面了。
可以看到他又把传来的$值给html实体了。。。没戏。
不慌 我们接着看下去。
可以看到他判断php版本了 大于等于7.4就会通过addslashes函数在每个双引号"前添加反斜杠 然后再return $value
如果没有大于等于 就会判断是否开启魔术方法了,没有就会和上面一样,通过addslashes函数在每个双引号"前添加
反斜杠 然后再return $value,说到这我只能说这代码写的真严谨。。。
好了 这里看完了,回到前面。
这里return的值就是层层过滤后的$value的值了 这里运行结束,然后我们再返回去看前面。
好了 一个frparam函数终于看完了 后面好多个都是通过这个frparam层层筛选的和前面一样 就不多说 我们再往下看。
太长了,截两张 这里他对这个sqls参数进行了stripos函数判断 这个stripos函数是查找我们指定的字符在字符串中第一次出现
的位置 如果有就会输出位置也就是不等于false,也就是为真了,代码里他通过多次或逻辑 只要有一个为真就会执行if里面的
非法操作 这个代码 所以我们只要绕过这些判断 也就是全为假 可以看到他对update,delete,insert,drop,truncate进行
了对比 我们只要不适用这些函数就OK了。
看到我箭头画的就是执行顺序了 他直接就带入执行了 说明存在漏洞。
漏洞验证
我们只要的插入sql语句的时候不要有上的敏感字符就可以了 payload我相信大家都会写
我就不废话了就直接放sqlmap跑了。
|