ctfshow-给她

文章描述了一次网络安全竞赛中的解题过程,选手通过发现SQL语句中的sprintf函数逻辑漏洞,利用占位符被替换为空的特点构造payload,成功执行SQL查询并找到flag。同时,通过GitHack获取hint.php文件,最终通过cookie中的信息读取到flag.txt的内容。
摘要由CSDN通过智能技术生成
萌新赛-给她
信息收集

进去是一个SQL语句展示,emmm,那就写几句SQL注入看看,抓包,用字典FUZZ,一个没出,发现单引号都被转义了,猜测后台是有一个addslashes函数,那么我们可以联想到sprintf函数与addslashes函数连用造成的逻辑漏洞,但是不确定,目录扫描可不能少,扫一下,发现有git,直接访问报403,那用GitHack拉取一下,发现hint.php

在这里插入图片描述

发现确实如我们所想,存在sprintf函数

sprintf函数的底层逻辑漏洞

由于该函数的底层逻辑上只对15中占位符有分支,而其他的则直接没处理,而造成的被替换为空字符,如:

<?php
$sql="select * from user where username='%\' and 1=1 #';";
$user='admin';
echo sprintf($sql,$user);
?>
//打印出来:select * from user where username='' and 1=1 #';

可被替换为空的占位符:%\,%1$\

解题

那么我可以构造如下payload:name=admin&pass=1%1$'or 1=1%23

在后台应该是:select * from user where name ='admin' and pass='1'or 1=1#'

返回了一个报错页面,发现不是原生的报错,check一下源码:

在这里插入图片描述

发现存在hint,那么文件位置我们已经知晓,下面就是如何读取文件,首先想到的是用load_file函数,但是没搞出来,然后无意间抓了一个包,好家伙,cookie里竟然藏了一个file,抓出来转16进制,得到flag.txt,那么我们放入/flag的16进制进去2f666c6167,放包,得到flag:ctfshow{9cd199ec-f7ef-41e0-9a1f-234d9ab5628d}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值