• [CISCN2019 华北赛区 Day1 Web5]CyberPunk


    [CISCN2019 华北赛区 Day1 Web5]CyberPunk

    知识点

    1.php伪协议

    2.二次注入

    二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

    题解

    查看源码,发现提示

    图一

    可能存在文件包含,尝试用php伪协议读取源码,可行,分别读取search.php,change.php,delete.php源码

    ?file=php://filter/convert.base64-encode/resource=index.php
    

    图二
    index.php

    index

    chang.php

    change

    search.php

    search

    delete.php

    delete

    通过代码审计可以发现,user_name和phone都进行了严格的过滤,但是address只用addslashes()对预定义字符进行了转义,所以address参数为可以利用的注入点。

    由于address被addslashes()转义以后单引号等无法使用,但是更新地址时,会将旧地址保存下来,所以我们只要将在第一次修改地址时输入SQL注入语句,在第二次更新时(随便输),第一次更新的SQL语句会被调用从而引发二次注入。

    因为报错注入最长输出32位所以分两次读取。

    图三

    payload:

    1' where user_id=updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,20)),0x7e),1)#
    

    图四

    二次更新后

    图五

    接下来操作同理

    1' where user_id=updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),20,50)),0x7e),1)#
    

    写在最后

    可能有人会问为啥直接load_file读取flag.txt,为什么不采用常规的sql注入操作一步步爆出来,其实我做也是有这个疑问,随后去问了别的师傅,得到的答复是:CISCN官方出题说明了flag在根目录下,hhh~

  • 相关阅读:
    条件变量:为什么要与互斥锁配套使用?为什么要使用while来避免虚假唤醒?
    【转】高性能IO之Reactor模式
    LeetCode127:单词接龙
    CF1245F: Daniel and Spring Cleaning
    权值线段树学习笔记
    luogu_4317: 花神的数论题
    luogu_2605: 基站选址
    入门平衡树: Treap
    CF1244C: The Football Season
    luogu_1156: 垃圾陷阱
  • 原文地址:https://www.cnblogs.com/rabbittt/p/13293451.html
Copyright © 2020-2023  润新知