设为首页 收藏本站
查看: 713|回复: 0

[经验分享] Python结合NC.exe 实现模拟登录&批量填表

[复制链接]

尚未签到

发表于 2015-11-29 09:50:41 | 显示全部楼层 |阅读模式
  1.工作需求
  有很多事项,每个事项分为:名称、种类。时间等,需要把每个事项逐个输入到网页中并提交。
  如果用人肉操作的话,流程就是先登录到网站后台,点击“添加”——>输入各项内容——>点击“保存”。然后重复这个动作100遍。如图:
DSC0000.png
  
  2.设想的解决办法
  对手工“登录”、“添加”、“保存”的全过程进行抓包,获取整个流程提交的数据,然后将其POST到服务器。
  
  3.具体操作
  3.1 抓取并分析操作时的数据
  使用Chrome浏览器,打开所需登录的页面:http://222.000.36.113/ ,并输入账号与密码:
DSC0001.png
  然后按下键盘的F12,浏览器弹出“开发者工具”的界面,选择"Network":
DSC0002.png
  然后将鼠标移回登录窗口,点击“登陆”。然后“开发者工具”界面会出现POST和GET的文件与数据,找出登录对应的文件,点选Header标签。
  此时在Form Data里面能看到POST到服务器的参数(明文密码,汗):
DSC0003.png
  登录进去之后,点击“添加”按钮,出来一个表单界面,让填写内容。开始填写各项内容ing(截图只是内容一部分):
DSC0004.png
  辛苦填完之后,点击“保存”。内容就保存在了服务器中。
  此时在“开发者工具”里面就能看到点击“保存”按钮后,浏览器的行为:
DSC0005.png
DSC0006.png
DSC0007.png
  这次POST的数据类型和登录时的不同了(见红色方框)。
  登录时是Form Data,而提交时却是Request Payload。
  (这一点在之后的操作中难倒了我。我不会用Python的Requests模块提交这些数据。因为我不知道如何加上Cookie)
  以上就是登录+提交的全程。
  3.2编程实现
  3.2.1 模拟登录获取Cookie
  经过我多次试验,发现提交这些数据需要用到Cookie。i所以先模拟登录获取Cookie:



import httplib
import urllib
#定义请求头
reqheaders={'Content-type':'application/x-www-form-urlencoded',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Host':'222.000.36.113',
'Origin':'http://222.000.36.113',
'Referer':'http://222.000.36.113/login_loginOut.fdo',
'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',}
#定义post的参数
reqdata={'tnnd':'abcdef','tmmd':'mimaqqq'}

#对请求参数进行编码
data=urllib.urlencode(reqdata)
#连接到服务器
conn=httplib.HTTPConnection('222.000.36.113')
#提交登录的post请求
conn.request('POST', '/login_loginIn.fdo', data, reqheaders)
#打印服务器返回请求头中设置的cookie
print(res.getheader('Set-Cookie'))
     3.2.2模拟提交
  所需提交的Request Payload属于 Multipart-Encoded 格式,在Python的文档里有记载:
  http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file

文档中的操作方法是:



url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
r.text
  其中 report.txt 里面就是上图的Request Payload 下方的一长串字符内容。
  (可是我按照文档进行操作的时候不成功,是因为服务器需要Cookie而我没加上?那么Requests这个方法怎么加上Cookie呢?
  
  于是我使用了多年前渗透测试中的一个技巧:
  a.先把浏览器提交过程中所有POST的内容全部抓了下来,保存为“1.txt”。用的是WSockExpert。
  b.使用NC,“nc  222.000.36.113  80  < 1.txt”,把txt的内容全部提交到目标服务器。
  经测试,此方法可行。但要注意两点:
  一是Cookie要有效。可以由模拟登录的步骤中获取。
  二是1.txt 的编码格式为UTF-8,不然提交的内容全是乱码!
  (第二条当时百思不得其解,最终人肉测试了出来。最后才发现response headers写的是charset=UTF-8,忽略了,汗)
  
  那就用Python来调用NC吧:



import os
os.system("nc  222.000.36.113  80  < 1.txt")
  剩下的工作,就是将各个事项汇总到一起,然后用Python将对应的事项内容替换到1.txt的那一套格式里面,逐个提交100次!
  
  PS
  请问一下如何用Python提交这个Request Payload?调用NC太不优雅了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144811-1-1.html 上篇帖子: python 2.7 中文教程及自动化测试介绍 下篇帖子: 2015/11/5用Python写游戏,pygame入门(5):面向对象的游戏设计
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表