注册/已登录 界面的常用利用方法
写在前面
当登录界面无法进行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