从webshell到代码审计
2022-12-16 08:3:36 Author: 黑客前沿(查看原文) 阅读量:17 收藏

一、写在前面

一次测试中遇到一个有趣的站点,写出来与君分享。

二、摸点阶段

打开站点,php+mysql的常见组合,FreeBSD作为其后端服务器,网站功能简单,只有几个登录口存在动态传参,着实简陋,万能密码尝试无果后直接祭出dirsearch。

得到一个info.php(phpinfo)外加一个phpmyadmin

打开phpmyadmin发现是401认证登录,并且版本非常低,为2.6.1,这个版本存在一个绕过登录漏洞:用户名:localhost'@'@',密码空,测试了下确实可以登录,但是权限太低什么都干不了,鸡肋。

简单手工尝试弱口令,直接以用户名root密码空登录成功。(一开始以为是漏洞,后来发现密码真的是空,手动汗颜=.=)

到这里基本上算获得了半个webshell了,运气着实不错。phpmyadmin+root权限的话可以直接写shell或者日志getshell,但是还差个绝对路径,回到站点首页疯狂尝试后没能得到绝对路径。(当局者迷,前面有个phpinfo这里忘记利用了)

于是换个思路,从数据库中找到网站管理员账号密码,登进后台,找个上传的地方直接传马,没有任何过滤,因为直接传的是哥斯拉加密的shell,所以不确定有没有waf,然后就shell了,过程没有一丝波澜,过于简单就不贴图了。(不要问我后台在哪,首页“管理区”几个大字)

三、代码审计

简单搜了一下网上有几套一样的模板,于是决定简单审一下这套代码。

快速审计的话无非就是全局搜几个关键字,比如uploadfwriteevalsystemselectinsertfile_put_content等等,然后代码里面分析一下有没有被过滤,如果没有再尝试构造语句或者数据包来验证。

把源码打包下回来,本地解压,用编辑器打开文件夹,然后全局搜关键字,发现以下几个漏洞:

1.任意文件读取导致的getshell

先上代码:

表面上看上去这里有个任意文件上传,但是目录不可控,上传的文件都到tmp目录下了,没啥大用。仔细一看,代码里发现使用了readfile函数,这个函数基本等于命令行的catls,读一个/etc/passwd,构造发包测试如下图:

成功读出来了,那么思路也就有了。直接读取mysql的配置文件,然后登录phpmyadmin,战斗就结束了

2.sql注入

简单看了一下,这套源码的注入非常多,但是基本都是登录后的功能,用处不大,唯一一处登录前的注入如下:

$ID没经过过滤直接传进sql语句执行,但是测试的时候发现有waf,此洞G。

四、写在最后

后利用任意文件读取在其他站点也复现成功,代码比较有年代感,漏洞应该比较多,时间关系没有深挖,留给下一个有缘人吧。


文章来源: http://mp.weixin.qq.com/s?__biz=MzA3MjIxNzk4OQ==&mid=2247484589&idx=1&sn=00568db3f545f7b738b94f4af77bc10c&chksm=9f20e047a8576951b55779eba29fe94a2d5b6a4f283c51b112818609ab9f857034cf00dbc652#rd
如有侵权请联系:admin#unsafe.sh