我们一般需要用户去进行输入一些命令,并且根据输入的指令来执行不同的命令

例如,如下的命令

Enter a number: 1

Enter name : hello

You re welcome 1,hello

如果完成自动化?

也就是如果对本地命令进行直接的使用,而不需要在执行过程中再次的二次输入了

我们将按照如上的命令将如下的步骤描述出来

我们实际的输入在文本中如下

1[Return]hello[Return]

翻译过来就是

“1\nhello\n”

我们按下了回车键,会发送\n,添加上\n后,就会发送给stdin的实际字符串

因此,通过发送与用户输入等同的字符串,我们就可以实现在交互式进程中自动传入输入

我们首先书写了交互式输入的脚本,然后用这个脚本去自动化的演示

#! /bin/bash

read -p “Enter number:” no;

read -p “Enter name: ” name

echo You have entered $no, $name;

那么如果需要自动发送输入

echo -e “1\nhello\n” | ./interactive.sh

You have entered 1, hello

那么可以看出输入马上就生效了

我们使用echo -e 来生成输入序列,我们可以配合这个操作去重定向输入到定向操作符来提供输入

echo -e “1\nhello\n” > input.data

cat input.data

1

hello

制作输入文件的时候,可以不用echo命令,直接进行输入

./interactive.sh < input.data

上面就是直接从文件中导入交互式输入数据

如果是需要从缓冲区溢出攻击打过交道,需要将十六进制的shellcode \xeb\x1a\x5e\x31\xc0

进行重定向,因为键盘没有对应的键值,所以,需要输入

echo -e “\xeb\x1a\x5e\x31\xc0”

我们已经描述了一种方法,通过stdin将所需的文本进行重定向,实现交互式输入程序自动化,但是我们没有检查所发送的输入内容,如果希望能够以特定的顺序发送我们的输入,那么就不能直接的输入,可以使用一个出色的工具expect,expect命令可以根据需要的输入提供对应的输入,我们看下如何使用expect

expect没有附带在多数常见的Linux发行版中,expect必须要用软件包去安装

具体的使用方式如下,一般配合sh文件去使用

#! /usr/bin/expect

spawn ./interactive.sh

expect “Enter number”

send “1\n”

expect “Enter name”

send “hello\n”

expect eof

运行方法

./automate_expect.sh

对于expect命令,配合使用的参数如下

spawn 参数指定需要自动化哪一个命令

expect 参数提供需要等待的消息

send是要发送的消息

expect eof 指明命令交互结束了

发表评论

邮箱地址不会被公开。 必填项已用*标注