Access-Cookie注入和偏移注入

Access:是一种数据库,和MySQL、MSSQL是一样的,都是存东西的

Cookie注入:就是接受Cookie传参而产生的注入

Cookie是什么呢?

Cookie就是代表你身份的一串字符串,网站用来验证你的身份的东西

我们进入百度,按F12,找到application,点击cookies,就能看到我们的cookie了。

Access-Cookie注入和偏移注入_第1张图片

 Cookie注入老一点的ASP网站常见,PHP5.4及以上的版本他的$_REQUEST就不再接受cookie传参了

如果说开发用了$_REQUEST来接受传参,而POST和GET传参都被WAF拦截了,那我们或许可以尝试一下COOKIE进行传参,万一对COOKIE没有检测呢,那是不是就绕过检测了

设置cookie的方法

一、Burp抓包,修改数据包,直接添加一个cookie字段在里面

注意,cookie传参值需要URL编码一下,编码后再传入

Access-Cookie注入和偏移注入_第2张图片

 二、直接在浏览器当前页面按F12,找到Console,输入document.cookie="id="+escape("171")

这里演示的是Google浏览器,火狐的话也是按F12,然后找到存储就好了、其他的一样

注意,document.cookie=这是一个整体,"id="这是一个整体u,+是用来拼接的,escape()是JS的一个函数,用来编码字符串的,是为了更好地兼容,这样传参的时候记得删掉蓝色箭头指的?id=171的部分,因为GET传参的优先性比COOKIE传参的优先性高,浏览器会优先接受GET传参

Access-Cookie注入和偏移注入_第3张图片

当我们将GET传参的部分删掉以后,在F12页面,输入document.cookie="id="+escape("171"),页面显示的是id=171的内容,输入document.cookie="id="+escape("172"),的时候页面会显示id=172的内容,输入以后按回车,然后按回车刷新一下页面就好了

Access-Cookie注入和偏移注入_第4张图片 

 那么在进行Cookie注入的时候,其实我们的步骤和前面的显错注入、盲注这些是一样的

判断有无注入,and 1=1 、and 1=2 这样,知道了有注入之后,就是判断字段数,然后判断库名

当然,Access数据库呢,就Access一个数据库,所以没必要知道库名,Access数据库呢也没有自带表,所以我们无法通过联合查询的方法来直接知道表名、字段名

方法就只有爆破了

Access-Cookie注入和偏移注入_第5张图片

 爆破的时候,我们需要用到 exists(检测子查询中是否有值)

我们输入 and exists(select*from 表名)

例如:and exists(select*from admin),如果页面正常,就是有这个表,如果没有这个表,页面显示错误。那我们就可以利用这一点,抓包,然后选中admin这个地方,然后爆破就好了

这里爆破的话,可以直接用SQLmap的字典,在你安装SQLmap的目录下,找到data这个文件夹,找到txt这个文件夹,然后找到common-tables.txt这个文件就行了。

Access-Cookie注入和偏移注入_第6张图片

 在爆破的时候,点击Load这个地方加载字典,找到刚才所说的SQLmap的目录,然后把不需要的点击Remove删掉就行了,然后点击开跑右上角那个地方,然后看长度就可以知道哪个有,哪个没有了,长度差别还是挺大的

Access-Cookie注入和偏移注入_第7张图片

 跑字段的话,就选中*那个地方就好了,然后选中SQLmap目录里的data文件夹、txt文件夹下的common-columns.txt文件就好了

想要知道里面的数据,这时候我们就需要知道他的显错位,我们输入 and exists(order by 1),这样一直试到页面出错为止,这里我们查出来有十个字段,然后输入union select 1,2,3,4,5,6,7,8,9,10 from admin,这里一定要跟一个刚才查出来的表名,查看页面显错位

