jarvis OJ web题目浅析

2024-10-10 9 0

0x00 前言:

近期刷到的不错的ctf平台,权当看个乐。

0x01 RE? :

这道题考的有些许的偏门,首先下载附件,名为udf.so.(一大堆字符)。

jarvis OJ web题目浅析插图

Udf为mysql 的一个扩展接口,通俗来讲就是用户自定义函数。且后缀为.so时,可知道网站所搭建的环境为linux环境。Udf文件利用的话可以使用此语句。

CREATE FUNCTION [自定义函数名称] RETURNS [返回类型]{STRING|INTEGER|REAL} SONAME ["文件名"];

首先我们要找到本机linux中mysql下一个叫做plugin的文件夹。

jarvis OJ web题目浅析插图1

(windows环境远程连接linux mysql)

可以看到目录的绝对路径,下一步我们将所下载的文件放入这个目录下。

jarvis OJ web题目浅析插图2

根据题目的提示(help_me)执行sql语句查询这个函数值。

jarvis OJ web题目浅析插图3

使用getflag方法获取flag、

jarvis OJ web题目浅析插图4

PS:我这里是已经存在这个方法了,并不是语句的问题

0x02 PORT51:

题目链接:http://web.jarvisoj.com:32770/

进入题目,要求用51端口访问该站点。拿到引导以后直接使用curl命令进行访问。

jarvis OJ web题目浅析插图5

这道题目没有什么难度,考点也比较单一,命令一把梭就ok。但可能会有报错,个人认为可能是家里的网络没有分配到公网的地址,如果用服务器访问的话就不会有这个问题了。

0x03 LOCALHOST:

题目入口:http://web.jarvisoj.com:32774/

打开题目后告诉我们只能用本地主机访问。

jarvis OJ web题目浅析插图6

这里考的是一个叫做XFF(X-Forwarded-For)的东西,X-Forwarded-For 是一个 HTTP 扩展头部。通俗来讲,XFF是用来识别通过HTTP代理连接到web服务器的客户端最原始的IP地址和请求头字段。

本题可以抓包修改http请求头,将XFF值设置为127.0.0.1。

jarvis OJ web题目浅析插图7

0x04 神盾局的秘密:

题目传送门:web.jarvisoj.com:32768

首先打开题目以后,习惯性的看下源代码。

jarvis OJ web题目浅析插图8

访问showimg.php并传递源码中给到的参数。

jarvis OJ web题目浅析插图9

将参数值位置进行base64解码,参数值解码后为shieid.jpg,猜测这个位置有任意文件读取漏洞。把showimg.php进行base64编码,传入参数。

jarvis OJ web题目浅析插图10

果然读取到了showimg.php的源代码,此文件中做了一些过滤,禁止访问了上级目录。下面来读一下index.php的代码。

jarvis OJ web题目浅析插图11

Index.php引入了shield.php,直接读。

jarvis OJ web题目浅析插图12

这个文件中告诉了我们flag的位置,而在showing.php中过滤了pctf,所以我们并不能直接通过。showimg.php来读取这个flag所在的文件,但下面有一个file_get_contents()函数,配合index.php中的unserialize()来配合拿到flag。

构造序列化字符串。

jarvis OJ web题目浅析插图13

访问index.php,将此序列化串传入class中,查看源代码得到flag。

jarvis OJ web题目浅析插图14

没想到直接访问还会有个假的flag,草率了。

0x05 Login:

题目入口:web.jarvisoj.com:32772

进入题目中,抓包分析一下。

jarvis OJ web题目浅析插图15

返回头中提示了我们一条sql语句,这里对sql就不做过多的赘述了。语句中的可控点就是包在md5函数中的$pass。在这里我们要先了解下md5函数,当他的第二个参数为true时,会返回原始的16字符二进制的格式,那么我们可不可以利用这个问题构造一个万能密钥进行登录呢。

jarvis OJ web题目浅析插图16

这里可以看到,aaaa被转成了字母数字+亿点点乱码。那么这里就需要了解一个特殊的字符串了——ffifdyop,这个字符串在经过md5函数转换后,变成了'or'6[乱码]。直接本地测试一下,看看结果。

jarvis OJ web题目浅析插图17

本地测试是ok的,题目一把梭。

jarvis OJ web题目浅析插图18

0x06 IN A Mess:

题目入口:http://web.jarvisoj.com:32780/

拿到题目抓包访问,发现注释中提示index.phps。我们直接访问。

jarvis OJ web题目浅析插图19

可以看到他需要三个参数 a,b,id。

首先a这里我们可以用php://input,再POST一个1112 is a nice lab!,或者可以直接用data:,1112 is a nice lab!

b只需要字符个数大于5,用%00绕过eregi函数就可以;

Id这里是一个非常草率的弱比较;

最后传入这三个参数进行访问。

jarvis OJ web题目浅析插图20

他给个一个比较迷惑的东西,起初还以为是flag,交了半天才发现是目录,继续访问。

