渗透实录-01
写在前面
一次测试中遇到一个有趣的站点,写出来与君分享。
摸点阶段
打开站点,php
+mysql
的常见组合,FreeBSD
作为其后端服务器,网站功能简单,只有几个登录口存在动态传参,着实简陋,万能密码尝试无果后直接祭出dirsearch。
得到一个info.php(phpinfo)
外加一个phpmyadmin
。
打开phpmyadmin发现是401认证登录,并且版本非常低,为2.6.1,这个版本存在一个绕过登录漏洞:用户名:localhost'@'@'
,密码空,测试了下确实可以登录,但是权限太低什么都干不了,鸡肋。
简单手工尝试弱口令,直接以用户名root密码空登录成功。(一开始以为是漏洞,后来发现密码真的是空,手动汗颜=.=)
到这里基本上算获得了半个webshell了,运气着实不错。phpmyadmin
+root
权限的话可以直接写shell或者日志getshell,但是还差个绝对路径,回到站点首页疯狂尝试后没能得到绝对路径。(当局者迷,前面有个phpinfo这里忘记利用了)
于是换个思路,从数据库中找到网站管理员账号密码,登进后台,找个上传的地方直接传马,没有任何过滤,因为直接传的是哥斯拉加密的shell,所以不确定有没有waf,然后就shell了,过程没有一丝波澜,过于简单就不贴图了。(不要问我后台在哪,首页“管理区”几个大字)
代码审计
简单搜了一下网上有几套一样的模板,于是决定简单审一下这套代码。
快速审计的话无非就是全局搜几个关键字,比如
upload
、fwrite
、eval
、system
、select
、insert
、file_put_content
等等,然后代码里面分析一下有没有被过滤,如果没有再尝试构造语句或者数据包来验证。
把源码打包下回来,本地解压,用编辑器打开文件夹,然后全局搜关键字,发现以下几个漏洞:
1.任意文件读取导致的getshell
先上代码:
表面上看上去这里有个任意文件上传,但是目录不可控,上传的文件都到tmp目录下了,没啥大用。仔细一看,代码里发现使用了readfile
函数,这个函数基本等于命令行的cat
和ls
,读一个/etc/passwd
,构造发包测试如下图:
成功读出来了,那么思路也就有了。直接读取mysql的配置文件,然后登录phpmyadmin,战斗就结束了。
2.sql注入
简单看了一下,这套源码的注入非常多,但是基本都是登录后的功能,用处不大,唯一一处登录前的注入如下:
$ID
没经过过滤直接传进sql语句执行,但是测试的时候发现有waf,此洞G。
写在最后
后利用任意文件读取在其他站点也复现成功,代码比较有年代感,漏洞应该比较多,时间关系没有深挖,留给下一个有缘人吧。