博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
因缺思汀的绕过
阅读量:6555 次
发布时间:2019-06-24

本文共 1081 字,大约阅读时间需要 3 分钟。

访问解题链接去访问题目,可以进行答题。根据web题一般解题思路去解答此题。看源码,请求,响应等。提交与题目要求一致的内容即可返回flag。然后提交正确的flag即可得分。web题主要考察SQL注入,XSS等相关知识。涉及方向较多。此题主要涉及源码审计,MySQL相关的知识。

 

flag格式 CTF{}

解题链接: http://ctf5.shiyanbar.com/web/pcat/index.php

1.查看源代码

2.打开链接http://ctf5.shiyanbar.com/web/pcat/source.txt,出现PHP代码

可以得知数据库中的记录就只有一条,这部分逻辑大概就是通过提交的uname查询出结果,如果结果只有一条则继续,如果查询结果中的pwd字段和post过去的key值相同,则给出flag。

这时就要用到注入的一个小技巧,我们使用group by pwd with rollup 来在查询结果后加一行,并且这一行pwd字段的值为NULL
在mysql官方文档中是这样描述rollup函数的:

 在GROUP BY子句中使用WITH ROLLUP会在数据库中加入一行用来计算总数。

再结合limit和offset就可以写出一个payload
即:输入的用户名为:' or 1=1 group by pwd with rollup limit 1 offset 2 #
#注释
SELECT * FROM interest where uname=' ' or 1=1 
group by pwd with rollup  (在数据库中添加一行使得pwd=NULL)
limit 1 (只查询一行)
offset 2  (从第二行开始查询)

 

注意三点:《1》,关键字被过滤;《2》,单行输出,所以用limit,因为逗号被过滤,所以不用limit 0,1检验行数,在这里等同于 limit 1 offset 0,检验发现只有两行:1' or 1 limit 1 offset 1# 。《3》使pwd为空,有数据的情况下怎么搞出一条空的数据?---那就伪造一条:group by with rollup 是把所有信息在最下面整合汇总一条的功能,并且可指定字段汇总为空!!所以执行:1' or 1=1 group by pwd with rollup limit 1 offset 2# 即可得到flag

此时密码只要为空即可查询成功

 

 

转载于:https://www.cnblogs.com/WhiteHatKevil/p/10046111.html

你可能感兴趣的文章
浅析rune数据类型
查看>>
普通用户开启AUTOTRACE 功能
查看>>
1034 - Navigation
查看>>
Bind+Nginx实现负载均衡
查看>>
游侠原创:推荐一款免费的Syslog转发工具
查看>>
巧用Zabbix自定义监控Mysql性能状态
查看>>
UIKeyboard键盘相关知识点-IOS开发
查看>>
你真的会 snapshot 吗? - 每天5分钟玩转 OpenStack(163)
查看>>
onAttachedToWindow和onDetachedFromWindow调用时机源码解析
查看>>
虚拟机外接USB设备情况的vMotion问题
查看>>
Mysql数据库大小查询
查看>>
#78 Reimplement Trampoline
查看>>
使用Java制作图文验证码
查看>>
java学习笔记----之多线程开发
查看>>
使用javap分析return和finally的执行字节码
查看>>
java 代理
查看>>
数据库设计三范式
查看>>
Eclipse插件开发- view to view drag drop
查看>>
Linux 技巧:让进程在后台可靠运行的几种方法
查看>>
ORACLE特殊字符的处理方法
查看>>