代码审计---文件上传

代码审计---文件上传

代码审计---文件上传

漏洞发现

直蹦主题,源码本地搭建。

我们就常规思路,先注册一个再说。

登录看看

这里发现他对我的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格式的文件就可以绕过。

复现:

点击上传,木马的jpg文件

burp抓包改包

上传成功

结束语

在这个审计过程中我都是通过黑+白的组合进行的代码审计,对于新手师傅来说,找到漏洞的时候会找不到前端所对应的页面,这里我们就可以,通过前段报错或者提示信息在后端源代码里面找,然后在审计,最后如果分析的有误希望师傅们指出。

  • 发表于 2021-07-22 14:12:08
  • 阅读 ( 8129 )
  • 分类:代码审计

0 条评论

请先 登录 后评论
yggcwhat
yggcwhat

6 篇文章

站长统计