SQL注入-1

SQL注入-1

本次sql注入以mysql为例,整理的千锋网络视频的内容

1. 关系型数据库

有明显的层次结构库名|表名|字段名|字段内容
MySQL\ACCESS\mssql\oracle

2. SQL注入类别

  • 联合查询注入
  • 报错注入
  • 布尔盲注
  • 延时注入
  • 多语句查询注入

3. MySQL

3.1元数据数据库
  • information_schema
    • tables
      • table_name\tabel_schema
    • columns
      • column_name/table_name/schema_name
3.2 常用函数与参数
version()//mysql版本
database()
user()
current_user()
system_user()//系统用户名
@@datadir//数据库路径
@@version_compile_os//操作系统版本
length()
substring()
concat()
caoncat_ws()//有分隔符
group_concat()
rand()
sleep()

3.3 SQL注入点判断
3.3.1联合查询

联合查询:利用union select语句,会同时执行两条select语句,生成两张虚拟表。
联合查询必要条件

  1. 两张虚拟表有相同列数。
  2. 虚拟表对应列数的数据类型相同。

A union select B时,一般页面只显示A的内容,B的内容不显示,这时可在A后加入and 1=2等语句,将A的内容设为false,这种情况下就会在页面中显示B的内容。

联合查询时可用到hex(table_name)这个函数,为了避免引号影响,将文本转换为十六进制(数字格式);也可用到group_concat(table_name)这个函数,

3.3.2报错注入

group by注入
利用group by重复建冲突建报错

? id=33 union select 1,2,concat(left(rand(),3)'>',@@version,'>')as a,4,5,6 from information_schema.tables group by a--+

如果information_schema.tables等关键表被禁用,可用以下语句构造一个表

select 1 union select null union select !1
select concat(left(rand(),3),'>',select version(),'>')as x ,count(*) from (select 1 union select null union select !1)as x group by a--+

如果rand()和count()被禁用,可以用以下方式

select min(@a:=1) from (select 1 union select null union select !1)a group by concat('>',@@version,'>',@a=(@a+1)%2);

** SQL语句解析过程**

  1. from:from标识了这条语句要查的数据源,形成虚拟表VT1。
  2. where:对VT1过程中生成的临时表进行过滤,把满足where字句的列插到VT2
  3. group by:把VT2生成的表按照group by 中的列进行分组,形成VT3。
  4. having:对VT3进行过滤,满足条件的数据被加到VT4
  5. select:对select子句中的元素进行处理,形成VT5表(先计算表达式,再distinct之类)

** XPath报错注入**

  1. extracvalue():对xml文档进行查询的函数,语法为“extractvalue(目标xml文档,xml路径)”,正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错。
id?=33 and extracvalue(1,concat('>',(select version()),'<')--+`

注:extractvalue()能查询字符串的最大长度为32,如果想要的结果超过32,就需要用substring()函数截取,一次查看32位。
2. updatexml():更新xml文档的函数,语法为“updatexml(目标xml文档,xml路径,更新的内容)”,正常查询第二个参数的格式也应该是/xxx/xx/xx/xx,其他格式就会报错

?id=33 and updatexml(1,concat('>',select version(),'<'),1)--+
3.3.3布尔盲注
id=1 and ascii(substr(database(),1,1))>0
3.3.4延时注入

利用sleep()语句

?id=3 and if(length(database())=3,sleep(5),1)--+

MySQL注入基础及语句

### 回答1SQL注入是一种常见的攻击方式,攻击者通过在Web应用程序中注入恶意的SQL语句,从而获取敏感信息或者执行非法操作。SQL注入攻击的原理是利用Web应用程序没有对用户输入的数据进行充分的过滤和验证,从而导致恶意SQL语句被执行。为了防止SQL注入攻击,开发人员需要对用户输入的数据进行严格的过滤和验证,同时使用参数化查询等技术来防止SQL注入攻击。 ### 回答2: SQL注入攻击是指攻击者通过把恶意的SQL语句插入到应用程序输入数据中的方法,来实现非法操作或篡改数据的一种攻击技术。攻击者利用SQL注入漏洞可以获取敏感数据,改变数据库中的数据,甚至完全控制应用程序。 攻击者利用SQL注入漏洞,可以通过几种方法来实现攻击。以下是一些常见的SQL注入攻击方式: 1.基于错误的注入:攻击者可以通过注入恶意SQL语句,导致应用程序出现错误或异常,从而获得应用程序内部的敏感数据。 2.盲注注入:攻击者可以通过注入语句,来获取数据库信息,如数据库版本,或者判断SQL查询的结果是否正确。 3.联合查询注入:攻击者可以通过在注入语句中添加SELECT语句,来获取敏感数据或执行一些非法操作。 SQL注入攻击作为一种常见的网络攻击方式,需要我们在开发过程中加强对应用程序输入数据进行过滤和检查,以防止SQL注入漏洞。以下是一些预防SQL注入攻击的方法: 1.使用参数化查询:应用程序可以使用参数化查询语句,通过绑定参数来保证输入数据不会被作为SQL语句的一部分执行。 2.限制用户输入:应用程序可以限制用户输入的字符集合,或对用户输入的内容进行验证和过滤。 3.对于敏感数据,可以使用加密等措施来保证数据的安全性。 总之,应用程序开发者需要认识到SQL注入攻击的威胁,并在开发过程中采取一些预防措施来保证应用程序的安全性。 ### 回答3: SQL注入是一种常见的网络攻击方式,旨在通过在输入框或者URL中注入SQL代码,以达到破坏或者获取数据库数据的目的。SQL注入可以通过输入合法的SQL语句来实现,或者通过输入特定的字符来执行恶意代码。 SQL注入攻击的原理在于,攻击者在输入框或者URL中输入包含SQL关键词的字符,这些字符会被解释成SQL命令执行,并且会以其余参数的身份执行,这意味着该攻击可以以管理员的身份执行,且能获取数据库的全部数据。 SQL注入攻击的表现可以是网站遭到入侵或者数据库中数据突然消失或者受到修改。为了防止SQL注入攻击,应该首先排除参数化输入的漏洞,即对于用户输入的数据需要进行过滤,过滤掉控制字符,即可有效地防止SQL注入攻击。 总之,SQL注入攻击是一种网络安全威胁,要防范此类攻击,网站管理者应当在网站上做好安全措施,确保用户输入的数据进行有效的过滤和检查以保证安全性。同时,网站用户也应避免输入不必要的信息和暴露个人隐私等信息,以避免成为攻击者的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值