jarvis OJ web题目浅析插图21

这里简单测试了一下,发现过滤了空格和/**/,我们使用/*[任意字符]*/进行绕过,测试字段数,字段数为3正常显示,字段数为4,显示不正常。

jarvis OJ web题目浅析插图22jarvis OJ web题目浅析插图23

确定了字段数以后开始爆数据库名,在这里网上很多wp都使用了双写进行绕过,其实也可以利用其他被过滤的字符进行绕过。

jarvis OJ web题目浅析插图24

可以看到这里利用from就绕过了限制,并且其回显为是3的位置,查询数据库名。

jarvis OJ web题目浅析插图25

查询表名,这里因为引号被过滤了,先使用database函数拿到表名。

jarvis OJ web题目浅析插图26

查列名,这里使用hex编码绕过引号执行语句。

jarvis OJ web题目浅析插图27

得到了表名列名,下面开始查询flag值。

jarvis OJ web题目浅析插图28

0x07 flag在管理员手里:

题目链接:http://web.jarvisoj.com:32778/

进入题目后进行搜集,在相应头中发现了两条set cookie。由此可以得知这道题目应该是与这两条信息有关系的,接着我们来试着找下源码,找源码常见的也就几种方式,源代码中没有提示,我们直接访问下robots.txt试一下。

jarvis OJ web题目浅析插图29

显然是没有的,再来试一试这个出题人很喜欢的一种套路,访问index.php~下载源码。文件直接打开就可以看到顺序是倒过来的源码,也可以用linux vim-r命令恢复文件。在恢复文件前需要先把后缀更改为.swp。为了便于观看,这里用kali恢复一下文件。

jarvis OJ web题目浅析插图30

简单分析一下源码,role参数这里需要传入一个序列化后的admin,而hsh需要role反转后与$salt拼接的md5值,这里是一道哈希长度拓展攻击的考点,简单来说就是我们知道服务器给cookie中的值,我们称之为hash1,hash1中存在salt,我们可以做一次hash1和admin的MD5运算从而得到hash2,此时将hash2赋值给hsh就符合了代码的要求。

计算可以编写python脚本来运行,也可以利用hashpump这个工具进行。

jarvis OJ web题目浅析插图31

得到最终flag。

0x08 Chopper:

这道题题目可能有点问题,在网上搜出的wp也不能复现。这边就不做过多的赘述了。

0x09 Easy Gallery:

题目入口:http://web.jarvisoj.com:32785/

进入题目,在index.php?page=submit中发现了一个上传点。

jarvis OJ web题目浅析插图32

抓包更改文件名进行测试,先上传一个空文件试试。

jarvis OJ web题目浅析插图33

编码格式导致有些许的不美观,总体来说问题不大。这边判断他是判断了文件头

jarvis OJ web题目浅析插图34

添加了一个GIF89a,成功的绕过了这个过滤,下一步我们直接再其中上传php代码。

jarvis OJ web题目浅析插图35

上传的php代码是没有什么问题的,我们在view中可以通过这个ID拿到文件路径,这里的文件路径为uploads/1646740311.jpg,现在可以利用url地址中的page传递我们上传文件的路径。

jarvis OJ web题目浅析插图36

代码中在文件名后拼接了一个.php的后缀,这里我们利用%00来进行绕过,不过发现还是没有拿到flag。

jarvis OJ web题目浅析插图37

可以看到,这里还是报了一个没有文件的错误。初步推测是代码中过滤了<?php之类的字符,我们用另一种方法上传文件。

jarvis OJ web题目浅析插图38

访问这个文件,得到了flag。

jarvis OJ web题目浅析插图39

PS:这里本来是怕eval被过滤,上传phpinfo测试一下,没想到直接得到flag了。

0x10 Simple Injection:

题目入口:http://web.jarvisoj.com:32787/

根据题目提示,很简单的注入,输入账号密码抓包进行访问。

jarvis OJ web题目浅析插图40

这里可以看到,当username为admin时,会提示密码错误。而赋值为其他值时,则会报用户名错误,所以本题考的应该是布尔盲注。我们来测试一下这个注入点是不是再username的位置。

jarvis OJ web题目浅析插图41

jarvis OJ web题目浅析插图42

成功找到注入点,代码中对空格进行了过滤,出题人老作风了这属于。下一步就可以进行爆破了,编写python脚本进行注入。

jarvis OJ web题目浅析插图43

Md5解密。

jarvis OJ web题目浅析插图44

正常登录得到flag。

jarvis OJ web题目浅析插图45

0x11 api调用:

题目入口:http://web.jarvisoj.com:9882/

进入题目查看源代码,在代码中看到了XMLHttpRequest,分析应该是与xml有关了,点击go抓包,可以看到json格式的发送的数据。

jarvis OJ web题目浅析插图46

这边把content-Type改为application/xml,将发送的json数据更改为我们xml格式的数据信息。读取题目中提示的/home/ctf/flag.txt的信息。

