Sqli-Labs-master 注入训练(Page-2)

欧克,我们来到了第二大关,让我们开始吧!

Less-23:

这一关和第一大关的前面一些题比较像,首先输入?id=1,我们尝试输入单引号,发现报错了,这儿有注入,我输入一个双引号,后面加上–+ ,不报错了,经过多次尝试发现,报错的不明不白,于是就看了一下源码,好家伙,原来是过滤了–+和#,也就是注释符,那好办,直接字符注入 ?id=1' and '1'='1,在中间加上盲注,举个例子:?id=1' and length(database())>1 and '1'='1,其他的就和page1一样就行。

还有一种方法,是利用后面的单引号闭合,使用联合查询。

?id=1' union select '1',version(),'3,在这里因为我们不能使用order by 语句来查询数据,所以我们只能慢慢猜,当我们的字段查询到第四个的时候,报错,说明字段只有三个。然后只要修改version()那里的语句,换成查询语句就可以了。

Less-24:

这一关主要是利用二次注入,就是在最开始的时候使用正常的途径来将含有注入的信息存储到数据库中,在第二次的时候读取这个数据,便会执行想要的结果。

查看页面源代码,发现在登录的地方和创建新用户的地方都有过滤,但是在更新密码的地方没有字符过滤,那我们就从这里入手,首先点击创建一个新的用户名,这时候我们要知道在这个数据库中有哪些用户名,好针对这个用户名进入二阶注入,咋们已经知道这个数据库中有一个用户名叫Dumb (我认为这个在实战的时候用处应该不是很大,不过如果那些粗心的人用户名是admin 可能会好一点,本案例中也有admin,咋们换一个),在创建新用户名那里写 Dumb’#,密码就随便,123456,注册好之后登录进去,就是修改界面,输入新密码000000,当点击更新之后,因为我们的用户名在作怪,所以更新的是Dumb的密码,然后就可以用这个账号密码登录。

Less-25:

这一关是过滤了and 和or ,当我们输入这两个的时候,会替换成空,遇到这种情况的时候,我们大致有四种方法:

  1. 使用大小写绕过,因为MySQL对大小写不敏感,例如写成ANd , AnD , Or , OR 等等。但是在这一关不行也会被过滤掉。
  2. 编码,hex, urlencode and 的hex编码(%61%6e%64)or 的hex编码(%6f%72)但是这一关也不行,因为会自动解码
  3. 添加注释/and, or/这一关也行不通
  4. 多次注入,也就是多写几遍或者把过滤的字符过滤后可以组成新的and ,or,例如 anandd, oorr, 可以和大小写结合使用,这一关是欧克的,可以使用。
  5. 还有就是利用符号代替 and == && , or == || ,但是在这一关中,&& 也是不行的,||这个但是可以,,然后其他的就和之前的一样,联合查询注入还是报错注入就任你选择了, 这里选择报错注入 ?id=1' || extractvalue(1,concat('~',database()))--+就欧克了。

Less-25a:

这一关和上一关不同的是没有报错,id处没有‘’,其他和上一关一样,所以我们可以使用联合注入或者延时注入。

联合注入就很简单了,咋们来看一下延时注入。

?id=1 anandd if(ascii(substr(database(),1,1))>1,0,sleep(5))--+其他的自行构造。

Less-26:

这一关难度暴增啊,,直接把字符给过滤完了,查看源代码,发现过滤了 and or 空格,–, # ,后面的过滤–+和# 我们可以用闭合去绕过,但是空格咋办嘞,网上查了一下,发现对于空格的绕过有这么几种办法

  1. %09 TAB键(水平的)
  2. %0a 新建一行
  3. %0c 新的一页
  4. %0d return功能
  5. %0b TAB键(垂直的)
  6. %a0 空格
  7. () 用括号代替 例如 select database() == select(database())

暂时就这么多,但是上面这些大多不能用,因为我是windows系统,好像是因为apache 的解析,这些编码不能用,linux 可以用一些。()是可以用的,我这里使用的报错注入,也没用空格,在||后面直接可以加入字符

?id=1'||extractvalue(1,concat('~',database()))||'1'='1这样是可行的

在Linux中的话%0b %a0是可以用的,就可以用联合查询。

Less-26a:

这一关和上面差不多,但是在id处是‘),还有就是没有回显,所以我们不能使用报错注入,只要是没回显,优先考虑时间注入,构造payload

?id=1')anandd(if(ascii(substr(database(),1,1)),sleep(5),0))anandd('1欧克,解决!

Less-27:

