我们一般需要用户去进行输入一些命令,并且根据输入的指令来执行不同的命令
例如,如下的命令
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 指明命令交互结束了