问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
【代码审计】 一次新手级别入门的代码审计
其实这个应该有挺多洞的,文件总体来说也不大,我这php也是班门弄斧,边审计边学习,刚好在cnvd看到的,正好来练练手。希望各位师傅们共同学习,共同进步!
一次新手级别入门的代码审计 ============= 0x00写在前面 -------- 下载地址:<http://www.igoldway.com/> [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-9f009aa82dbd8d1abbcf33d7431ad543dc2d99b9.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-9f009aa82dbd8d1abbcf33d7431ad543dc2d99b9.png) 金微手机商城 V0.3.7版本 第一次写审计文章,文笔不好师傅们凑活看。 用到工具: > - Phpstudy > - Burp > - Phpstorm+xdebug 0x01小试牛刀 -------- 我们先看安装文件 install.php [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-e2fd9b026efcee2b34624fae36080c0ae290b66c.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-e2fd9b026efcee2b34624fae36080c0ae290b66c.png) 在这个地方可以看到数组$n\[5\]没有进行任何过滤我们暂定可能存在SQL注入,在代码中我们可以看到是直接执行SQL语句,这个地方我们先保留备注一下,继续审~ [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-09e4a15545764b44221ebd1732137963987b8f24.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-09e4a15545764b44221ebd1732137963987b8f24.png) 看到这个地方就是完成安装了,我们进行断点,可以配合xdebug+burp的组合来进行调试,在这个版本中,`rename("install.php","install.bak");`这个语句对于install.php文件名字直接改成了bak,在我们调试时候这句直接注释掉方便我们调试 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-a70488f23d1c55dfc3d2bb53dc0d26cc9c96865d.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-a70488f23d1c55dfc3d2bb53dc0d26cc9c96865d.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-6e04e56acfe5d7cdd66c5041b2f9f4d0ece5bf4e.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-6e04e56acfe5d7cdd66c5041b2f9f4d0ece5bf4e.png) 到这里就清晰很多了,看到$n\[5\]这个地方写的是表名前缀。这个地方也就是存在了SQL注入,后面我们继续审,这个地方后面我们构造payload。 还是这个文件中存在这么一行代码: ```php 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]). ``` [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-d51258e720eda3bd55c27146b703f566f46b9425.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-d51258e720eda3bd55c27146b703f566f46b9425.png) $n\[5\]在前面我们审的时候知道了这个地方没有对于这个变量进行过滤。 我们用burp抓包尝试进行这个$n\[5\]进行写入config.php文件代码和注入的尝试, [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-baf067a30cd6d8acf3a09c2982a076690842473d.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-baf067a30cd6d8acf3a09c2982a076690842473d.png) 回去继续看上面的代码,我们又有了新的发现, [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-72eb1b67c098a363dbfabcd35013215ad57dff76.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-72eb1b67c098a363dbfabcd35013215ad57dff76.png) 这个地方用了json\_decode函数(贴个学习地址:<https://www.w3cschool.cn/php/php-rxi22oqv.html>) 其实在这里我先进行的是写入config.php,在这个地方可以写一句话可以`phpinfo()`,我在这里构造了一个payload。 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-dada9f8517139b40a6e899dea5eb791ab2fd9241.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-dada9f8517139b40a6e899dea5eb791ab2fd9241.png) 单引号闭合前面然后`phpinfo();//`后面直接注释掉了。我们再去访问config文件 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-fa1231acc1e8bc68912c22ababa22292caba6e54.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-fa1231acc1e8bc68912c22ababa22292caba6e54.png) 成功! 接下来需要绕过前面$m的josn\_decode。 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-fb6af4058923cd19da7a63a3448fd8a9aa6dd50c.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-fb6af4058923cd19da7a63a3448fd8a9aa6dd50c.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-6f245eee06a6d28750e83ac2d13806d2e4144c1f.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-6f245eee06a6d28750e83ac2d13806d2e4144c1f.png) ```php payload:\"}} '; phpinfo();//" ``` 这个部分主要就是去看config文件写入了,我们可以执行php语句,之后看他的加密吧(我也不知道算不算加密)之后我们进行写入的绕过。 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-a4e7de120a5b9d5c6dd70e25d55ae1c4472e5087.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-a4e7de120a5b9d5c6dd70e25d55ae1c4472e5087.png) 成功。 之前提到的SQL注入奈何技术有限,构造绕不过去,师傅们可以尝试一下。 0x02 由浅入深 --------- 这里我们直接重新发包把我们的payload去掉之后就正常安装成功了 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-142fbfeed5acf5c767afcbfcd3847c99c1fc19aa.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-142fbfeed5acf5c767afcbfcd3847c99c1fc19aa.png) 之后跳转到admin.php后台登录页面 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-80be924c6dd115eba435985fc5d1e6ebdb5400e4.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-80be924c6dd115eba435985fc5d1e6ebdb5400e4.png) 这个地方提到了Dec函数,在admin.php文件中调用了的只有common.php遂直接去这个文件中查找这个Dec函数 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-59b229e9e775d3c1497580b2ef44ae43280a50c3.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-59b229e9e775d3c1497580b2ef44ae43280a50c3.png) 这个和之前说的decode加密,我们看返回的Rpl函数继续跟进 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-a3847417dc625a0398c14f78af4734d0749f6ddf.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-a3847417dc625a0398c14f78af4734d0749f6ddf.png) 作者写代码不规范,都是自己打回车方便自己查看,这个地方是个防注入过滤,对于危险字符进行了转换。 再回到admin.php中查看代码 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-996cc1acf1b92b4e67919c188ffbc834200aecb3.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-996cc1acf1b92b4e67919c188ffbc834200aecb3.png) 这个地方引入了新的变量`$pre`。看到后面的admin,admin应该是个表名,那么这个pre应该就是表前缀 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-646d60a69e990bc58b7e8f70205a38e5475df1f6.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-646d60a69e990bc58b7e8f70205a38e5475df1f6.png) 这个地方的cfg,就是之前我们看到的config中的cfg [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-39bd028ef349b9d004c9b1273c26266a309ad2fb.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-39bd028ef349b9d004c9b1273c26266a309ad2fb.png) 在这里解读一下代码,其实就是cfg变量通过Dec函数josn\_decode解密了一次然后我们在config文件中看到的BD和pre这就连接上了,所以pre这个变量就是表前缀。 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-8fa56a1387ed5defaa761a2d51b51ee3779be13f.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-8fa56a1387ed5defaa761a2d51b51ee3779be13f.png) 继续在这个admin.php登录页面我们断点之后可以看到变量Nm和Np的值是什么,同时这个地方执行了SQL语句,大概我们也可以看出来`Select ID,Nr From Jms_admin where Nm='admin' And Np='123"`(这个地方的Np进行了一次md5加密) [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-080814c1f089d5a20b6fa3503d02d4a9ddaa6f36.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-080814c1f089d5a20b6fa3503d02d4a9ddaa6f36.png) 这个地方尝试注入会被之前提到的编码实体化,其实在这里我们知道SQL语句之后去执行一下尝试看看。 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-358f637fb149ce0a357b4765135fae0f81bafe5b.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-358f637fb149ce0a357b4765135fae0f81bafe5b.png) 在这里我本来感觉有万能密码可以利用,结果发现并不是那么简单,这个地方还是之前提到的实体化编码,奈何技术太菜没办法绕过。 0x03 干就完了 --------- 在后台页面存在上传文件,还是抓包研究 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-208ae80caa0a914ad8b7fa433ec0de1a65fe426a.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-208ae80caa0a914ad8b7fa433ec0de1a65fe426a.png) 报错了这个地方,我们去看代码找到文件上传部分 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-4cf55951afc2c1c3f76d79f5097d892034797bcd.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-4cf55951afc2c1c3f76d79f5097d892034797bcd.png) 通过上传抓包分析之后 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-8d79d8420a85829f2459097d3b816e37f1921392.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-8d79d8420a85829f2459097d3b816e37f1921392.png) 很难过,没办法直接绕过上传php去getshell。 不过呢在这里上传上去了之后,存在一个改名字post包可以利用 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-afe2311512cd2a5d7642d8c4926932820a799583.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-afe2311512cd2a5d7642d8c4926932820a799583.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-9726b7b6bc48469f4a75c4b5590186cbe156d1fb.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-9726b7b6bc48469f4a75c4b5590186cbe156d1fb.png) 成功getshell。技术不够,姿势来凑,这篇文章废话挺多的,大部分都是代码讲解,其实感觉更像一篇随笔,师傅们别喷哈。 0x04 意外收获 --------- 在刚才上图中上传文件中,这个地方有个删除,尝试了一下存在任意文件删除 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-79e05d3d7f7a07362a5e1a139a2e7b41d88921bc.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-79e05d3d7f7a07362a5e1a139a2e7b41d88921bc.png) 这个地方删除burp抓包 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-f0878bc27f9dadfd6d9a36be15a4b2bc834d08f5.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-f0878bc27f9dadfd6d9a36be15a4b2bc834d08f5.png) 在根目录下新建一个2.txt;然后修改dir:./穿越回根目录直接可以删除文件 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-6498197e4b5aef033b054cc7f6c4d88336b830d5.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-6498197e4b5aef033b054cc7f6c4d88336b830d5.png) 后续查看相关代码分析 [![](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-0c88d065c4972a4421ea9c7adbe16a7db81acf11.png)](https://shs3.b.qianxin.com/attack_forum/2021/04/attach-0c88d065c4972a4421ea9c7adbe16a7db81acf11.png) 这个地方没有任何过滤限制,所以直接可以删除任意文件。 0x05 写在最后 --------- 其实这个应该有挺多洞的,文件总体来说也不大,我这php也是班门弄斧,边审计边学习,刚好在cnvd看到的,正好来练练手。希望各位师傅们共同学习,共同进步! 首发先知:<https://xz.aliyun.com/t/9114>
发表于 2021-04-21 17:48:36
阅读 ( 6533 )
分类:
漏洞分析
6 推荐
收藏
0 条评论
请先
登录
后评论
L4zily
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!