这一关是过滤了union select 还有之前的一些,但是把and or 放出来了,不知道为什么,order by 不行,所以我们直接查询?id=434534'%0AUnIon%0ASElect%0A1,2,3||'1空格可以用%0a 绕过,惭愧,我也是在这一关发现可以使用的,估计之前也可以用,但是看了大佬的文章以为不能用就没有尝试,以此警示!

其他查询语句自行构造。

Less-27a:

和上关一样,只是id处是“,其他没有不同。

Less-28:

这一关和上面的基本一样,除了id处是’),还有就是之前的大小写过滤是可行的,但是两个中间用%0a 的话就会被过滤,尝试用%a0就行了。

?id=434534%27)%0AUnIon%a0SElect%0A1,2,3||(%271

Less-28a:

和上关一样。

Less-29:

重点: index.php?id=1&id=2, 你猜猜到底是显示 id=1 的数据还是显示 id=2 的?
Explain: apache(php) 解析最后一个参数, 即显示 id=2 的内容。 Tomcat(jsp) 解析第一个参数, 即显示 id=1 的内容。
此处我们想一个问题: index.jsp?id=1&id=2 请求, 针对第一张图中的服务器配置情况,客户端请求首先过 tomcat, tomcat 解析第一个参数, 接下来 tomcat 去请求 apache(php)服务器, apache 解析最后一个参数。 那最终返回客户端的应该是哪个参数?
Answer: 此处应该是 id=2 的内容, 应为时间上提供服务的是 apache( php) 服务器,返回的数据也应该是 apache 处理的数据。 而在我们实际应用中, 也是有两层服务器的情况,那为什么要这么做? 是因为我们往往在 tomcat 服务器处做数据过滤和处理, 功能类似为一个 WAF。 而正因为解析参数的不同, 我们此处可以利用该原理绕过 WAF 的检测。 该用法就是 HPP( HTTP Parameter Pollution) , http 参数污染攻击的一个应用。 HPP 可对服务器和客户端都能够造成一定的威胁。

现在我们来看这一关,查看tomcat 的index.jsp,发现对第一个参数是过滤了的,那我们就在第二个参数处构造,因为这个参数是不会经过jsp的,直接会通过php ,构造payload ?id=1&id=-2' union select 1,database(),version()--+ ,用联合注入和报错注入都可以。

Less-30:

这一关和上一关一样,id处是”。

Less-31:

同上所述,id处是“)。

宽字节注入:

这个注入的原理是针对语句中过滤了单引号和斜杠的注入方法。

MySQL在使用GBK编码的时候,会认为两个字符是一个汉字,而在过滤的时候往往会在单引号前面加上/来过滤

方法:

  1. 使用%df吃掉/,/‘的转码为%5c%27,如果在前面加上一个%df ,那么就会变成%df%5c%27,刚好,前面的%df%5c组成就是一个汉字,于是就变成了一个汉字后面有个单引号,就成功了
  2. 将/‘过滤掉,例如构造%**%5c%5c%27的方法,后面的%5c会被前面的%5c过滤掉。

Less-32:

这一关我们按找上面讲的,先输入单引号,发现果然被过滤了,输入\也是被过滤了,构造宽字节注入,?id=1%df'--+发现直接绕过,然后就可以使用联合查询或者报错注入。

Less-33:

和上一关一样,只是查看源码,发现是使用了addslashes()函数,他会在预定义字符前面加上反斜杠,单引号,双引号。斜杠。

Less-34:

前面几关是ge的注入,现在开始是post的注入,post注入和get不太一样,%df 这个直接输行不通,使用bp可以实现,修改post语句。在书上是还有一种方法,将’使用utf-16或者utf-32编码,但是我没有找到可以转换的地方,就不了了之了。

Less-35:

这一关没有什么特别的,不用考虑addslashes()函数,直接联合查询。

Less-36:

这一关我们查看源代码,发现使用是mysql_real_escape_string()函数过滤的,这个函数会转义一些特殊字符,单双引号,\n \r \x00 这些。因为没有设置gbk,所以我们可以绕过,用%EF%BF%BD这个,然后构造payload就可以了。

?id=-1%EF%BF%BD%27 union select 1,database(),3--+,其他的自行构造。

Less-37:

和34关类似,通过万能密码登录

uname=1%EF%BF%BD%27 or 1=1#

Less-38:

这一关很离谱哈,和之前一摸一样,第一关。

至此,page-2已经全部完全,练习中学习,加油,进击下一关!!!

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023 Limbus
  • Visitors: | Views:

请我喝杯茶吧~

支付宝
微信