xctf闯关记录

ics-05

先右键查看源代码,发现一个连接
在这里插入图片描述
在这里插入图片描述
发现page里的index被输出了,当把index换成123,同样输出123,这里用php伪协议读index.php
在这里插入图片描述
得到源码,截取部分
在这里插入图片描述
发现要伪造xff,但是伪造了之后这个正则匹配能干什么,看了wp才知道有一个preg_replace的命令执行漏洞

parrent中若有/e修正符,则会把replacement的代码当作命令执行

那么就构造url,这里还需要让pat匹配到sub的内容才会执行

在这里插入图片描述
找到flag,cat不能读文件,试试tac
在这里插入图片描述

lottery

这道题的大致意思就是七彩球,输入7个数字,如果跟随机生成的一样就中大奖
在这里插入图片描述
我们需要9990000刀才能买flag,应该是个逻辑漏洞了,看一下源码,在buy.js中发现了源码
在这里插入图片描述
发现了一个api.php,访问
在这里插入图片描述
可以看到要我们输入json格式的数据,burp抓包看看
在这里插入图片描述
只需要想办法让输入的数全匹配就行了,因为每一个数字除了0都=true,改包
在这里插入图片描述
在这里插入图片描述
发现被当成一个字符串了,那么把双引号去掉
在这里插入图片描述
稍微试几次,这样就可以买flag了
在这里插入图片描述

bug

在这里插入图片描述
一个简单的页面,先注册一个用户phoebe,登陆
在这里插入图片描述
点manage弹窗你不是admin,那么先看看能不能改密码
在这里插入图片描述
抓包修改用户为admin也改不了密码,看来不知道原密码在这改不了,先登出,在登陆页面看到一个findpwd的还没用,进去又有测用户信息的,那就先填正确信息看看
在这里插入图片描述
在这里插入图片描述
抓包,发现只有一个需要测得信息,就是user,那么把他改成admin就ok了
在这里插入图片描述
登陆admin用户
在这里插入图片描述
点击manage,说ip错误,XFF伪造127.0.0.1,进去之后没什么有用得信息,F12发现注释
在这里插入图片描述
看到有个filemanage,把do传参成upload试试,果然得到一个文件上传得页面,然后就是想办法绕过上传php就行
在这里插入图片描述
php5后缀、js的php代码绕过就行,既然没有源码绕过就是各种试

flatscience

一堆英文,好几个链接
在这里插入图片描述
随便点个链接,发现是pdf的文件
在这里插入图片描述
御剑扫一波后台,发现了一个robots.txt
在这里插入图片描述
两个页面都是登陆页面
在login.php的源码上看到一个提示:
在这里插入图片描述
在url上加?debug会得到login.php的源码,一会再看

在login.php上试试注入
在这里插入图片描述
发现了是sqlite的数据库类型,之前从来没遇到过,这里正好学习一下

在sqlite中,有一个默认的系统表叫:sqlite_master ,sql是sqli_master的默认字段,name是表名
给个示例吧:SELECT name FROM sqlite_master WHERE type=’table’
还有一点是sqlite里没有database()等这些方便的东西

构造语句,这里字段数是试出来的

usr=’ union select name,sql from sqlite_master–+&pw=

然后会发现页面跳转了,burp抓包
在这里插入图片描述
在set-cookie里发现了回显的内容,urldecode一下发现了表Users,字段id,name,password,hint

挨个读一下

usr=’ union select id,name from ‘Users’ --+&pw=123

得到name=admin,password=3fab54a50e770d830c0416df817567662a9dc85c,hint是
在这里插入图片描述
在看看login的源码
在这里插入图片描述
可以看到最重要的是password那里,它把$pass和Salz拼接,然后sha1加密,而我们刚刚注入得到的password就是sha1之后的结
果,所以就需要得到原先的值,回到读出来的hint:my fav word in my fav paper,意思应该是这个加密前的值在那些pdf中,之后
就用python脚本挨个试,直到=3fab54a50e770d830c0416df817567662a9dc85c

直接用网上现成的脚本吧

from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import sys
import string
import os
import hashlib
 
def get_pdf():
	return [i for i in os.listdir("./") if i.endswith("pdf")]
 
 
def convert_pdf_2_text(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    device = TextConverter(rsrcmgr, retstr, codec='utf-8', laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    with open(path, 'rb') as fp:
        for page in PDFPage.get_pages(fp, set()):
            interpreter.process_page(page)
        text = retstr.getvalue()
    device.close()
    retstr.close()
    return text
 
 
def find_password():
	pdf_path = get_pdf()
	for i in pdf_path:
		print "Searching word in " + i
		pdf_text = convert_pdf_2_text(i).split(" ")
		for word in pdf_text:
			sha1_password = hashlib.sha1(word+"Salz!").hexdigest()
			if sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c':
				print "Find the password :" + word
				exit()
 
if __name__ == "__main__":
	find_password()

然后得到了值,返回在admin.php登陆即可

发布了22 篇原创文章 · 获赞 0 · 访问量 868

猜你喜欢

转载自blog.csdn.net/chasingin/article/details/102865413