一、找网站SQL注入点
测试结束后,发现下图显示了一个信息查询框。一般信息查询框将与数据库存交互。
我输入数字1,通常会提示木材查询相关信息。
那我们使用1′测试后,发现相关信息的提示框没有弹出,也没有数据输出。大致判断这一点的存在sql注入,输出错误信息不正确。
大概猜测出SQL语句为 :
select * from A where id ='$_POST['id']';没有过滤用户输入的数据。
构建一个闭合语句,再次确认是否确认存在sql注入。
payload:1′ #
通过上面简单测试,已经确定了,肯定存在sql注入。
二、sqlmap跑一下
将数据包保存到文件中,直接使用sqlmap跑。很震惊,竟然有51个库。
查询后,找到后台的账号密码,然后我开始找到后台的艰难旅程。
三、找后台
我没有找到后台,但了robots文件。
从robots上看到是PHPCMS系统
使用PHPCMS系统通用后台地址admin.php,m=admin&c=index&a=login,不行,测完就发admin模型下的index控制器是存在的,当我们访问它时,它会自动跳到主页上,这也应该是开发人员后来修改的,专门做防黑。
四、寻找通用漏洞
这一步就不多说了。我测量了暴露的漏洞,但都不行,说明开发者还是有安全意识的,修复了所有的漏洞。
五、返回sqlmap
另一个想法是使用它sqlmap –os-shell直接获取shell,但这基本上是不可能的,因为网站的文件基本上是755权限,没有写作权限就会失败。然后我仍然抱着一丝希望去测试它。
使用sqlmap –os-shell需要知道网站的绝对路径,网站绝对路径可以通过中间件配置文件查看。
首先,我需要知道网站使用了什么中间件。nmap跑步,只看到404nginx ,nginx配置文件 //usr/local/nginx/conf/ngixn.conf
用sqlmap –file-read 去读nginx配置文件。通过配置文件只看到默认配置信息
要注意的是,如果是的话nginx.conf文件没有看到有价值的信息,有可能存在/usr/local/nginx/conf/vhost/网站域名.conf 这个位置,果然就是它。
如果你找到了真正的路径,你可以使用 sqlmap –os-shell然而,我当时预计的正式未写入权限,导致拿走shell失败。
六、使用sqlmap读取网站源码
通过上面的思路我们已经知道网站的真实路径,知道了是PHPCMS系统,然后我们可以读取网站的文件。
1、阅读路由文件 caches\configs\route.php 查看路由文件没有问题。
2、查看系统文件 caches\configs\system.php (本文件可查看域名访问背景是否打开)
3、我们上面说的admin模型下index控制器可以访问,知识会跳转到主页,然后我们下载index查看控制器文件。phpcms\modules\admin\index.php ,查看index控制器下的login方法没有修改。
七、侧渗透试验
有51个网站,我随机看了几个,数据库的结构是一样的,说明是同一个网站建设系统。
那我们用nmap扫描服务发现有8080服务,这个网站8080端口的网站dedecms系统搭建的时候,我碰巧有后台密码,可以通过dedecms上传文件。
八、代码审计
通过以上大致判断,admin模块index控制器有问题。
查看admin多了一个模块MY_index.php控制器,
查看MY_index.php 发现里面有一个结构函数,大概意思是打开这个方法判断你。right_enter的session无论值是空的,如果是空的,那就回到主页,这就是为什么我们一开始就不能打开后台。
经过看phpcms开发手册(我不熟悉这个系统的二次开发,我只知道是一个MVC结构的php如果需要对控制器进行二次开发,则需要在同级目录中创建一个程序MY_*.php文件大致意味着程序在创建文件后运行index当模块运行时MY_index.php里面的代码。
我明白了,因为没有,$_SESSION[‘right_enter’]因此,无法登录,因此需要先打开后台$_SESSION[‘right_enter’]赋值。经过不懈努力,找到了正确的文件。
这个文件大概意思就是当我运行改文件时会将$_SESSION[‘right_enter’]=1,然后跳转到登录界面。