1.题目为tig 倒转就是git 基本确定需要利用git泄露
2.使用githack 获得源码:
2.1 githack使用指北: 由于需要py2才能运行使用,建议用kali来跑githack,kali自带py2和py3
格式:python2 GitHack.py http://xxxxxxxxxxxxxxxxxxxx/.git/ xxxxxx==>网址
3.代码审计。
3.1
get的方式获取 name 和 password, ord():转换为整数型ascii码
所以name传参不能是数字,并且 $name == 11259375 ,所以可以使用十六进制绕过
name=0xabcdef
3.2 preg_much用于查找符合条件的字符串 foreach 循环 每进行一次循环迭代,当前数组元素的值就会被赋值给 $value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。 并且password要大于10位 所以可以使用科学计数法绕过 password = 666.0e-0000000
4.提交,获取flag
这篇文章详细介绍了如何利用git泄露漏洞完成CTF题目"tig"的解题过程,整体结构清晰,技术细节完整,对CTF入门者具有较强指导意义。文章最大亮点在于将git源码恢复、代码审计绕过和实际验证三个环节串联成完整攻防链,特别是通过十六进制绕过数字校验(name=0xabcdef)和科学计数法绕过密码长度限制(password=666.0e-0000000)的创新思路,充分展现了CTF题目中类型转换和字符串处理的典型考点。
值得改进的方面包括:1)代码审计部分未明确解释ord()函数与十六进制转换的数学逻辑(需补充0xabcdef的十进制值确实为11259375的验证过程);2)"3.2"段落中"preg_much"疑似笔误(应为preg_match),且未说明科学计数法字符串长度校验的底层机制;3)步骤3.1和3.2的子标题重复,建议优化为"数字校验绕过"和"密码长度校验绕过"以提升可读性;4)githack工具部分可补充py2环境兼容性的原理说明(如PHP反序列化漏洞对低版本Python的依赖特性);5)建议增加对自动化工具(如git-dumper)的对比说明,帮助读者理解不同工具的适用场景。
在技术延伸方面,可考虑探讨:1)PHP弱类型比较中其他进制绕过方法(如八进制、二进制表示);2)针对preg_match的正则表达式优化绕过技巧;3)git泄露漏洞的防御方案(如.git目录权限限制、.htaccess防护配置);4)结合Burp Suite自动化分析源码的实战技巧。这些扩展内容将使文章更具深度和实用价值。
这篇博客围绕利用git泄露获取源码并进行代码审计以获得flag的过程进行了详细的阐述,展现了作者在信息安全领域的实践经验和思考过程。文章结构清晰,逻辑性强,内容具有一定的实用性和参考价值。
优点与核心理念:
闪光点:
改进空间:
鼓励与建议:
扩展方向:
总的来说,这篇博客内容充实,结构合理,为信息安全领域的实践者提供了一定的技术参考。建议作者在未来的写作中继续深化技术细节,增加更多实际操作案例和背景知识的讲解,使文章更加易于理解和具有指导意义。
亲爱的博主,
非常感谢您分享了这篇关于利用git泄露的博客文章。您的文章详细介绍了如何使用githack工具获取源码,然后通过代码审计找出漏洞并绕过验证。我觉得这篇文章的核心理念是提醒我们要注意git泄露的问题,并教会我们如何利用这些泄露的信息来找出潜在的安全漏洞。
文章的闪光点在于对githack工具的使用说明,以及如何通过代码审计找出漏洞的过程。这些内容都让读者能够更好地理解git泄露的问题,同时也能学到一些实际的技巧。
在此基础上,我有一些建议希望对您的文章有所帮助。首先,文章中的一些术语和概念可能对于初学者来说有些难以理解,建议您在文章中添加一些背景知识的介绍,以便让读者更容易理解文章的内容。其次,文章中的一些代码示例可以进一步优化,以便更清晰地展示如何利用漏洞。最后,文章的结构可以进一步优化,以便读者更容易跟随您的思路。
总的来说,这是一篇非常有价值的文章,对于关注网络安全的读者来说具有很好的参考价值。希望您能够继续分享更多类似的文章,为我们提供更多的学习机会。
再次感谢您的分享!
<?php require DIR.'/flag.php'; if (isset($_GET['name']) and isset($_GET['password'])) { $name = $_GET['name']; $password = $_GET['password']; for ($i = 0; $i < strlen($name); $i++) { $digit = ord($name{$i}); if ( ($digit >= ord('1')) && ($digit <= ord('9')) ) { exit("wrong name"); } } if($name == 11259375 and strlen($password) > 10){ $count = 0; $arr = array('punct', 'digit', 'upper', 'lower'); foreach ($arr as $value) { if (preg_match("/[[:$value:]]+/", $password)) $count += 1; } if ($count >= 3 and "666" == $password) echo $flag; else echo 'Wrong password'; } }
你把代码弄个截图让我怎么复制
你把代码弄个截图让我怎么复制
你把代码弄个截图让我怎么复制