zoukankan      html  css  js  c++  java
  • 因缺思汀的绕过

    访问解题链接去访问题目,可以进行答题。根据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
    此时密码只要为空即可查询成功

     

  • 相关阅读:
    C语言知识点
    VS Studio 相关知识点
    类——继承、复合、委托
    类(传入的形参为指针形式)-字符串的实现
    类(传入的形参为非指针形式)-复数的实现
    C++需要掌握的重点内容
    目标跟踪相关资料
    夏天在威海,冬天在昆明
    短时目标跟踪
    php实现中文反转字符串的方法
  • 原文地址:https://www.cnblogs.com/WhiteHatKevil/p/10046111.html
Copyright © 2011-2022 走看看