其实这个应该有挺多洞的,文件总体来说也不大,我这php也是班门弄斧,边审计边学习,刚好在cnvd看到的,正好来练练手。希望各位师傅们共同学习,共同进步!
一次新手级别入门的代码审计
0x00写在前面
金微手机商城 V0.3.7版本
第一次写审计文章,文笔不好师傅们凑活看。
用到工具:
> - Phpstudy
> - Burp
> - Phpstorm+xdebug
0x01小试牛刀
我们先看安装文件
install.php
在这个地方可以看到数组$n[5]没有进行任何过滤我们暂定可能存在SQL注入,在代码中我们可以看到是直接执行SQL语句,这个地方我们先保留备注一下,继续审~
看到这个地方就是完成安装了,我们进行断点,可以配合xdebug+burp的组合来进行调试,在这个版本中,rename("install.php","install.bak");
这个语句对于install.php文件名字直接改成了bak,在我们调试时候这句直接注释掉方便我们调试
到这里就清晰很多了,看到$n[5]这个地方写的是表名前缀。这个地方也就是存在了SQL注入,后面我们继续审,这个地方后面我们构造payload。
还是这个文件中存在这么一行代码:
file_put_contents('config.php','<?php'.PHP_EOL.'$cfg=\'{"DB":{"host":"'.$n[1].'","user":"'.$n[2].'","pass":"'.$n[3].'","name":"'.$n[4].'","pre":"'.$n[5].'"},"An":"金微手机商城","Aw":"'.str_replace("/","\\/",$n[9]).
$n[5]在前面我们审的时候知道了这个地方没有对于这个变量进行过滤。
我们用burp抓包尝试进行这个$n[5]进行写入config.php文件代码和注入的尝试,
回去继续看上面的代码,我们又有了新的发现,
这个地方用了json_decode函数(贴个学习地址:https://www.w3cschool.cn/php/php-rxi22oqv.html)
其实在这里我先进行的是写入config.php,在这个地方可以写一句话可以phpinfo()
,我在这里构造了一个payload。
单引号闭合前面然后phpinfo();//
后面直接注释掉了。我们再去访问config文件
成功!
接下来需要绕过前面$m的josn_decode。
payload:\"\}\} '; phpinfo();//"
这个部分主要就是去看config文件写入了,我们可以执行php语句,之后看他的加密吧(我也不知道算不算加密)之后我们进行写入的绕过。
成功。
之前提到的SQL注入奈何技术有限,构造绕不过去,师傅们可以尝试一下。
0x02 由浅入深
这里我们直接重新发包把我们的payload去掉之后就正常安装成功了
之后跳转到admin.php后台登录页面
这个地方提到了Dec函数,在admin.php文件中调用了的只有common.php遂直接去这个文件中查找这个Dec函数
这个和之前说的decode加密,我们看返回的Rpl函数继续跟进
作者写代码不规范,都是自己打回车方便自己查看,这个地方是个防注入过滤,对于危险字符进行了转换。
再回到admin.php中查看代码
这个地方引入了新的变量$pre
。看到后面的admin,admin应该是个表名,那么这个pre应该就是表前缀
这个地方的cfg,就是之前我们看到的config中的cfg
在这里解读一下代码,其实就是cfg变量通过Dec函数josn_decode解密了一次然后我们在config文件中看到的BD和pre这就连接上了,所以pre这个变量就是表前缀。
继续在这个admin.php登录页面我们断点之后可以看到变量Nm和Np的值是什么,同时这个地方执行了SQL语句,大概我们也可以看出来Select ID,Nr From Jms_admin where Nm='admin' And Np='123"
(这个地方的Np进行了一次md5加密)
这个地方尝试注入会被之前提到的编码实体化,其实在这里我们知道SQL语句之后去执行一下尝试看看。
在这里我本来感觉有万能密码可以利用,结果发现并不是那么简单,这个地方还是之前提到的实体化编码,奈何技术太菜没办法绕过。
0x03 干就完了
在后台页面存在上传文件,还是抓包研究
报错了这个地方,我们去看代码找到文件上传部分
通过上传抓包分析之后
很难过,没办法直接绕过上传php去getshell。
不过呢在这里上传上去了之后,存在一个改名字post包可以利用
成功getshell。技术不够,姿势来凑,这篇文章废话挺多的,大部分都是代码讲解,其实感觉更像一篇随笔,师傅们别喷哈。
0x04 意外收获
在刚才上图中上传文件中,这个地方有个删除,尝试了一下存在任意文件删除
在根目录下新建一个2.txt;然后修改dir:./穿越回根目录直接可以删除文件
后续查看相关代码分析
这个地方没有任何过滤限制,所以直接可以删除任意文件。
0x05 写在最后
其实这个应该有挺多洞的,文件总体来说也不大,我这php也是班门弄斧,边审计边学习,刚好在cnvd看到的,正好来练练手。希望各位师傅们共同学习,共同进步!
- 本文作者: L4zily
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/116
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!