在《黑客基础术语:什么是命令行和环境变量?》这篇文章里我讲过什么是SHELL?大家可以温故而知新一下。本文章是这个系列的第五篇,着重讲一下什么是黑客里的交互式SHELL以及在非交互式SHELL里如何运行交互式命令?
如果专业一点的解释,在SHELL里能执行交互模式(Interactive mode)的命令,那么你的SHELL就是交互式的了;
如果在SHELL里只能执行非交互模式(Non-Interactive mode)的命令,自然而然就是非交互式SHELL。
我们先来看下什么是交互式命令?
在命令行下运行ftp这个命令。
如下图,我们在cmd命令行运行,会出现FTP>这个管道符号,等待我们接收的命令。证实这是一个交互式SHELL。
但是你在实际黑客工作中,你会发现非交互式SHELL比例非常大。
在一些木马里边,得到的SHELL,基本都是非交互式的,还有你的Webshell里执行命令,也是非交互式的。
我们在非交互式SHELL要执行交互式命令怎么办呢?
我们举一个小例子,用Mimikatz抓密码,需要交互式执行,要输入两次命令:privilege::debug和sekurlsa::logonpasswords。
我们在非交互式SHELL下如何完成呢?
其实,可以用到管道符大于号和小于号。小于号是用来接收,大于号用来输出。如下图,把要执行的交互式命令写到1.txt,再用>>输出到2.txt里。用两个大于号是表示追加文件,不会覆盖2.txt里原来的内容。
再加增加一个非交互式提权的命令吧。
像很多Linux机器提权,要得到一个反弹的SHELL,如果得不到只能在Webshell里执行命令怎么办?像是php,可以用popen函数,类似于命令行的管道符,代码如下:
<?php
$sucommand = "/tmp/2.6.18-2011";
$fp = popen($sucommand ,"w");
@fputs($fp,"echo 22222 > /tmp/s.txt");
@pclose($fp);
?>