美文网首页
sql labs 学习

sql labs 学习

作者: Emily0917 | 来源:发表于2019-01-06 17:03 被阅读0次

less-1

这一题是get型注入,先用单引号,双引号,来判断是否存在注入点。

可以看到报错信息中' '1' ' limit 0,1 ' 中间多了个'这就是我们写进去的' 这样就可以知道 要执行的sql语句是什么了。

select * from xx where id='$id' ;我们要把后面的'注释掉,再用常规注入语句就好了。

less-2

get型注入,先判断注入点,得到下面的报错信息

我们把前后''去掉,因为这是报错时报错信息自己加的,所以报错语句就是 ' limit 0,1 多了个单引号,并且也没法注释。很明显,这就是个数字型的注入。不需要单引号,双引号,直接用注入语句就可。

less-3

get型注入,判断注入点 ,得到报错信息:

看 ‘1’’)的报错信息。可以知道sql 查询语句大概时这样的 select * from xx where ( ' $id ' ) ;所以我们需要 用 ') 后面把‘)注释掉,完成查询语句的闭合,最后再通过注入语句得到信息。

less-4

把括号中的单引号改成了双引号的区别,从报错信息中就能看出来!

less-5

gei型注入,有报错信息

单引号 后面加注释闭合。得到的是:

没有回显,可是有报错,我们就可以用报错注入,

查询表名:1' and extractvalue(1, concat(0x5c, (select group_concat(table_name) from information_schema.tables where table_schema=database())))%23 加粗这段便是我们能改的查询语句。

查询列名:1' and extractvalue(1, concat(0x5c, (select group_concat(column_name) from information_schema.columns where table_name='emails')))%23

最后查询字段名::1' and extractvalue(1, concat(0x5c, (select group_concat(id) from emails)))%23 id 是字段,emails是表名

这里也可以使用盲注来注入,,毕竟盲注太麻烦,就不写了。。。

less-6

和上题一样,但是查询语句是这样的

查询语句并没有双引号,但是上面变量id早就给$id 连了个双引号。所以查询语句变为 $sql="select * from users where id="查询语句 " limit 0,1 "

改个双引号就好。

less-7

和上题差不多,但是闭合点我认为是非常难想到的,这里展示下源码

双括号的闭合。你只要' )) # 注释继就行,但是在报错信息不全的提醒下,,如何想到双括号的闭合啊!!!!!我真的很懵。。下次要和给你出个3括号怎么办?? 总有人和我说这是经验! .没错。。现在我告诉你们,这就是经验!

less-8

get 型注入,,没有报错信息,那只能考虑盲注了。

在源码中报错信息都被注释掉了。 首先是查询他的数据库

?id=1' and length(database())=8 --+  查询他的数据库几位 

?id=1' and ascii(substr(database(),1,1))=115 --+ 猜测数据库的第一位的ascii码

?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6  猜测第一张表的名字的长度

就像猜测数据库第一位的ascii码一样,你也同样用ascii(substr()) 来猜测表的名字的ascii 再猜 列名,最后猜字段值。

less-9

这是个基于时间的盲注,从不管你输入id=1 还是id=0 都是一个结果,所以我们要使用延时注入。运用sleep()函数,

' and if(1=0,1, sleep(10)) --+

" and if(1=0,1, sleep(10)) --+

) and if(1=0,1, sleep(10)) --+     这是判断是否时间盲注的语句。如果语句对的并且查询到就会延迟10秒

') and if(1=0,1, sleep(10)) --+

") and if(1=0,1, sleep(10)) --+

?id=1' and if(length(database())=8,sleep(5),1)--+ 爆数据库的长度

?id=1' and if(ascii(substr(database(),1,1))=115,sleep(5),1) --+ 爆数据库的第一个字的ascii码

?id=1'and If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1))=117,sleep(5),1)--+

猜测第四个表的第一位的ascii码, limit 0,1 第一个表   substr(xx,1,1)取第一位的第一个。 

less-10

也是一个时间盲注,,他的查询语句和上题不同,,是双引号的查询语句 其他做法是一样的。

less-11

