ctfshow红包第六弹

在开始界面点击hint得到提示信息:
在这里插入图片描述
打开连接得到的是一个登录界面,前面提示了不是sql注入,直接放弃尝试,查看网页源码得到信息:

<script>
		function login(s){  
		var u=document.getElementById("username").value;
		var p=document.getElementById("password").value;
        var xhr = new XMLHttpRequest();  
        xhr.open('GET', "login.php?u="+u+"&p="+p);  
        xhr.responseType = 'arraybuffer';  
        xhr.onreadystatechange = function getPdfOnreadystatechange(e) {  
            if (xhr.readyState === 4) {  
              if (xhr.status === 200) {  
                 var data = (xhr.mozResponseArrayBuffer || xhr.mozResponse ||  
                            xhr.responseArrayBuffer || xhr.response);   
				if(data){
					ctfshow(s,data);
				}
              } 
            }  
        };  
        xhr.send(null);  
		}  
		function ctfshow(token,data){

			var oReq = new XMLHttpRequest();
			oReq.open("POST", "check.php?token="+token+"&php://input", true);
			oReq.onload = function (oEvent) {
				if(oReq.status===200){
						var res=eval("("+oReq.response+")");
						if(res.success ==1 &&res.error!=1){
							alert(res.msg);
							return;
						}
						if(res.error ==1){
							alert(res.errormsg);
							return;
						}
				}
				return;
			};
			oReq.send(data);
		}
	</script>

发现登录信息仿佛不是很重要的信息oReq.open("POST", "check.php?token="+token+"&php://input", true);
继续查看没有发现更多的有用信息,下一步尝试使用dirsearch进行扫描:
在这里插入图片描述
web.zip文件很有可能是网站的备份文件,解压后得到check.php.bak文件,查看文件内容:

function receiveStreamFile($receiveFile){
 
    $streamData = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
 
    if(empty($streamData)){
        $streamData = file_get_contents('php://input');
    }
 
    if($streamData!=''){
        $ret = file_put_contents($receiveFile, $streamData, true);
    }else{
        $ret = false;
    }
 
    return $ret;
 
}
if(md5(date("i")) === $token){
	
	$receiveFile = 'flag.dat';
	receiveStreamFile($receiveFile);
	if(md5_file($receiveFile)===md5_file("key.dat")){
		if(hash_file("sha512",$receiveFile)!=hash_file("sha512","key.dat")){
			$ret['success']="1";
			$ret['msg']="人脸识别成功!$flag";
			$ret['error']="0";
			echo json_encode($ret);
			return;
		}

			$ret['errormsg']="same file";
			echo json_encode($ret);
			return;
	}
			$ret['errormsg']="md5 error";
			echo json_encode($ret);
			return;
} 

$ret['errormsg']="token error";
echo json_encode($ret);
return;

发现这里是和key.dat文件进行强碰撞(内容不一样,但是两个文件的md5值相同,同时sha1值不相同)
key.dat文件key直接进行下载
借助工具:fastcoll_v1.0.0.5.exe生成两个md5值相同的文件。fastcoll_v1.0.0.5.exe -p key.dat -o 1.dat 2.dat
接下来直接将1.dat或2.dat直接作为post内容上传即可碰撞成功。

import requests
import time
import hashlib
import threading

def post(data):
	try:
		r=requests.post(url,data=data)
		if "ctfshow" in r.text:
			print(r.text)
	except Exception as e:
		pass

mi=str(time.localtime().tm_min)
m=hashlib.md5(mi.encode()).hexdigest()
url='http://ce61acc9-c947-4ac4-9d2c-3b81b8708df5.challenge.ctf.show:8080/check.php?token={}&php://input'.format(m)
with open('key.dat','rb') as f:
    data1=f.read()
with open('2.dat','rb') as f:
    data2=f.read()
for i in range(30):
	threading.Thread(target=post,args=(data1,)).start()
for i in range(30):
	threading.Thread(target=post,args=(data2,)).start()

直接执行上面的代码就可以成功(以上代码来自于一位大佬,有些地方我也不是很清楚)
完成这道题目后,进行了一下尝试将key.dat文件前面的Hellworld!删除掉也能成功,这就完全不知道为什么了!
/-------------------------------------------------------------------------------------/
太多人都对生成文件进行碰撞这个事情发出疑问了,特地补充一下:
fastcoll用来生成两个MD5值相同但内容不相同的文件

fastcoll_v1.0.0.5.exe -p init.txt -o 1.txt 2.txt

-p 是源文件, -o 是输出文件(两个),同样我们也可以用工具生成四个MD5相同但内容不同的文件
先生成两个MD5相同但内容不同的文件

fastcoll_v1.0.0.5.exe -o 1.txt 2.txt

取其中一个文件作为源文件再生成两个MD5相同但内容不同的文件
在这里插入图片描述
可以看到1.txt 2.txt是128字节,而3.txt 4.txt是256字节,因此我们只需要将3.txt,4.txt文件后128字节取出来放在2.txt后面,便可以有四个MD5相同内容不相同的文件

取出可以用tail

tail.exe -c 128 3.txt > a
tail.exe -c 128 4.txt > b

合成可用win自带的type

type 2.txt a > 5.txt
type 2.txt b > 6.txt

(注:该方法是在网上找到的,当时就是根据这些内容,然后直接尝试上传其中生成的任意一个文件,最后实验成功了,但是很搞的就是事实上MD5值根本不同,所以这个答案出来得就很离谱)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
根据提供的引用内容,这道红包的目标是找到flag。在源代码中,我们可以看到一个GET参数cmd,它可以用来执行命令。然后,在引用中,我们可以看到一个POST请求,其中cmd参数被设置为`. /??p/p?p??????`,这可能是一个命令路径。通过修改POST请求,我们可以尝试找到flag.txt文件。根据引用中的内容,根目录下有flag.txt文件,因此我们可以尝试执行`ls /`命令来列出根目录中的文件。请记住,这是一个漏洞目,仅用于学习和研究目的,不要在未授权的情况下尝试攻击他人的服务器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [CTFshow--web--红包第二](https://blog.csdn.net/weixin_45908624/article/details/128786662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [CTFSHOW 红包第二](https://blog.csdn.net/qq_46091464/article/details/107954930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值