0x00.前言

事情的起因是,前几天想看一部番——《心理测量者》,无奈的是这部番已经被封了,只好去Google找了一个可以看的影视资源网站。出于习惯,对这个网站展开了一次简单的测试。

0x01.发现注入点

image-20211106102657455

网站的页面是这样的。有个搜索框可供用户搜索自己想看的影视剧,首先很容易想到的是SQL注入,输入一个分号试试。

image-20211106103058833

果不其然,出错了,这里很可能存在SQL注入漏洞。为了方便测试,用burp重新抓一遍包。

image-20211106103644820

可以注意到,网站使用的POST方式请求,但注入点却是在url中,且使用了伪静态。在burp中,我们输入的分号被url编码为了%27,奇怪的是我们输入的分号为何从一个变成了两个,且用了一个“-”连接。猜测应该是网站的某种设置,会将用户的输入重复两次反映到url上,具体原因我们也不比深究,因为这对我们没有影响。经过我测试,注入点在两个重复参数的前一个参数里,所以后面的一个我们可以不用管。

0x02.使用sqlmap测试

既然发现了注入点,先将数据包保存,放到sqlmap跑一下试试,在%27后加一个*号,告诉sqlmap这里需要测试。

image-20211106104704022
python3 sqlmap.py -r test.txt --batch -v 3 --level 5
image-20211106105447678

可以看到失败了,应该是我对sqlmap的使用还不够熟悉,只能放弃,自己手工来测试了。

0x02.手工测试sql注入漏洞

来看网站报错的信息,

image-20211106105620732

可以看到网站在此处使用的sql语句,

insert into ***_enewssearch(searchtime,keyboard,onclick) values('1636166120',''',1) ON DUPLICATE KEY UPDATE onclick=onclick+1

一条insert插入语句,那么首先可以把联合查询注入的可能性给排除了。再来分析一下这条语句的作用,它向数据库插入了三个字段:searchtime,keyboard,onclick,分别对应后面的三个值:1636166120,',1。1636166120是一个时间戳,“ ' ”是我们刚刚输入的,而1是搜索次数。所以,这条语句的作用在于记录用户搜索的是什么,以及搜索时间和次数。而我们作为一个“用户”能控制的值只有keyboard这个值,注入就在这里产生。

so,我们要做的就是闭合语句,再插入我们想要执行的语句。

构造如下payload:
    1' or updatexml(1,concat(0x7e,(select user()),0x7e),0) or '

将我们构造的payload的放到输入框搜索,可以看到成功执行了,显示出了当前数据库用户。

image-20211106110943347

这条payload,将前后的语句都分别用' or和or '闭合了,至于为什么不用注释符闭合后面语句,因为这是一条插入语句,注释符闭合会破坏原本语句的结构,导致sql语句执行出错。

帝国CMS

在注入过程中,网站数据库找到一个表名引起了我的注意:***_ecms_movie

image-20211106111703653

有种似曾相识的感觉,这种带前缀的表名,一般都是某些CMS会使用的,所以猜测这个影视网站应该也是使用了某套CMS的。直接复制拿到百度搜索一下。

image-20211106112121780

果不其然!这一套cms我是有印象的,只是一直没有去详细了解过。临时了解了一下,这套cms在<=7.5的版本下有任意代码执行漏洞和后台getshell漏洞,一阵激动。

尝试访问网站默认后台地址/e/admin,

image-20211106112742542

成功~而且可以发现,这是个二改的cms。尝试默认密码admin访问,

image-20211106112916475

给我跳转到/e/admin/ecmsadmin.php后网页变成了空白,没有反映,不知道为什么。后来在fofa上搜同类站的后台登录,账号/密码错误都会跳转有提示的,而这个站并没有。帝国cms的任意代码执行漏洞和后台getshell漏洞都发生在后台处,进不去后台,无疑也利用不了这两漏洞,有点难受了。

XSS漏洞

网站还有个反射型XSS漏洞,可以看到用户的输入会回显到页面上。

image-20211106114000453

构造如下payload:

<img src='w.123' onerror='alert("you are be hacked!")'>
image-20211106114253409

payload成功执行~~

总结

总的来说,对这一次的测试还是有点遗憾的,帝国cms后台的账户密码被存储在一张名为enewsuser的表中,但是出了一点问题,没有爆出来;网站的MySQL版本在5.6.32,这个版本是有本地提权漏洞的;也是因为自己功底不到位,所以只能止步于此,与root权限无缘了=_=~~