注册/已登录 界面的常用利用方法

写在前面

当登录界面无法进行sql注入,或者当前需要管理员登录,并且能够轻松进行注册和执行登陆等后续操作(非专用用户),你就可以尝试从登陆后的场景来进行利用。

约束攻击

可以参考以前的

约束攻击

在注册的地方利用

二次注入

注册时未过滤敏感字符,比如注册admin' -- 用户,之后利用密码修改,通过sql语句就直接修改admin的密码,仅仅对注册时进行了转义

session

在Web中,session是认证用户身份的凭证,它具备如下几个特点:

1.用户不可以任意篡改
2.A用户的session无法被B用户获取
也就是说,session的设计目的是为了做用户身份认证。但是,很多情况下,session被用作了别的用途,将产生一些安全问题,我们今天就来谈谈“客户端session”(client session)导致的安全问题。

一般的session是存放在服务器端的,比如常规的php存放在服务器端,Django存放在数据库中,而flask是存储在cookie上的,也就是客户端session

1.json.dumps 将对象转换成json字符串,作为数据
2.如果数据压缩后长度更短,则用zlib库进行压缩
3.将数据用base64编码
4.通过hmac算法计算数据的签名,将签名附在数据后,用“.”分割

那么这样的直接储存要如何保证安全呢,那就是hmac加密

这里使用的是签名,但是session本身是可以直接查看的。

看一个小例子
在这里插入图片描述
简单来说,就是先进行解码操作,获得本身seeion的信息,可以看到带有token的值就是通过签名来的,所以我们只要得到那个secrect_key 我们就可以进行相同加密,仿造签名了

简单解释一下,签名是通过私钥完成的,可以防止伪造和重放,但是签名并不提供信息保护,也就是可以通过解密还原明文消息,但是我们必须得到私钥才能进行签名。

在flask中session保存在本地,最好习惯性地进行解密,查看敏感信息

对于session的利用,你可以使用这个脚本解密

#!/usr/bin/env python3
import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decode

def decryption(payload):
    payload, sig = payload.rsplit(b'.', 1)
    payload, timestamp = payload.rsplit(b'.', 1)

    decompress = False
    if payload.startswith(b'.'):
        payload = payload[1:]
        decompress = True

    try:
        payload = base64_decode(payload)
        print(payload)
        print("\n")
    except Exception as e:
        raise Exception('Could not base64 decode the payload because of '
                         'an exception')

    if decompress:
        try:
            payload = zlib.decompress(payload)
            print(payload)
        except Exception as e:
            raise Exception('Could not zlib decompress the payload before '
                             'decoding the payload')

    return session_json_serializer.loads(payload)

if __name__ == '__main__':
    #print(decryption(".eJw9kEGLwjAQhf_KkrOH2tqL4MGla4kwEyrRMLmItrU2Ni5UxXbE_77Bw17f431v5r3E_tTXt7OY3_tHPRH7thLzl_g6irlAXs5QXyKMNx0ZiKwDtq5JlG4SzFedyiglvR1Uji25cgS9HEBXF-QyQYaUeO3R77rgxcT0RF0yODmSKVhllbO5ZDRFDG7jyVhn9cZRvO4gaxjMTwJuOQRW6K3O5GTQZAr5yocbUtDfrdI7RxrPNisW4j0R5a0_7e-_l_r6_0KIPZGLmcpXrdWSycgBnfXEMEJWJmR2HeZyBL9lpcsIuYlVsfjgrgdfB8Sh8u11GidiIh63uv8MJKaReP8B9LloLQ.YUb0Sw.HOqA0gKuHnL61bDt3yFi7FqglI8".encode()))
    print(decryption(sys.argv[1].encode()))

加解密也可以使用github项目中的文件,当然你需要提供密钥,使用的时候用-h查看一下帮助就行。
工具地址:https://github.com/noraj/flask-session-cookie-manager

posted @ 2021-09-27 21:29  Sayo-NERV  阅读(274)  评论(0编辑  收藏  举报