Access-Cookie注入和偏移注入_第8张图片

 然后在显错位上面输入我们想要的数据,比如:username和password(这两个是我们跑出来的,存储账号密码的字段),这里就成功拿到了管理员的账号密码,这里的密码使用MD5加密过的,解密以后就好了

Access-Cookie注入和偏移注入_第9张图片

当然,如果嫌麻烦的话,也可以直接使用SQLmap一把梭,直接使用命令:sqlmap.py -u "网址" --cookie "id=171" --level 2,就OK了

偏移注入

偏移注入要注入表的字段数,要小于当前页面的字段数

在了解偏移注入之前,我们需要知道下面这个知识点

我们在查询某个表里面的所有字段的时候,我们一般写的查询语句是这样的:select * from admin,这个*号表示查询这个表下面的所有字段,我们也可以这样写:select admin.* from admin,.表示拼接,*表示所有字段,这个意思就是查询admin表下的所有字段

我们可以在下图看到,这两个语句查询到的东西都是一样的

Access-Cookie注入和偏移注入_第10张图片 Access-Cookie注入和偏移注入_第11张图片

我们假设news这个表里面有十个字段,5这个位置是显错位,写以下语句

select * from news where id=1 union select 1,2,3,4,5,6,7,8,9,10

我们再假设admin这个表里面有三个字段,分别是id、username、password,我们把这个拼接到上面这个查询语句的显错位中,这个语句就变为了

select * from news where id=1 union select 1,2,3,4,id,username,password,6,7,8,9,10 

这个news表中原本有十个字段,我们将admin表中的三个字段拼接上去以后,就变为了十二个字段,明显不对,所以我们需要删掉两个字段,让他重新变为十个字段,上面我们说了,查询所有字段有一个更为简单的写法,那就是admin.*,所以这个语句就变为了

select * from news where id=1 union select 1,2,admin.*,6,7,8,9,10  这个语句等价于

select * from news where id=1 union select 1,2,id,username,password,6,7,8,9,10

而5这个位置是显错位,所以password这个字段的数据就显示出来了,当我们把admin.*的位置上移动以后,就可以一步一步地将id、username的数据知道

例如:select * from news where id=1 union select 1,2,3,admin.*,7,8,9,10  这个语句等价于

select * from news where id=1 union select 1,2,3,id,username,password,7,8,9,10

这样就把username字段的数据知道了,再将admin.*往后移一位,就得到了id字段的数据

例如:select * from news where id=1 union select 1,2,3,4,admin.*,8,9,10

这个就是偏移注入

为什么偏移注入要注入表的字段数,要小于当前页面的字段数呢?我们可以在靶场试一下

我们输入union select 1,2,amdin.*,4,5,6,7,8,9,10 from admin,如果说admin表中只有一个字段的话,页面会回显正常,如果大于一个字段,就会回显错误,那我们就可以利用这个办法来试出admin表中有几个字段数,我们一个一个试,最后发现admin表中的字段要大于这个页面的十个字段

Access-Cookie注入和偏移注入_第12张图片 Access-Cookie注入和偏移注入_第13张图片

 这样的话,就无法进行偏移注入了,这个就相当于你有一把尺子,长度是8,而你要量的东西长度是20,就没办法一下子量出来,这样的话,我们就需要找一个字段数比较多的页面了

偏移注入的步骤:

判断出来就注入以后,查询字段数、查看回显点、然后用表名.*来判断你要注入的表的字段数,然后偏移位数,让你想要的数据在显错位上面显示出来

偏移注入的局限性也是比较大的,如果显错位比较少,你就可能没办法得到你想要的数据

当然,也有可能存在隐藏的显错位,我们可以给页面的显错位一个标示性的数字,比如520520,然后给所有字段后面添加上,然后在前端页面查看一下,有没有没在页面显示,但是能在前端代码中看到你这个标识的

Access-Cookie注入和偏移注入_第14张图片

 

 

 

你可能感兴趣的:(渗透测试,网络安全)