代码审计—文件上传
代码审计---文件上传
漏洞发现
直蹦主题,源码本地搭建。
我们就常规思路,先注册一个再说。
登录看看
这里发现他对我的ip进行了记录,
我就想这个ip是不是可控的,然后在源码里面找获取我们登陆ip的源码(一般是通过X-Forwarded-For获取的,后端代码一般有关键的函数如:$_SERVER['HTTP_X_FORWARDED_FOR'],我们放到源码里面搜一下。
发现第一个有点可疑,点击去看看
发现他获取了客户端ip,而且还没有过滤,可能有漏洞,我们搜一搜有没有数据库查询语句用到这个ip。
发现这里他对这个ip带入了数据库进行查询(进行登录ip的更新),而且又是没有过滤,我们试一试构造payload
数据包里面是没有这个X-Forwarded-For参数,系统是默认的有这个的只是没写出来,这里我们就要构造X-Forwarded-For参数且构造payload
放包看看
这。。。怎么还变成了0.0.0.0了,我们把这个0.0.0.0放入审计工具里面找找看。
哎,他这里对ip进行了合法性验证,不合法的一律改成0.0.0.0了,没办法放我们再看看其他的地方,
发现上传点,先上传一个php文件看看(由于是php建站)
有检测,我们用这个提示框里面的内容去源码搜下。
发现文件,点进去看看。
他这里用in_array函数进行的判断,往上翻看看,
好东西,黑名单过滤,不急先看看代码怎么运行的,这里他实例化的一个类($upload = new UploadFile();)看看这个类。
定义了一些函数,和变量,然后往回看,禁了那些后缀名
'asa','asp', 'aspx', 'cdx','ascx', 'vbs', 'ascx', 'jsp', 'ashx', 'js', 'reg', 'cgi','html', 'htm','shtml', 'cfm', 'cfc', 'pl', 'bat', 'exe', 'com', 'dll', 'htaccess', 'cer', 'php5', 'php4', 'php3', 'php2', 'php', 'pht', 'phtm'
可以看到的这是黑名单,但是有黑名单,还不一定有漏洞,一般黑名单过滤是有好几层筛选的,我们接着往下看
他设置了附件上传目录和仅上传单文件,这些都不是,关键是代码调用了UploadFile()类的upload函数,我们跳过去看看。
他这里就简单的检测了一下,但是他调用了一个check函数来自动检查附件
我们搜索看下
他这里对大小,mime类型,文件类型,和是否合法进行的检测,其他几个都好绕过,我们就直接看这个文件类型的,发现他又调用了一个checkExt函数,去看看。
这个函数检查了上传的文件类型是否合法,就是检测了后缀名了。可以看到这个可以绕过的,他并没有转变成小写,可以大写绕过,到此这边结束了,我们再跳回前面去看看,
可以看到他对来自$info的后缀再次检测,我们看到$info从getUploadFileInfo()来的,去看看。
return了uploadFileInfo(上传成功的文件信息)。
后面就用in_array再一次过滤了。
到这里就过滤完了。我们到前端上传看看。
漏洞利用
从上面可以知道,这个文件上传漏洞他是黑名单过滤,他过滤了asa','asp', 'aspx', 'cdx','ascx', 'vbs', 'ascx', 'jsp', 'ashx', 'js', 'reg', 'cgi','html', 'htm','shtml', 'cfm', 'cfc', 'pl', 'bat', 'exe', 'com', 'dll', 'htaccess', 'cer', 'php5', 'php4', 'php3', 'php2', 'php', 'pht', 'phtm'。我们只要上传PHP格式的文件就可以绕过。
复现:
结束语
在这个审计过程中我都是通过黑+白的组合进行的代码审计,对于新手师傅来说,找到漏洞的时候会找不到前端所对应的页面,这里我们就可以,通过前段报错或者提示信息在后端源代码里面找,然后在审计,最后如果分析的有误希望师傅们指出。
- 本文作者: yggcwhat
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/283
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!