概述
字符型注入即传入有问题的参数,这个参数在程序员代码那边,是有带引号闭合的。
通常推测程序的伪代码是:
$username=$_GET["username"];$sql="select * from users where username=' " . $username." ' ";$sql="select * from users where username=' $username ' ";
如果传入的字符串没有过滤,则必然引发SQL注入攻击。攻击的要点是,如何正常的闭合单引号,使之形成一个完整的SQL语句。可对比整数型。
案例

请同学们完全照搬整数型的操作来完成。也可以跟着老师一起搬一次!
随便输入几个字符,带引号或者不带引号。看看效果。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’111’‘’ at line 1。
尝试用单引号去闭合一下看效果:

当用单引号去闭合的时候,第一张图没有报错,第二张图报错了。 从而推测它是一个有单引号闭合的完整的sql语句。
听懂了的同学,可以冥想一下,对比后台推测的服务端代码。
听得懵懂的同学,可以直接认为:想要执行和注入自己的恶意的sql代码,就需要对这个字符串做个单引号闭合,然后好方便插入其他的sql语句即可。
那后端的SQL语句注入的位置,应该是下面青色的部分。暴库:
select from users where username=’*111’ and (extractvalue(1,concat(0x7e,(select database()),0x8e))) and ‘1’=’1‘

剩下的暴表,暴列,暴数据,可以依葫芦画瓢。
补充: 关于爆数据用到了函数 extractvalue 以及 extractxml。其他的报错方式只做了解,扩展知识面。
比如: select from users where username=’*111’ and a() and ‘1’=’1‘
a()就是一个不存在的函数,此时此刻报错的信息如下:
爆出了库名。
这些方法能记住多少是多少? 想去参见比赛的,可能需要记得多一点。