jarvis OJ web题目浅析插图47

0x12 PHPINFO:

题目入口:http://web.jarvisoj.com:32784/

打开题目,这个文件乍一看没有什么问题,正常传入数据也是不可控的,但是在第二行中。ini_set('session.serialize_handler', 'php');这句话一出现我们就考虑到是不是php中的session反序列化,下面我们传入一个参数查看一下他的phpinfo中的设置。

jarvis OJ web题目浅析插图48

我们直接跳到关于session的设置。

jarvis OJ web题目浅析插图49

PHP内置了多种处理器用于存取$_SESSION数据时对数据进行序列化和反序列化。其中常用的有三种,其中在php 5.5.4以前默认选择的是php,在5.5.4之后是php_serialize。当session序列化选择器与默认的不同的话就可能会产生漏洞。另外,session.upload_progress.enabled为On,这里启用了该配置项,POST一个和session.upload_progress.name同名变量的时候。
PHP会将文件名保存在$_SESSION中session反序列化的条件都已经存在了,现在我们只需要构造一个上传和post同时开始的表单进行提交。

jarvis OJ web题目浅析插图50

这边随便上传一个文件进行抓包,提前构造好序列化字符串,这里存在一个双引号会被转义的问题,我们要在前面加上\,另外还要在开头加上|。

jarvis OJ web题目浅析插图51

这边我们将文件名修改为我们所构造的反序列化串,可以看到我们成功的得到了flag文件所在的位置,这里需要回过头来看一下session文件存储的路径。

jarvis OJ web题目浅析插图52

拿到这个路径,构造下一步的反序列化串,这里我们用file_get_centents()函数将文件写入字符串中最后echo出来。

jarvis OJ web题目浅析插图53

0x13 admin:

题目入口:http://web.jarvisoj.com:32792/

进入题目环境,源代码中没有任何提示,考虑信息泄露问题,访问robots.txt。

jarvis OJ web题目浅析插图54

直接访问看看。

jarvis OJ web题目浅析插图55

这里给了一个假flag,结合题目我们查看一下cookie。

jarvis OJ web题目浅析插图56

直接更改为1拿到flag。

0x14 WEB?:

题目入口:http://web.jarvisoj.com:9891/

拿到题目后查看源码,发现这里的密码使用js进行验证的,其中引入了一个叫做app.js的文件可以跟进看一下。

jarvis OJ web题目浅析插图57

打开后先在线格式化一下,既然是密码那我们搜索一下password。

jarvis OJ web题目浅析插图58

跟进checkpass。

jarvis OJ web题目浅析插图59

跟进__checkpass__REACT_HOT_LOADER__

jarvis OJ web题目浅析插图60

矩阵??编写脚本解出flag。

jarvis OJ web题目浅析插图61

0x15 inject:

题目入口:http://web.jarvisoj.com:32794/

根据题目提示,先找源码,robots.txt文件不存在。出题人老套路访问index.php~

jarvis OJ web题目浅析插图62

审计代码,其中 ` ` 的作用就是防止字段为关键字时会报错的问题,而在语句中加入反引号并不会使语句报错这里只要构造出desc `test` ` [union联合注入语句] 就可以进行sql注入。但是结果只回显第一条,这里用到limit来实现数据可显。

jarvis OJ web题目浅析插图63

得到了数据库,我们开始查表,题目中过滤了单引号,我们干脆不使用单引号注入,一条一条查数据。

jarvis OJ web题目浅析插图64

显然这么多表中第一个就是flag存放的表名,接下来同样的方式开始查列名。

jarvis OJ web题目浅析插图65

表名列名都有了,现在可以直接查数据。

jarvis OJ web题目浅析插图66

0x16 babyphp:

题目入口:http://web.jarvisoj.com:32798/

进入题目,在about界面发现了三个类似提示的东西,其中git考虑到存在git泄露,访问git目录。

jarvis OJ web题目浅析插图67

这里并没有报404的错误,说明存在git目录,利用git扫描工具尝试得到php源码。查看关键部分。

<?php
if (isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    $page = "home";
}
$file = "templates/" . $page . ".php";
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
assert("file_exists('$file')") or die("That file doesn't exist!");
?>

这里存在一个危险函数assert。Assert($assertion,[$description])——检查指定的assertion并在结果为false时采取适当的行动(如果不为false就会执行此语句),了解了这个函数我们就可以直接构造payload?page='.system('cat templates/flag.php').'查看源代码拿到flag。

jarvis OJ web题目浅析插图68


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

暴露内核内存并通过滥用COW机制实现一个注射器
403bypass问题简析
0day的产生 | 不懂代码的”代码审计”
某友NCCloud黑名单绕过分析
【论文速读】| AutoSafeCoder:通过静态分析和模糊测试保障LLM代码生成安全的多智能体框…
0day的产生 | 权限绕过的秘密

发布评论