Post型的注入

先来看一手源码:

没有对输入框中的提交信息过滤。所以我们可以直接在输入框中注入

查询语句中 username 和password 都有单引号,都能注入。这里用基本的注入语句就可以了。

less-12

post型注入,先用单双引号判断注入点,有报错信息!

很明显 他的查询语句就是 ,select * from xx where username=("xx")and password=(" xx") limit 0,1; 所以这里的闭合点就是 ”)加注释 #

然后在用常规注入语句就好了

less-13

post型注入,先用单双引号判断注入点,,也有报错信息。

很明显的 用 ’)加注释 闭合就可以了。 但是这题没有回显的,有报错信息就可以用报错注入,

admin ' ) and extractvalue(1,concat(0x5c, (select group_concat(table_name) from information_schema.tables where table_schema=database()))) # 爆表名

admin ')and extractvalue(1, concat(0x5c, (select group_concat(column_name) from information_schema.columns where table_name='emails'))) # 爆列名

admin') and extractvalue(1, concat(0x5c, (select group_concat(id) from emails))) # 爆字段值

less-14

post型注入 先用单双引号判断注入点,报错信息:

这里很明显 " 号是会报错的,因为多了个“。 那”加上注释# 能成功登陆。

那猜想他的源码应该是 select * from xx where username=" $username " && password =" $password " limit 0,1;  “#就可以闭合了,再用常规的爆破注入语句就好。

less-15

post型注入 用单双引号判断注入点,没有报错信息。 那就要试试 admin ' # 或者

admin "# ,admin ' # 发现是登陆成功的。 那么查询语句应该就是 用 单引号 注释来闭合语句的。 这边没有报错信息的话,就用布尔县盲注来进行注入吧。 注入语句就和上面一样操作。

less-16

在这种没用报错信息的注入下,我们就要一个个试试, admin ' # 错误,admin " #错误

admin ") # 对 admin ')错误,其实就是猜测他的查询语句的闭合方式,哪种登陆成功就哪种就是闭合方式! 那我们试出了admin ") # 的闭合 那么再用盲注注入 进行爆库,表,列,值

这是他的源码:

less-17

首先我们看看源码,

check_input 函数

这就是这个系统函数进行的过滤,那么我们只能用密码框来提交注入语句,单双引号判断注入点,又报错信息,很明显的‘ 加注释闭合语句。那就可以用报错语句,和使用上面报错语句就可以了!

less-18

报文头注入和Cookie 注入

X-Forwarded-For  字段可用于注入

User-agent     字段,Referer 字段  ,Cookie字段 可用于注入

(没有很好的过滤情况外!)

这道题一开始就提醒了报文头注入 user_Agent,那想想注入点都不会在输入框中,而是在报文头中的user_Agent,用burp suite 截包,改包,注入 ,因为是有报错信息的,所以我们用报错注入 。报错语句也和上面的报错语句一样使用。

看看这题的源码

check_input 把表单提交的过滤了

宽字节注入

宽字节注入就是利用mysql中的特性,mysql在使用 GBK编码时,会认为两个字符是一个汉字。这样我们就能通过把转义的字符绕过。

addslashes 函数是经常用于sql注入的过滤,在预定义字符前添加反斜杠/。导致查询语句出错。这时我们在预定义字符前加%df,他会和反斜杠/ %5c组成一个汉字,从而使%27 (’)逃逸出来!

那么mysql怎么判断一个字符是不是汉字,根据gbk编码,第一个字节ascii码大于128,基本上就可以了。比如我们不用%df,用%a1也可以:

mysql不仅是使用GBK编码时,会认为两个字符是一个汉字,还有很多多字节编码,也可以进行宽字节注入!我们可以这样认为:只要低位的范围中含有0x5c的编码,就可以进行宽字符注入。

mysql_real_escape_string

必须连接数据库才能使用 他的转义字符为

来看一个具体的用法,

less-36

当你用单双引号进行判断的时候,没用报错,如图

下面给了你提示,,1‘ 被转义成了 1\' 字符串这样导致了你没有报错,看下源码,

