首页 > 其他分享 >expect命令注入

expect命令注入

时间:2023-07-21 11:23:09浏览次数:44  
标签:spawn name send 命令 continue expect exp 注入

基础知识

Expect 是 Unix 系统中用来进行自动化控制和测试的软件工具 , 作为 Tcl 脚本语言的一个扩展,应用在交互式软件中

  • spawn命令启动新的进程来进行交互式的运行,spawn后的send和expect命令都是和spawn打开的进程进行交互的。
  • send命令接收一个字符串参数,并将该参数发送到进程。
  • expect命令等待一个进程的反馈,支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。expect还能理解一些特殊情况,如超时和遇到文件尾。

当使用交互式expect命令send密码的场景下,当未对外部输入数据进行转义校验时,可能存在命令注入的风险

expect工作原理

spawn启动指定进程—expect获取指定关键字—send向指定程序发送指定字符—执行完成退出。

简单实例

[root@localhost ~]# vim test.sh				=>	一般将expect脚本的后缀命名为".sh"
 
 
#!/usr/bin/expect			=>	expect的解析器,与shell中的#!/bin/bash类似
set timeout n				=>	设置超时时间n秒,表示下面的代码需在n秒钟内完成(-1代表永不超时),如果超过,则退出。用来防止ssh远程主机网络不可达时卡住及在远程主机执行命令宕住 
set name "12345"			=>	set设置变量,name的值为123456
 
 
spawn command1 command2..				=>	执行命令,也可以将变量作为命令输入
expect{									=>	接受执行命令返回的信息
 
"accept1" {send "instruction1\r"; exp_continue}						=>	匹配到accest1,发送instruction1 指令并且\r 回车执行
 
"accept2" {send "instruction2\r"; exp_continue}			=>	匹配到accest2,发送instruction2 指令并且\r 回车执行,exp_continue表示循环匹配
 
"accept3" {send "\r"; exp_continue}									=>	匹配到accept3表示直接回车执行
 
"accept4" {send "$name\r"}								=>	匹配到accept4,将变量值作为指令,并且回车执行
}
 
expect eof                             =>结束这个进程

expect命令注入

[root@localhost ~]# ./test.sh 123456";system cat /flag;"				
 
 
#!/usr/bin/expect			
set timeout n				
set name $1			=>	当name的值由外部输入攻击者可控时
 
 
spawn command1 command2..				
expect{									
 
"accept1" {send "instruction1\r"; exp_continue}						
 
"accept2" {send "instruction2\r"; exp_continue}			
 
"accept3" {send "\r"; exp_continue}									
 
"accept4" {send "$name\r"}		=>	匹配到accept4,将变量值作为指令,执行外部传入的命令-{send "123456";system cat /flag;"\r"}
}
 
expect eof

 

 

标签:spawn,name,send,命令,continue,expect,exp,注入
From: https://www.cnblogs.com/snad/p/17570779.html

相关文章

  • python最大化窗口命令
    Python最大化窗口命令在使用Python编写图形界面应用程序时,经常需要控制窗口的大小和位置。对于某些情况,我们可能需要最大化窗口以提供更好的用户体验。本文将介绍如何使用Python实现最大化窗口的命令。什么是最大化窗口最大化窗口是指将窗口的大小调整为屏幕的最大尺寸,以充分利......
  • Maven 常用命令
    参考https://www.digitalocean.com/community/tutorials/maven-commands-options-cheat-sheet......
  • 什么命令打印python的目录
    如何打印Python的目录作为一名经验丰富的开发者,你需要教会一位刚入行的小白如何实现打印Python的目录。下面将详细介绍这个过程,并提供每一步需要使用的代码和注释。流程概览为了更好地理解整个过程,我们可以使用表格展示每个步骤的概述。下面是实现打印Python目录的流程概览:......
  • linux排查命令
    都是高频好用的定位排查命令,冷知识:可以远程debugtomcat1,top2,top-Hp12798查看比较耗资源的线程3,jstack 12798 |grep 12799的16进制 31ff-A10-B10查看堆空间,上下10行4,ssh服务器安装arthas,(Arthas是Alibaba开源的Java诊断工具)执行thread命令。thread-428线程......
  • ssh免密码和ssh-copy-id命令
    linux系统配置免密码的方式:1:ssh-keygen -t rsa生成密钥2:ssh-copy-id-i~/.ssh/id_rsa.pubjifeng@jifeng02把本机的公钥追到jifeng02的 .ssh/authorized_keys里3:测试1.[[email protected]]$sshjifeng022.Lastlogin:ThuAug716:37:552014fromjifeng04......
  • 多个会话同时执行命令history记录不全的解决方案
    基本认识linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到\~/.bash\_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的。问题场景那么问题来了,假若之前history命令记录为c0,用户先打开了shell终端a,执行了一部分命令c1,又打开了一......
  • No qualifying bean of type 'java.lang.String' available: expected at least 1
    Spring中的依赖注入在Spring框架中,依赖注入是一种设计模式,它允许将对象的依赖关系从代码中解耦,并由框架来负责管理这些依赖关系。通过依赖注入,我们可以更容易地编写可维护和可测试的代码。什么是依赖注入?在传统的编程模型中,对象通常通过创建其他对象的实例来满足其依赖关系。这......
  • linux系统,kafka常用命令
    kafka版本过高所致,2.2+=的版本,已经不需要依赖zookeeper来查看/创建topic,新版本使用--bootstrap-server替换老版本的--zookeeper-server。[root@kwephis1160698bin]#./kafka-topics.sh--list--zookeeperlocalhost:2181Exceptioninthread"main"joptsimple.Unrecognized......
  • docker常用命令
    dockeroperationcommand:查询镜像sudodockerimages删除镜像dockerrmibf756fb1ae65(镜像id)#启动镜像#sudodockerrun-it-d--nametest01ubuntu18.04:docker_test1/bin/sh创建macvlan网络sudodockernetworkcreate-dmacvlan--subnet=172.16.2.1/23--......
  • java执行终端命令
    Java执行终端命令在Java中执行终端命令是一个常见的需求。它可以让我们通过Java代码调用并执行终端命令,从而实现与操作系统的交互。为什么要执行终端命令?在某些情况下,我们可能需要从Java代码中执行终端命令。以下是一些常见的应用场景:调用系统工具:有时候我们可能需要调用系统......