目录
cookie,senssion,token的概念区别:
https://blog.csdn.net/2201_75843485/article/details/133324256
会话标识
概念
在 Web 应用程序中,会话标识是一种用于识别用户的机制,通常存储在客户端(通常是作为 cookie)和服务器之间。会话标识用于维护用户与应用程序之间的状态信息,以便在用户与应用程序之间的多次请求之间保持用户的身份和状态
session的使用
-
用户访问网站: 当用户使用其浏览器访问网站时,服务器会创建一个唯一的会话标识,通常称为
Session ID
。 -
Session ID 的创建:
- 服务器生成一个随机的
Session ID
,通常是一个长字符串,可以包含数字和字母。 - 这个
Session ID
通常会与用户相关联,以便在服务器端跟踪用户的状态和会话数据。
- 服务器生成一个随机的
-
Session ID 存储:
- 服务器将
Session ID
存储在服务器端,通常在内存中或数据库中。 - 服务器将
Session ID
发送给用户的浏览器,通常通过 Cookie。
- 服务器将
-
Cookie 存储:
- 浏览器收到
Session ID
后,通常会将其存储在 Cookie 中。 - Cookie 会在后续的请求中被浏览器自动发送到服务器。
- 浏览器收到
-
使用 Session:
- 当用户与网站互动时,服务器可以使用
Session ID
来查找或创建与用户关联的会话数据。这些数据可以包括用户的登录状态、购物车内容、个人偏好等。 - 服务器可以通过
Session ID
来检索或更新会话数据,以便向用户提供个性化的体验。
- 当用户与网站互动时,服务器可以使用
-
Session 超时和终止:
- 为了确保安全性和资源管理,会话通常会有一个超时时间,如果用户在一段时间内没有活动,会话可能会被自动终止。
- 用户也可以手动注销,终止会话。
总结
用户第一次通过浏览器访问服务器,登录后,服务器会建立一个session,包含用户信息,保存在服务器内,服务器会将session返回给浏览器和用户,用户将session保存在cookie里。用户以后都会携带含session的cookie访问该服务器,服务器就知道是哪个用户了,不用再次登录。
DVWA
这道题关键就是我们修改了cookie的值,实现免密码登录。
需要先在火狐浏览器下载个hackbar插件
LOW
源码分析
- 检查是否存在last_session_id,不存在就置0,存在就加一
- 然后将其作为session,存入cookie
步骤
先用brup抓包
用上面的post构造url:http://127.0.0.1/vulnerabilities/weak_id/
复制cookie,先清除浏览器的cookie
将Burp Suite或其他代理工具的Cookie复制到Hackbar(Burp Suite的一个组件)中时,清除浏览器的Cookie通常是为了确保你在登录DVWA时使用的是代理工具捕获的Cookie,而不是浏览器保存的Cookie
如果Cookie名称在浏览器中与代理工具(如Burp Suite)中使用的名称相同,浏览器中存储的Cookie会覆盖代理工具中的Cookie。这可能导致代理工具中捕获的Cookie失效,因为浏览器的Cookie具有更高的优先级
然后打开一个空白页面,打开hackbar,输入URL,把cookie复制进去,然后点击excute,就能实现无账号密码登录
MEDIUM
源码分析
用时间来为session赋值
时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。
时间格式 = 真实时刻(时间戳)+所处位置(时区)
时间戳生成工具https://tool.lu/timestamp/
用这个工具获取当前的时间戳,然后将dvwaSession =/*时间戳*/加入cookie中,剩下的过程跟LOW一样
HIGH
源码分析
MD5
单向加密算法
在介绍MD5算法前,很有必要解释一下单向加密算法。单向加密,人如其名,就是只能单向对明文进行加密,而不能逆向通过密文得到明文。该算法在加密过程中,在得到明文后,经过加密算法得到密文,不需要使用密钥。因为没有密钥,所以就无法通过密文得到明文。
概念
MD5,全称为 "Message Digest Algorithm 5",是一种广泛使用的哈希函数(散列函数)。它的主要目的是将输入数据转换成一个固定长度的散列值,通常是128位(16个字节),是计算机安全领域广泛使用的一种散列函数,用于确保信息传输的完整性。MD5是一种单向函数,这意味着可以轻松地将输入转换为散列值,但无法将散列值还原为原始输入(是一种单向加密算法,一种不可逆的加密方式)。
特点
-
固定长度输出:MD5 始终生成128位(16字节)长度的散列值。无论输入数据的大小如何,输出的散列值长度是固定的。
-
快速计算:MD5 是一种高效的哈希算法,计算速度较快,适合用于大量数据的哈希计算。
-
冲突问题:MD5 哈希算法存在冲突问题,即不同的输入数据可能会生成相同的散列值。这意味着不同的输入可以产生相同的 MD5 散列,尽管这在密码学应用中是不可接受的。
在源码中,MD5的使用是用来生成会话标识的一种方式。
-
$_SESSION['last_session_id_high']
存储了一个整数,它被用作计数器来生成不同的会话标识。 -
md5($_SESSION['last_session_id_high'])
这一行代码将$_SESSION['last_session_id_high']
的值作为输入,使用MD5哈希算法来生成一个固定长度(通常是32字符)的散列值。 -
这个散列值被用作会话标识,并存储在名为 "dvwaSession" 的Cookie中。每次用户提交POST请求时,
$_SESSION['last_session_id_high']
会递增,生成一个新的MD5散列值,作为会话标识。
这个机制的目的是在每次用户提交POST请求时,会生成一个不同的会话标识,以增加会话的随机性。通过使用MD5哈希算法,会话标识变得更难以预测,因为MD5会将输入转换为一串看似随机的字符。
步骤
抓包发送,然后解密
用的是这个网站md5解密 MD5在线解密 破解md5
再抓一遍
递增的
接下来跟LOW一样,伪造playload