python脚本遇到的问题整理(持续更新)

文件上传问题

requests类库是无法上传multipart/form-data类型的

解决办法就是采用request-toolbelt类库

具体书写方式,见代码笔记

HTTPS报错问题

处理方式,不检查ssl证书,并且忽略警告信息

代码

1
2
3
4
5
6
import urllib3


address = "https://127.0.0.1"
urllib3.disable_warnings()
res = requests.get(address, verify=False)

get型传参自动编码问题

没什么好的解决方式,要不重写个?

根据requests类库

Lib/site-packages/requests

1610193638619

跟进_encode_params函数

1610193686911

其实可以在有需求的时候改改代码

请求的uri自动编码问题

比如请求/inde.php/api/<?php phpinfo();?>

会被自动编码成/index.php/api/$3C?php%20phpinfo();?%3E

正常情况下当然没问题,有这么一种情况就是,

  • 通过文件包含获取shell
  • 被包含的文件是error日志
  • 那么很明显上述方式是失败的

解决方法,我把requests库拷贝出来一个,修改其中一行代码即可

拷贝出来一个新的库request

model.py文件中的prepare_url方法中

修改成如下

1610194032526

在需要的时候直接如下形式即可

1
2
3
4
5
import request


url = "http://127.0.0.1/inde.php/api/<?php phpinfo();?>"
res = request.get(url)

bytes和hex字符串之间的相互转换

py2.7

1
2
3
4
5
6
7
8
1 >>> a = 'aabbccddeeff'
2 >>> a_bytes = a.decode('hex')
3 >>> print(a_bytes)
4 b'\xaa\xbb\xcc\xdd\xee\xff'
5 >>> aa = a_bytes.encode('hex')
6 >>> print(aa)
7 aabbccddeeff
8 >>>

py<3.5

1
2
3
4
5
6
7
1 >>> a = 'aabbccddeeff'
2 >>> a_bytes = bytes.fromhex(a)
3 >>> print(a_bytes)
4 b'\xaa\xbb\xcc\xdd\xee\xff'
5 >>> aa = ''.join(['%02x' % b for b in a_bytes])
6 >>> print(aa)
7 aabbccddeeff

py>3.5

1
2
3
4
5
6
7
1 >>> a = 'aabbccddeeff'
2 >>> a_bytes = bytes.fromhex(a)
3 >>> print(a_bytes)
4 b'\xaa\xbb\xcc\xdd\xee\xff'
5 >>> aa = a_bytes.hex()
6 >>> print(aa)
7 aabbccddeeff

十六进制字节的fuzz

hexo_code = binascii.a2b_hex(bytes([i]).hex()).decode("utf8")

目标用于爆破

1610451088827

待续。。。