次のエクスプロイトコードのコンパイルに問題があります。
http://downloads.securityfocus.com/vulnerabilities/exploits/59846-1.c
私は「gcc file.c」と「gcc -O2 file.c」を使用していますが、どちらも次のエラーを受け取ります。
sorbolinux-exec.c: In function ‘sc’:
sorbolinux-exec.c:76: error: stray ‘\302’ in program
sorbolinux-exec.c:76: error: stray ‘\244’ in program
sorbolinux-exec.c:76: error: ‘t’ undeclared (first use in this function)
sorbolinux-exec.c:76: error: (Each undeclared identifier is reported only once
sorbolinux-exec.c:76: error: for each function it appears in.)
Kali linuxとUbuntu 10.04の両方でコンパイルしてみたところ、同じ結果が得られました。
その行に無効な文字があります。これは私が見たものです:
ソースに無効な文字が含まれています。ソースに有効な非ASCII文字が含まれていない場合、おそらく二重引用符で囲まれた文字列リテラルにある場合は、次の方法でファイルを単にASCIIに戻すことができます。
tr -cd '\11\12\15\40-\176' < old.c > new.c
編集:iconvを使用したメソッドは間違った文字で停止するため、意味がありません。上記のコマンドラインは、サンプルファイルを使用しています。幸運を :-)
アスタリスクとして見える文字で同じようになりましたが、代わりにUTF-8シーケンスでした。
Encoder * st;
コンパイルが返されたとき:
g.c:2:1: error: stray ‘\342’ in program
g.c:2:1: error: stray ‘\210’ in program
g.c:2:1: error: stray ‘\227’ in program
342 210 227は、アスタリスク演算子のUTF-8であることがわかりました。
「*」を削除してもう一度入力すると、問題が修正されました。
おそらく、ネットからコードをコピーした(おそらく、ASCIIエンコードされたページではなく、UTF-8エンコードされたページ)サイトから)したため、コードをASCII:
" http://www.percederberg.net/tools/text_converter.html "
そこで、エラーをUTF-8に変換して手動でエラーを検出するか、自動的にASCIIに変換してすべての浮遊文字を削除することができます。
コンパイラが特別な文字を見つけたときはいつでも、これらのキングのコンパイルエラーを与えます....私が見つけたエラーは次のとおりです
エラー:プログラム内の浮遊 '\ 302'およびエラー:プログラム内の浮遊 '\ 240'
....
チャットメッセンジャーからコピーしたコードの一部。メッセンジャーでは、特殊文字のみでした.. vimエディターにコピーした後、正しい文字のみに変更されました。しかし、コンパイラは上記のエラーを与えていました.....解決した後、私は手作業で書いたstamenet .. :)
ここでの説明は正しいです。コードに無効な文字が含まれているため、どこか、Webサイトまたはpdfファイルからコードをコピーしたことが原因である可能性があることを付け加えました。
無効な文字を見つけるか、できない場合はコードを再入力してください。それは間違いなくコンパイルされます。
ソース: 迷走エラーの理由
Codoは10月5日に&current [i]が意図されたテキストであると正確に言いました(ソースがHTMLに挿入されたときに通貨記号が誤って導入されました(元を参照): http://downloads.securityfocus.com/脆弱性/エクスプロイト/59846-1.c
Codoの変更により、このエクスプロイトコードはエラーなしでコンパイルされます。私はそれを行い、Ubuntu 12.04のエクスプロイトを使用してルート権限にエスカレートすることができました。
この問題は、htmlからテキストをコピーしたとき、またはWindows環境で変更を行ってUnix/Solaris環境でコンパイルしようとしたときに発生します。
「dos2unix」を実行して、ファイルから特殊文字を削除してください。
dos2unix fileName.ext fileName.ext
コード上の無効な文字。 Word文書またはPDFファイルからコードがコピーされる場合の特別な一般的なコピーペーストエラー。
上記のtrコマンドの使用に問題があることに気付きました。 trコマンド[〜#〜] completely [〜#〜]は、 "smart quotes"。 "smart quotes"をこのようなものに置き換えるとよいでしょう。
これにより、置き換えられるもののプレビューが表示されます。
sed s/[”“]/'"'/g File.txt
これにより置換が行われ、WithoutSmartQuotes.txtという新しいファイルに置換が行われます。
sed s/[”“]/'"'/g File.txt > WithoutSmartQuotes.txt
これにより、元のファイルが上書きされます。
sed -i ".bk" s/[”“]/'"'/g File.txt
http://developmentality.wordpress.com/2010/10/11/how-to-remove-smart-quotes-from-a-text-file/
確かに、ファイルをASCIIに変換し、すべてのユニコード文字を吹き飛ばしてください。 それはおそらく動作します....しかし...
問題を解決するためのさらに2つのアプローチ:
正規表現は、非拡張ASCIIの一部ではないすべてのUnicode文字を検索します。 notepad ++では、FFFFまで検索できますが、まだ失敗していません。
[\ x {80}-\ x {FFFF}]
80は128、最初の拡張ASCII文字の16進数です。
[次を検索]を押して、空のスペースのように見えるものを強調表示したら、検索ダイアログを閉じて、Ctrl + Cキーを押してクリップボードにコピーできます。
次に、文字をユニコード検索ツールに貼り付けます。私は通常オンラインのものを使用します。 http://unicode.scarfboy.com/
例:コードに何らかの形で箇条書き(•)がありました。 Unicode値は2022(16進数)ですが、コンパイラーによってASCIIとして読み取られた場合、\ 342\200\242(3つの8進数値)を取得します。各8進数値を16進数に変換し、それらを一緒に壊すほど単純ではありません。したがって、「E2 80 A2」はコード内の16進Unicodeポイントではありません。
私と一緒にテキスト形式のコードをエディター(gedit)にコピーして貼り付けると、このエラーが発生しました。コードはテキストドキュメント(.odt)にあり、コピーしてgeditに貼り付けました。同じことをした場合は、コードを手動で書き直しています。