第10课:Cookie

第10课:Cookie 注入

本课旨要:了解 SQL 注入中的 Cookie 注入原理以及过程,本节课没有实例,只有干货理论部分。

Cookie 注入原理

Cookie 注入在 SQL 注入里较为常见,也就是 GTE 注入里经常会有。

如果你学过 ASP,你应该会知道 Request.QueryString (GET) 或 Request.Form (POST),这就是我们用于读取用户发给 Web 服务器的指定键中的值。我们有时为了简化代码,会写成ID=Request("ID"),这样写法是简单了,但问题就来了。

我们先看 Web 服务是怎样读取数据的,它是先取 GET 中的数据,没有再取 POST 中的数据,还会去取 Cookies 中的数据。

所以我们该如何去测试是否存在 Cookie 注入呢?

请看实例:

http://www.xxx.com/1.asp?id=123

如果我们只输入http://www.xxx.com/1.asp时,就不能看到正常的数据,因为没有参数!

我们想知道有没有 Cookies 问题(也就是有没有 Request("XXX") 格式问题),先用 IE 输入http://www.xxx.com/1.asp加载网页,显示不正常(没有输参数的原因),之后在 IE 输入框再输入如下:

javascript:alert(document.cookie="id="+escape("123"));

按回车你会看到弹出一个对话框,其内容是:id=123 之后,刷新一个网页,如果正常显示,表示是用 Request("ID") 这样的格式收集数据,这种格式就可以试 Cookies 注入了。

在框里输入以下命令:

javascript:alert(document.cookie="id="+escape("123 and 3=3"));

刷新页面,如果显示正常,可以再试下一步,如果不正常,就有可能也有过滤了。

javascript:alert(document.cookie="id="+escape("123 and 3=4"));

刷新一下页面,如果不正常显示,这就表示有注入了,如果程序员是用Request.QueryStringRequest.Form收集数据的话,是无法利用 Cookies 绕过防注入系统进行注入的,因为服务程序是直截从 GET 或 POST 中读取数据的,Cookies 是否有数据,Web 服务器是不理的,所以就无法利用了。

Cookie 注入过程

我这里有个靶机,还未测试是否存在 Cookie 注入,一起来测试一下。

enter image description here

按照惯性,添加了单引号之后,没有报错,而是被拦截了。之后提示我这个信息:

非法操作!你已被系统记录做了如下非法操作↓
操作IP:192.168.1.1
操作时间:2018/1/29 22:22:32
操作页面:/about.asp
提交方式:GET
提交参数:id
提交数据:3'

显然,这是一个 ASP 程序的防 SQL 注入脚本,打开 F12 开发者工具我们看一下。

enter image description here

这里只显示了一个 Cookie,在上文我已讲过 Cookie 注入的原理,那么我们手工去试注入。

在这个页面新增一个 Cookie,如图所示:

enter image description here

设置的 Cookie 失效必须要晚于现在这个时间,设置好了如下图所示:

enter image description here

然后即可报错进行注入。

enter image description here

结语

按照理论来讲操作是可行的,但是 Cookie 注入的靶机我也没找着,无法再具体的演示,因此希望各位读者能够后面慢慢练手。

上一篇
下一篇
目录