记一次新手入门级别的代码审计

  • A+
所属分类:代码审计
记一次新手入门级别的代码审计
喜欢就关注我吧,订阅更多最新消息

本文转载自先知社区:https://xz.aliyun.com/t/9114

作者:L4zily  


相关知识点实操-任意文件下载漏洞的代码审计

https://hetianlab.com/expc.do?ec=ECID06a1-2876-4bfb-8e59-a0096299c167&pk_campaign=weixin-wemedia          

通过本节的学习,了解文件下载漏洞的原理,通过代码审计掌握文件下载漏洞产生的原因以及修复方法。(点击阅读原文体验)



0x00写在前面

下载地址:http://www.igoldway.com/

记一次新手入门级别的代码审计

金微手机商城 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 意外收获

在刚才上图中上传文件中,这个地方有个删除,尝试了一下存在任意文件删除

记一次新手入门级别的代码审计


这个地方删除burp抓包

记一次新手入门级别的代码审计


在根目录下新建一个2.txt;然后修改dir:./穿越回根目录直接可以删除文件

记一次新手入门级别的代码审计


后续查看相关代码分析

记一次新手入门级别的代码审计

这个地方没有任何过滤限制,所以直接可以删除任意文件。

0x05 写在最后

其实这个应该有挺多洞的,文件总体来说也不大,我这php也是班门弄斧,边审计边学习,刚好在cnvd看到的,正好来练练手。第一次在先知发表文章,欢迎各位师傅们斧正,共同学习,共同进步!


本文转载自先知社区

作者:L4zily  

1/29

欢迎投稿至邮箱:[email protected]


有才能的你快来投稿吧!

记一次新手入门级别的代码审计
快戳“阅读原文”做靶场练习

本文始发于微信公众号(合天智汇):记一次新手入门级别的代码审计

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: