[CTF题目总结-web篇]攻防世界:flatscience

不会SQL注入的PHPer不是好的python脚本编写者。

一、题目分析

进入发现站点存在pdf文件链接和子站点,不过能找到的信息也就这些了。
那么扫个后台——发现存在login.php和admin.php,根据出题者的hint可知,admin页面无法绕过,并且通过设置debug参数,我们可以查看login页面源码。
简单测试发现login页面存在注入点(有报错,后台数据库是sqlite),通过代码审计及关于sqlite数据库特性的一些联想,我们可以找到注入反馈点:cookie。从这里我们能得到admin密码的sha1哈希值,并且根据表中的hint可知:对应的password在这个教授的论文里。
由此,最后的工作就是:爬取该站点的所有pdf文件并爆破。

知识点小结:
sqlite_master、简单爬虫、PDF文件解析。

二、具体思路

  1. 使用御剑扫后台,发现存在login.php页面和admin.php页面。
    一点感想:基本上你可以自己编写一个扫描器——就是一本字典和状态码检测,没什么难的。

在这里插入图片描述

  1. admin页面F12发现关键hint:don’t even try to bypass this。那么转到login页面寻找漏洞。

在这里插入图片描述

  1. login页面F12发现关键hint:debug-Parameter。在url后加上参数debug得到页面源码,跟进。

在这里插入图片描述

  1. 代码审计可知,sql注入点位于query函数,sql反馈点位于setcookie函数。需要注意的是:password是和salt ‘Salz!’拼接之后经过一个sha1哈希才传入查询逻辑的,这也就意味着数据库中“password”表项存放的是密码加盐之后的哈希值。
    在这里插入图片描述
  2. 在login表单中简单注入可发现后端数据库是sqlite。那么通过查询其全局模式表sqlite_master(存放本数据库所有表、视图、索引、触发器等的定义)可找到用户表的sql定义。
    构造payload:user=’ union select name,sql from sqlite_master --。(sqlite注释符是‘–’)。
    从cookie反馈信息可以看到:用户表名为Users,具有id、name、password、hint四个表项。

在这里插入图片描述

  1. 那么再依次从Users表中提取出id、name、password、hint。
    payload:user=’ union select id, (id或name或password或hint) from Users --。
    从cookie反馈信息中可以找到用户admin的加盐密码哈希值,以及一条hint:my fav word in my fav paper?!
    由此可见,密码就藏在教授的论文中,所以我们需要爬取站点所有pdf并转换为txt,逐一比对以求爆破。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 爬取站点所有pdf文件。
import urllib.request
import re

allHtml=[]
count=0
pat_pdf=re.compile("href=\"[0-9a-z]+.pdf\"")
pat_html=re.compile("href=\"[0-9]/index\.html\"")


def my_reptile(url_root,html):
	global pat_pdf
	global pat_html
	html=url_root+html
	
	if(isnew(html)):
		allHtml.append(html)
		
		print("[*]starting to crawl site:{}"<
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值