这里他用的是mysql_real_escape_string函数,sql查询语句中$id 被单引号闭合,并且还告诉我们有报错信息,print_r(mysql_error())。所以证明1' 被转义成 1\'字符串。那我们就可以通过在\'前加%fg ,%df 这种第一个ascii大于128 的

又报错信息了,说明 有单引号了,这样就可以进行下一步注入了。

进行报错注入的时候发现一个问题,

报错了。这里也有两个单引号,那我们用%df来绕过有用吗?结果是出错了的,因为 %df' security %df' ,我们前面说 %df 和单引号的转义反斜杠 组成了一个汉字,,那么这个汉字就在两个单引号之间了啊,那你查询的数据库名字就出问题了,导致你怎么也查不出表名!这里我们可以使用

用16进制来表达 数据库名字。就可以了!

堆叠注入 stacked  injection

注入原理:平常我们注入时都是通过对原来sql语句传输数据的地方进行相关修改,注入情况会因为该语句本身的情况而受到相关限制,例如一个select语句,那么我们注入时也只能执行select操作,无法进行增、删、改,其他语句也同理,所以可以说我们能够注入的十分有限。但堆叠注入则完全打破了这种限制,其名字顾名思义,就是可以堆一堆sql注入进行注入,这个时候我们就不受前面语句的限制可以为所欲为了。其原理也很简单,就是将原来的语句构造完后加上分号,代表该语句结束,后面在输入的就是一个全新的sql语句了,这个时候我们使用增删查改毫无限制。

使用条件:堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁

less-38 堆叠注入实例

这题就是一个简单的单引号的闭合,关键是在执行完id=1后,我又写了一条语句,添加一条信息到Users表中。

添加成功,这就是堆叠注入。可以执行多条语句!关键还是查询语句要先闭合!

排序注入 order by 注入

就是我们可控制的位置在order by 子句之后,

'select * from xxx order by '$id'';

如何判断这个是可注入点,有无注入点,以及如何闭合时关键。

less-46

这题是数字型的排序注入,如果判断是否存在排序注入呢?

这是降序

升序,排列的顺序改变了,那么就存在排序注入,但是有时候这种判断是没有用的。比如less-47 所以我也没怎么理解!

闭合方法也就之前那些,如果有报错信息的话,那就可以用报错注入语句注入,也可以用盲注,时间盲注。用一些函数来进行盲注

rand((ascii(left(database(),1))=115))

相关文章

  • sql labs 学习

    less-1 这一题是get型注入,先用单引号,双引号,来判断是否存在注入点。 可以看到报错信息中' '1' ' ...

  • 搭建sqli-labs注入平台

    搭建SQL注入平台 docker搭建sqli-labs 运行sqli-labs 初始化数据库 访问sqli-labs

  • sqlmap的使用

    摘要:使用sqlmap注入本地搭建的sqli-labs过程记录 学习SQL 注入,一直在手注,关于工具的使用的学习...

  • SQL_labs

    sql-labs 1--10 less-5 ..less-6(构造 报错语句) nice_o less-5 les...

  • 网络安全学习资源

    漏洞基础原理 SQL注入 sqli-labs 项目地址:https://github.com/Audi-1/sql...

  • [sqli-labs]下载与部署

    sqli-labs简介 对于想要学习web安全的同学 , 这是一个非常好的学习有关SQL注入的学习资料类似于闯关的...

  • Sqli-Lab实验环境搭建

    介绍:Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程。也是我们用来练习sql注入的一个很...

  • Mysql常用命令

    写在前面 最近在学习SQL注入,以sqli-labs练习,可是自己对MySQL感到很陌生,故在此学习一下。 连接与...

  • sql-labs 65

    有关于sqllab的65题, 以下,是我的猜测: 1.select user,password from tabl...

  • XSS挑战之旅--游戏闯关

    在知识星球上看到别人发的一个XSS靶场,刚好适合刷完sql-labs的我学习XSS level1 没有任何过滤,直...

网友评论

      本文标题:sql labs 学习

      本文链接:https://www.haomeiwen.com/subject/sxdsrqtx.html