题目源: https://www.ichunqiu.com/battalion?q=2729 i春秋上滴题目
小工具: Burp Suite(抓包神器)、pyhon3的环境
思路点用黄色加粗标记、操作点用绿色加粗标记。
解题的流程:
1.(忽略对首页的调侃,直接login)仔细观察,登录题,检查源码没有隐藏的元素,cookie没有可疑点,,注意力全部放在substr(md5(captcha), 0, 6)=xxxxxx(一个六位字符串,每个人虚拟题目配置的都不同),要求我们提供的captcha经过md5加密后的前六位与xxxxxx相等,进行md5碰撞尝试,编写一个python3脚本.
1 import hashlib 2 3 def getMD5(): 4 catch=1 5 while 1: 6 MD5=hashlib.md5(str(catch).encode("utf-8")).hexdigest() 7 if(MD5[0:6]=="XXXXXX")://要求的六位字符串 8 print(catch) 9 return 10 catch=catch+1 11 12 if __name__=="__main__": 13 getMD5() 14 print("over!")
2.解决了验证码的事,开始考虑Username和Password,因为其他途径之前检查的差不多了,应该是sql_injection的考点了,进行多次的sql尝试(这个知识点不展开,太大了)阔以发现:Username=admin' or 1=1# Password=xxxxx(随便输入)成功登录。
3.查看三个文档的内容,在a.php中提到了flag在根目录下,那就按文件下载的套路,截取下载请求包,把目标文件路径改为flag所在路径,我先尝试的相对路径下载“../flag.php”,结果失败。学习大佬的姿势,这里使用的是绝对路径“/var/www/html/Challenges/flag.php”(我比较疑惑的就是这个绝对路径是怎么猜解出来的)。返回一份php源码。
4.审计源码,我们要提交一个post表单,添加一个flag=flag,就能返回我们的的值了,有意思的是源码中的判断===。post表单如下