謎の文字列を変換するpythonスクリプト
ちまたで噂のSQLインジェクションで埋め込まれるという謎の文字列。気になってたんだけどXORで解けるというのを発見した方がいて、胸のつかえがとれた気がします。平文←→謎文字列の変換スクリプトを書いたので載せておきます。
#!/usr/bin/env python # -*- coding: utf-8 -*- u''' sqlxor.py 謎文字列解読スクリプト 修正の必要が *もしあれば* http://d.hatena.ne.jp/kkomiyama/20090117に載せるように します。 解説: ord(i): 対象文字をascii文字コードに変換 mg[enum%10] : 2番目、12番目、22番目のiにはmgリストの2番目を当てがう chr ( ord(i) ^ mg[enum%10] ) : 上記2つのXORを取得した後、文字コードを文字に変換 pythonのリスト内包表記(list comprehension)を使って書いてます。シンプルにやるな ら -- for enum,i in enumerate(t_plain): t= chr ( ord(i) ^ mg[enum%10] ) t_crypt.append(t) -- となります。 ''' import sys mg=(0,1,2,3,4,4,6,4,1,9) def crypt(t_plain) : print "Before: " , t_plain t_crypt=[ chr(ord(i) ^ mg[enum%10]) for enum,i in enumerate(t_plain)] print "Result: " , ''.join(t_crypt) def main() : if len(sys.argv) == 1: print "Error. Please specify strings to process." print "Usage:", sys.argv[0] , " Strings_to_convert" else: crypt(sys.argv[1]) if __name__ =='__main__': main()
使用方法
上のソースをコピって、適当な名前に保存。tekitou.py "<変換したい文字列>”で変換できるはず。平文なら謎文字列に、謎文字列なら平文に変換します。
[MB] sparky[~/bin]: ./sqlxor.py http://blog.sparky.jp Before: http://blog.sparky.jp Result: huvs>+)fmfg/qsevm}/cp
Shellにもよるんですが、引数は”(ダブルクォート)、’(シングルクォート)あるいは個別にエスケープする必要があります。多分。
うーん
攻撃者の真の狙いはなんだろね。今のところ韓国と日本が集中的に狙われているみたいだけど。