044-WEB攻防-PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式
044-WEB攻防-PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式
#知识点:
1、PHP-MYSQL-SQL注入-方式增删改查
(图片来源网络,侵删)
2、PHP-MYSQL-SQL注入-布尔&延迟&报错
3、PHP-MYSQL-SQL注入-数据回显&报错处理
演示案例:
➢PHP-MYSQL-SQL操作-增删改查
➢PHP-MYSQL-注入函数-布尔&报错&延迟
➢PHP-MYSQL-注入条件-数据回显&错误处理
➢PHP-MYSQL-CMS案例-插入报错&删除延迟
(图片来源网络,侵删)
#PHP-MYSQL-SQL操作-增删改查
1、功能:数据查询
- 查询:SELECT * FROM news where id=$id
2、功能:新增用户,添加新闻等
- 增加:INSERT INTO news (字段名) VALUES (数据)
3、功能:删除用户,删除新闻等
- 删除:DELETE FROM news WHERE id=$id
4、功能:修改用户,修改文章等
- 修改:UPDATE news SET id=$id
#PHP-MYSQL-注入函数-布尔&报错&延迟
盲注就是在==注入过程中,获取的数据不能回显==至前端页面。
我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
解决:常规的联合查询注入不行的情况
我们可以知道盲注分为以下三类:
1、基于布尔的SQL盲注-逻辑判断==(盲注可用布尔盲注(需要回显)==
regexp,like,ascii,left,ord,mid
(图片来源网络,侵删)- RegExp(正则表达式):
- 正则表达式是一系列字符,定义了一个搜索模式。它用于在字符串中进行模式匹配。
- 正则表达式提供了一种强大而灵活的方式来搜索、匹配和操作文本。
- LIKE(模糊匹配)
- LIKE 经常在数据库查询中使用,特别是在SQL中,用于在列中搜索指定的模式。
- 它允许使用通配符字符,如%(匹配任何字符序列)和_(匹配任何单个字符)。
- ASCII码:
- ASCII(美国信息交换标准代码)是一种字符编码标准,为键盘上的每个字母、数字和符号分配一个唯一的数字。
- ASCII 值表示文本字符,被广泛用于计算机中。
- LEFT(左侧提取指定数量的字符):
- 在字符串操作的上下文中,LEFT 是一种在一些编程语言或数据库查询语言中使用的函数。
- 它从字符串的左侧提取指定数量的字符。
- ORD:
- ORD 是一种在一些编程语言(例如 Python)中用于获取字符的 ASCII 值的函数。
- 例如,ord('A') 返回 ‘A’ 的 ASCII 值,即 65。
- MID:
- MID(或在一些语言中称为 SUBSTRING)是一种从给定字符串中提取子字符串的函数。
- 它需要指定的起始位置和要提取的子字符串的长度。
下面是 Python 的一个快速示例:
import re # 正则表达式(RegExp) pattern = re.compile(r'\d{3}-\d{2}-\d{4}') # 匹配社会安全号码模式 # SQL 中的 LIKE SELECT * FROM table WHERE column LIKE 'abc%' # ASCII ascii_value = ord('A') # 返回 65 # LEFT original_string = "Hello, World!" left_result = original_string[:5] # 返回 "Hello" # ORD ascii_value_of_H = ord('H') # 返回 72 # MID substring = original_string[7:12] # 返回 "World"
布尔相关注入语句:
#检查当前数据库名称的长度是否为7。 and length(database())=7; #检查当前数据库名称的第一个字符是否为 'p'。 and left(database(),1)='p'; #检查当前数据库名称的前两个字符是否为 'pi'。 and left(database(),2)='pi'; #检查当前数据库名称的第一个字符是否为 'p' and substr(database(),1,1)='p'; #检查当前数据库名称的第二个字符是否为 'i' and substr(database(),2,1)='i'; #使用 ord 函数将第一个字符的ASCII值转换为整数,并检查它是否等于112 and ord(left(database(),1))=112;
2、基于时间的SQL盲注-延时判断==(报错和回显都不需要)==
if,sleep
- IF语句:
- SQL中的**IF**语句用于条件执行,根据指定的条件执行一组SQL语句。
- 在SQL注入的上下文中,攻击者可能注入一个始终为真的条件,以操纵SQL查询的行为。
- SLEEP函数:
- SLEEP函数用于在执行查询时引入一定的延迟或暂停,可以指定延迟的时间。
- 攻击者利用**SLEEP函数进行基于时间的盲注,通过观察查询响应的延迟来推断有关数据库的信息。**
下面是一个简单的示例,演示了基于时间的盲注攻击:
假设存在一个有漏洞的查询:
SELECT * FROM users WHERE username = 'input' AND password = 'input'
攻击者可能注入以下有效载荷:
' OR IF(1=1, SLEEP(5), 0)--
在这个注入中,IF(1=1, SLEEP(5), 0)语句将始终为真,导致执行SLEEP(5)函数。双破折号(--)用于注释掉原始查询的其余部分,以防止语法错误。
延迟相关注入语句:
#单地引入了一个1秒的延迟。如果应用程序响应时间增加了1秒,那么攻击者可以推断注入条件为真。 and sleep(1); #if 函数被使用,但条件始终为假(1 > 2)。因此,sleep(1) 函数不会执行,而是返回0。这个语句的目的是验证条件的结果是否影响查询的响应时间。如果查询响应时间增加,说明注入条件为真。 and if(1>2,sleep(1),0); #但这次条件为真(1
- RegExp(正则表达式):
- 修改:UPDATE news SET id=$id
- 删除:DELETE FROM news WHERE id=$id
- 增加:INSERT INTO news (字段名) VALUES (数据)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...