Skip to content

Python学习记录(四):编码问题&网络爬虫 #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
PyxYuYu opened this issue Mar 5, 2016 · 0 comments
Open

Python学习记录(四):编码问题&网络爬虫 #5

PyxYuYu opened this issue Mar 5, 2016 · 0 comments

Comments

@PyxYuYu
Copy link
Owner

PyxYuYu commented Mar 5, 2016

Enrich your life today, yesterday is history, tomorrow is mystery.

0x01 Wooyun

  • SQL注入
  • DNS域传送漏洞
  • Java 反序列化命令执行
  • 文件上传导致任意代码执行
    • 上传证件扫描处,利用Burpsuite抓包截断
  • 设计缺陷/逻辑错误
    • 任意用户密码重置一
      • 利用第一个正确的用户,重置密码,填入验证码并抓包,获得返回的信息,并记录
      • 重置另一个用户,验证码随便填写,提交抓包,将之前的返回信息替换这个包内的信息,手机号改为目标的手机号,发送这个包
      • 跑手机号,直接用Burpsuite选取一些常用段,跑后4位就行
    • 任意用户密码重置二
      • 点击获取验证码,抓包,将包内的他人手机,修改为自己的手机,发送这个包,填入自己获取的验证码,修改他人的密码
    • 任意用户重置密码三
      • 验证码为4位,并且没有错误次数限制,可用Burpsuite暴力破解
    • 任意用户重置密码四
      • session絮乱导致,先正常输入自己的手机号,获取验证码,点击下一步,停留在修改新密码页面,开另外一个窗口,输入目标手机,发送验证码,返回之前的修改密码出,修改密码,就成功修改了目标的密码
  • 未授权访问/权限绕过
    • 查看订单处,修改订单号可以遍历其他用户订单信息
  • Bash Shellshock ( Bash 远程代码执行)
  • 网络未授权访问
    • FortiGate防火墙存在SSH后门
0x02 爬虫实战一

  • Firebug 查看网络
    • 因为Python是利用urllib2.Request()发送一个请求,通过urllib2.urlopen()获得一个类文件对象,将这个对象.read()读取(或者传入BeautifulSoup()中读取)获得源码后,就可以根据这个源码进行分析
    • 利用Firebug的话,就需要查看网络,查看其中请求包返回的消息体,也就等同于上面对象.read()查看源码
  • 保存到文档 txt 文本时候遇到的编码问题
    • file.write(str),保存成txt文件,encode()
    • ASCIIUnicode是字符集,utf-8 是字符集的编码方式
    • utf-8Unicode字符集的一种编码方式
    • 如果不知道py文件的编码方式,程序默认按照ASCII字符集来解码,所以需要声明文件编码方式
      • 凡是在文件中出现中文或其他非ASCII字符的时候首先需要在文件头声明编码方式coding=utf-8
    • 需要导出到外部的字符串统一解码(decode)为Unicode字符后,再统一编码(encode)后输出
    • Linux默认是utf编码,Windows默认是gbk编码,网页也有自己的编码方式,Unicode作为中间编码,服务器先把网页解码成Unicode,然后编码成系统的编码输出到浏览器,很多网页源码上就有类似的提示信息 <meta charset="UTF-8">
    • Pycharm中控制台输出如果是UTF-8,也可以正常显示
    • BeautifulSoup默认输出到控制台都是按照UTF-8格式(也就是BeautifulSoup()返回的是一个utf-8格式的文档对象),但是.string需要输出到txt文档的时候,其实.stringNavigableString对象(可以认为是str的继承子类),是Unicode编码格式(字符串在Python中都是Unicode编码格式),.string输出到控制台时,BeatuifulSoup会自动将其转换成UTF-8格式
    • 编码问题补充知识一
    • 编码问题补充知识二
    • 编码问题补充知识三
    • 编码问题补充知识四
  • 两个for循环的逻辑
    • 通过第一个for循环找到一个POC名字和链接页,进入这个POC详细页,利用第二个for循环来输出具体内容,并保存
  • 公开POC页面一共有13页,如果读取第14页的话,又重新返回到第一页,这里需要设置个判断,如果和第一页相同的话,需要跳出
  • 添加命令行参数,可以分别保存txt,保存py两种状态
    • sys模块:包含了相关的,获得命令参数的功能
    • argparse模块:命令行选项和参数解析的模块
  • 替换字符串内容的2中方法
    • str.replace(a, b)b替换str中的a
    • 利用正则表达式:
import re
#制定替换规则,生成正则pattren
a = re.compile('[/\\\?\*<>]')
#利用正则表达式的sub函数,将str中需要替换的符号替换成c
b = a.sub(c, str)
  • 源码实现流程
# 过程源码:整合两个读取网页的过程,并且保存相应POC到txt文件
request_public = urllib2.Request(url_public)
# 伪装浏览器,添加User-Agent
request_public.add_header('User-Agent', user_agent)
response_public = urllib2.urlopen(request_public)
soup_public = BeautifulSoup(response_public.read(), 'html.parser')
full_text = soup_public.find_all(href=re.compile(r'poc'))
for each_public in full_text:
    print each_public.string
    # poc_list.append(each_public.string)
    url_vul = url_index + each_public.attrs['href']
    # vul_list.append(url_vul)
    request_vul = urllib2.Request(url_vul)
    request_vul.add_header('User-Agent', user_agent)
    response_vul = urllib2.urlopen(request_vul)
    soup_vul = BeautifulSoup(response_vul.read(), 'html.parser')
    # 分析源码
    # print soup_vul
    # vul_text = soup_vul.find_all('pre')
    # 仅输出代码
    vul_text = soup_vul.find_all('pre', class_="brush: python;")
    for each_vul in vul_text:
        print each_vul.string
        # 去除文件名中的'/',文件名不支持
        save_name = each_public.string.replace('/', '') + '.txt'
        # soup_vul是utf-8编码,beautifulsoup默认输出格式是utf-8
        # print soup_vul.original_encoding
        with open(save_name, 'a+') as f:
            # each_vul.string是一个NavigableString对象(可以认为是str的继承子类)
            # 和Unicode字符串相同,用unicode()可以转化成Unicode字符串,unicode编码
            # 输出到txt时候,需要编码成utf-8格式
            f.write(each_vul.string.encode('utf-8'))
            # f.write('\r\n')
0x03 一天总结

  • 爬虫基本功能实现,可爬完全部POC,多线程和命令行未添加
  • 编码问题需要继续理解

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant