less-1
less-2
less-2与less-1没什么差别,获取数据的步骤差不多一样,只不过less-2是数字型注入,不需要判断是否闭合。
less-3
less-3也大同小异,只是闭合型是')
less-4
less-4也是,闭合型是")
less-5
less-5用的是报错注入
less-6
less-6和less-5也是差不多,同样也是闭合型不同
less-7
这一题和前面的都不太一样,它提示我们用outfile想服务器写入文件
less-8
这一题是布尔盲注
通过一步一步猜测推论试验得到
数据库:security;
表名:users
用户名:Dumb
密码:Dumb
less-9
时间盲注
?id=1' and if(length(database())=8,sleep(5),1) --+
比上一关多了一个sleep函数
less-10
和上一关做法一样,只是闭合的区别 "闭合
less-11
十一题的传参方式和以往是不同的,这次变成了post传参,但注入方式是差不多的
less-12
和之前的做法一样,只是闭合的区别 ")
less-13
这是另一种传参的报错注入,过程其实大差不差
')and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)
less-14
这道题和13关一样,闭合方式为 "
less-15
进入15关,发现这和前面没有什么区别,用之前的报错手段试一下,没有输出,尝试利用盲注
猜解库名长度
'or (length(database()))=8 -- qwe
利用ASCII码猜解当前数据库名称:
'or(ascii(substr(database(),1,1)))=115 --+ 返回正常,说明数据库名称第一位是s
'or(asciisubstr(database(),2,1)))=101 --+ 返回正常,说明数据库名称第二位是e猜表名:
'or (asci(substr((select table name from information schema.tables where table schema=database()limit 0,1),1,1)))=101 --+ 如果返回正常,说明数据库表名的第一个的第一位是e
猜字段名
'or (asci(substr((select column name from information schemacolumns where table name='emails'limit 0,1)1,1)))=105 --+ 如果返回正常,说明emails表中的列名称第一位是i
和第八关差不多
less-16
和less-15一样,只是闭合的区别 ")
less-17
第17题进去提示我们密码重置,从password入手
过程其实和之前一样
判断是否存在注入: or 1=1 --+
判断库名:'and updatexml(1,concat(0x7e(SELECT database()),0x7e),1) --+
判断表名: 'and updatexml(1.concat(0x7e(select table name from information schematableswhere table schema='security'limit 0,1)0x7e),1) --+
判断列名:'and updatexml(1.concat(0x7e(select column name frominformation schemacolumns where table schema='security' and table name='emails' limit0,1),0x7e),1) --+
判断数据: 'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1) --+
less-18
这个进去就记录了ip信息,头注入
less-19
这一关和上面做法相同,只是注入点的变化
less-20
获取表内数据
’ and updatexml(1, concat(0x7e, (select username from (select username,password from users limit 3, 1) test), “:”, (select password from (select username,password from users limit 3, 1) test2)), 1) --+
less-21
这题看上去和上一题一样,登录之后也会显示信息,但是cookie后面的值是被进行了base64编码的,其他的一样
less-22
和前面做法一样,只是符号的区别 "
less-23
进入23关又回到了之前的get传参,但在尝试的时候发现后面的注释貌似被过滤掉了,所以我们可以试试or '1'=1,然后按照以往的步骤就行
less-24
二次注入
在第24关,我们是通过注册新账号这种方式,将恶意代码存储到数据库中。
给Dummy重新设置密码。首先登录Dummy'#,然后将它的密码修改为123456
数据库执行的语句是:
update users set password='123456'where username='Dummy'#'and password='1111'
,由于我们存储的恶意代码发挥作用,所以最终修改了用户Dummy的密码而不是Dummy'#。
less-25
在代码中看到它过滤掉了or和and,那就尝试||或者&&
less-26
26题过滤了很多东西,or ,and , 一些注释和空格都被注释掉了,可以用||代替,空格用特殊字符代替,如%0a
联合注入有点麻烦,建议使用报错注入
less-27
看源码,这一个屏蔽了select和union,由于是黑名单的显示,所以我们可以绕过去
less-28
和上一题差不多,不能组合,不区分大小写
less-29
这一关主要是为了我们能够了解服务器的双层架构
我们作为客户端将我们的信息提交到服务器上面去直接接受我们的参数的是tomcat,然后接受我们的下一个参数的是apache而phpstudy上面部署的是apache所以我们得设置两个参数供两个服务器软件接收
less-30
less-31
这两道题的设置和第29关是一模一样的
less-32
双字节注入
双字节注入基本原理:当数据库使用GBK等双字节编码时,我们可以通过在转义符前加上一个特殊字符使得特殊字符的编码(比如%df)加上转义符编码(%5c)从而构成一个全新的字符(%df%5c -> 運)从而使得转义符\失效
less-33
和第32题一模一样
less-34
基于错误_POST_单引号_字符型_addslashes()_宽字节注入
less-35
基于错误_GET_数字型_addslashes()_宽字节注入
less-36
只是利用的函数不同,其实和之前是一样的
less-37
过滤函数和36题一样,只是改用了POST传参
less-38
堆叠注入
less-39
闭合方式(整型)和上一题不一样,剩下的都一样
less-40
这一关也是闭合方式和38关不同,这一关的闭合方式是 ') ,替换一下注入点就可以了
less-41
41也是闭合方式整型,剩下的都一样
less-42
这一关是POST表单的形式,可以看到在该页面中还有两个跳转链接
经过一番测试,联合注入测试回显出了显示位
less-43
闭合方式不同,其余和42关相同
less-44
这一关中是没有语法报错回显的,所以判断注入点有一些困难,但是只要把注入点判断出来了,其余操作就都和42关一样了。这一关在Username输入框上的处理和42关一样,都被过滤了,所以只能在Password输入框上操作
这一关的闭合符号(注入点)就是单引号。其余操作都和42关一样
less-45
也是闭合方式不同,其余都和42关一样,这一关的闭合方式(注入点)是 ')
less-46
这题看上去跟前面题目是有一定区别的,我们可以发现后面sort的传参才是关键,尝试过后发现这里的传参起到的效果和我们order by相同,那我们自然就想到我们的传参最后是拼接到了order by语句上,那么我们就没办法利用之前的联合查询
剩下的就用报错注入
less-47
和46关相同,闭合方式不同
less-48
采取盲注,同样是sort传参
less-49
只是换了闭合
less-50
sort为注入点,报错注入+堆叠注入
less-51
和上题一样,闭合的区别
less-52
换了闭合方式和注入方式
盲注+堆叠注入
less-53
相比于52换了个闭合
less-54
从这一题开始换了形式
超过十次换了数据