漏洞重温之sql注入(六)
漏洞重温之sql注入(六)
sqli-labs通关之旅
Less-26
进入第26关,首先我们可以从网页的提示看出本关是get型注入。

我们给页面添加上id参数后直接去查看源码。

需要关注的东西我已经标注在上面了。
首先,我们先来观察第一个红框内的代码。
$id=blacklist($id);
这行代码表示,我们通过get请求传输的id参数,在放到代码中执行的时候,是被blacklist函数给转义过了,当然,这个blacklist函数可能是原有函数,也可能是自定义函数。
为了验证这个猜测,我们可以仔细观察代码,或者直接按ctrl+f在代码中搜索这个名称,看能否发现,如果发现了封装函数的代码块,就说明这个函数是自定义,如果没有,则为原有函数。

根据函数的内容,我们可以发现,网页将id参数中的or,and,/*,--,#,空格,正反斜杠都过滤了。
也就是说,我们这次想要进行注入的难度比上只过滤了or and 的第二十五关困难的多。
然后我们接着看其他红框内的代码。
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
这行代码告诉我们,如果想要在这个位置进行注入,我们需要使用单引号闭合。
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
这段代码告诉我们,如果代码正常执行,我们是会收获回显的,所以在这个位置,我们可以使用联合查询。同时,因为代码执行成功与否返回的结果不同,所以这里我们也可以使用布尔型盲注。
print_r(mysql_error());
最后的这行代码,是讲数据库错误打印出来,让我们可以在网页上看到,所以我们在这里也可以使用报错注入。
明白了这些之后,首先我们先观察一下几种注入payload的语法。
联合查询:
union select 执行语句,占位,占位 --
布尔型盲注:
length((database()))>1 --
报错注入:
updatexml(1,concat(0x7e,(执行语句),0x7e),1) --
首先,我们可以看到,这三条语句的后面,都使用到了注释。但是同时我们也清楚,注释是被转义。所以,可以将注释换成 or ' 来闭合语句中原有的单引号,这样我们就不需要用到注释了。
然后,我们还知道网页过滤了空格,所以可以看到,payload里面有两条不使用空格就可以完成,所以我们就可以直接将联合查询排除,选择使用另外两条语句。
因为盲注的步骤相比于报错植入要多的多,所以这里我们使用报错注入。
构造payload:
' || updatexml(1,concat(0x7e,(database()),0x7e),1) oorr '

PS:这里要注意的是,||就是or的意思,为什么前面使用双竖杠,就是因为如果使用双写来绕过对or的过滤的话,那原本应该是||updatexml的语句就会变成orupdatexml,这样会导致代码出错,致使无法执行出我们希望看到的结果,所以之前我们才没有选择使用空格较多的联合查询。
第二十六关,通关。
Less-26a

查看源码。

代码几乎和第二十六关一致,唯一有区别的地方,我已经用红框圈出来了。
首先我们可以第一行被红框圈起来的代码中知道,这里的闭合需要使用括号加单引号。
其次,因为报错信息打印的那一条被注释掉了,所以这里,我们无法使用报错注入获得我们希望获得的数据,所以这里只能使用盲注。
构造payload如下:
1000')||length((database()))>1||('


这里要注意,让id等于11000的原因,是因为我们要让前面的代码出错,不使用复数是因为横杠属于代码过滤内容。
第26a关,通关。
Less-27

27关源码。


第27关的过滤,相比于26关,有额外多了联合查询的关键字union的大小写,以及select的大小写和两个关键字首字母大写的情况。
但是,根据我们之前的分析,因为代码块执行成功与否所返回的代码块不同,我们可以使用布尔型盲注。以及执行失败的代码块中,有打印数据库报错信息的代码,所以我们可以使用报错注入来完成注入。
这里,我们先使用报错注入来进行。
构造payload:
' || updatexml(1,concat(0x7e,(database()),0x7e),1) or '

第27关,通关。
第27a关卡相对于27关,和26a相对于26关一样。
源码如下。

这里,我们只需要使用双引号闭合代码,并且使用盲注就可以了。
第27a,通关。
Less-28


28关的代码格式和前面几关基本一致,区别,在于这个自定义函数的过滤内容。
代码过滤了/*,--,#,空格等,但按照之前的逻辑。既然你过滤了这些东西,那我不使用就完全不影响我的注入了。
但是,根据上面的图片,我们看到打印数据库报错信息的位置被注释掉了。
也就是说,在这个位置,我们没办法直接使用报错注入获取我们希望获取的内容,所以,直接使用盲注构造payload:
1000') || length((database()))>1 ||('


第28关,通关。
因为28a跟28关破关方式几乎一样,代码层的区别只在于注释,而且相比较于28关,注释减少,所以这里就不做演示,按照28关的思路即可成功通关。
Less-29

29关的index页面,基本没有防御,我们可以直接使用单引号闭合,随后直接通过联合查询,盲注,报错注入等方式获取结果。
payload如下:
1' and 1=2 union select 1,2,3 --

1' and 1=2 union select 1,version(),database() --

而29关的login页面,则是基于单引号的参数污染。
payload如下:
id=1&id=-1' union select 1,version(),database() --

Less-30
30关相对于29关,只是闭合从单引号换成了双引号,其他内容完全一致,步骤是完全一致,这里就不过多赘述了。
index页面payload如下:
1" and 1=2 union select 1,version(),database() --

login页面payload如下:
id=1&id=1' and 1=2 union select 1,version(),database() --

第30关,通关。
漏洞重温之sql注入(六)的更多相关文章
- 漏洞重温之sql注入(五)
漏洞重温之sql注入(五) sqli-labs通关之旅 填坑来了! Less-17 首先,17关,我们先查看一下页面,发现网页正中间是一个登录框. 显然,该关卡的注入应该为post型. 直接查看源码. ...
- 漏洞重温之sql注入(七)
漏洞重温之sql注入(七) sqli-labs通关之旅 Less-31 首先,进入31关,我们先添加上id参数. 然后,我们查看源码. 我们门可以看到,index页面源码其实很简单,网页也没有对我们的 ...
- DVWA漏洞演练平台 - SQL注入
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...
- pikachu漏洞练习之sql注入
这里因为实验的时候只记录了一部分所以就展示一部分 1.1.1数字型注入 (1)看到界面发现是查询id功能,没有在url里看到有传参所以应该是post方法提交数据. (2)进行sql注入之前我们最好是先 ...
- 【漏洞汇总】SQL 注入漏洞之 mysql
日期:2019-07-23 19:55:59 更新:2019-08-02 10:40:37 作者:Bay0net 介绍:Mysql 注入笔记 0x01. 基本信息 1.1 基本术语 数据库: 数据库是 ...
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...
- WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞
漏洞名称: WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞 CNNVD编号: CNNVD-201310-499 发布时间: 2013-10-23 更新时间: 20 ...
- WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞
漏洞名称: WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞 CNNVD编号: CNNVD-201309-388 发布时间: 2013-09-24 更新 ...
- 关于sql注入漏洞的挖掘及渗透工具简介
大量的现代企业采用Web应用程序与其客户无缝地连接到一起,但由于不正确的编码,造成了许多安全问题.Web应用程序中的漏洞可使黑客获取对敏感信息(如个人数据.登录信息等)的直接访问. Web应用程序准许 ...
随机推荐
- Python编写的桌面图形界面程序实现更新检测和下载安装
在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...
- MySql实现 split
substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数 例子:str=www.baidu.c ...
- 内网 Maven 编译
内网 Maven 编译 有个特殊的需求,在不联网的情况下编译 Java 项目. 想到两种方案: 搭建 Nexus 私有镜像仓库. 直接把依赖 jar包 放在编译机的 maven 本地库中. 步骤简述 ...
- sftp与ftp的区别
SFTP和FTP非常相似,都支持批量传输(一次传输多个文件),文件夹/目录导航,文件移动,文件夹/目录创建,文件删除等.但还是存在着差异,下面我们来看看SFTP和FTP之间的区别. 1. 安全通道FT ...
- 2020-06-22:已知两个非负数的异或值为M,两数之和为N,求这两个数?
福哥答案2020-06-22: 1.遍历法时间复杂度:O(N)最好空间复杂度:O(1)平均空间复杂度:O(sqrt(N))最坏空间复杂度:O(N)[0,N/2]依次遍历,符合条件的就是需要的结果. 2 ...
- go微服务系列(三) - 服务调用(http)
1. 关于服务调用 2. 基本方式调用服务 3. 服务调用正确姿势(初步) 3.1 服务端代码 3.2 客户端调用(重要) 1. 关于服务调用 这里的服务调用,我们调用的可以是http api也可以是 ...
- 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
因客户需求,与第三方对接,调用非托管DLL,之前正常对接的程序,却总是报“内存已损坏的异常”,程序进程直接死掉,折腾到这个点(2018-05-11 00:26),终于尘埃落定,直接上程序. 之前的程序 ...
- .Net MVC5(.Net Framework 4.0+)多语言解决方案
最近项目需要做多语言,原先是2种语言(中文/英文),现在又要加一种语言,成了3种.那么原来的方式肯定不适用了,只能升级解决方案. 原来的写法,使用三目表达式,按照当前全局变量的语言类型,返回不同的语言 ...
- 用心整理的 献丑啦 一些关于http url qs fs ...模块的方法
http: const http = require("http"); http.createServer((req , res)=>{ req:request 请求 ...
- 微信小程序内置组件web-view的缓存问题探讨
前言:博客或者论坛上面,还有自习亲身经历,发现微信小程序的webview组件的页面缓存问题相当严重,对开发H5的小童鞋来说应该困扰了不少.很多小童鞋硬是抓破脑袋也没有办法解决这个问题,那我们今天就来探 ...