恕我孤陋寡闻,这几天才知道有WeChall这个神奇的网站。
这个网站算是一个CTF刷题的站吧。有各种题目,还会搜集其他有CTF的网站。
当然,应该还有其他这种类型的网站,嗯,求告诉~
那么,就开始啦~
Training: Get Sourced
这题就是简单地查看源代码即可。
Training: Stegano I
说是图片隐写,其实用16进制打开就可以看到flag。
Training: Crypto – Caesar I
凯撒密码,写个脚本跑一下。
(PS:看到一个大神的脚本,吓死了!echo "VJG SWKEM DTQYP HQZ LWORU QXGT VJG NCBA FQI QH ECGUCT CPF AQWT WPKSWG UQNWVKQP KU UDCJRKRJUROQ" | tr [A-Z] [Y-ZA-X]
)
Training: WWW-Robots
这题就是告诉你有robots.txt
这种东西的存在。
它是用来告诉爬虫,哪些目录不能爬。所以呢,这里面很可能会包含这个网站的一些目录结构。
最后访问www.wechall.net/robots.txt
就好了。
Training: ASCII
ASCII码转chr,没啥好说的。
Encodings: URL
UrlEncode转换。
Training: Encodings I
二进制转ASCII。用JPK即可。记得先Binary Format一下。
Training: Programming 1
用Python写个小脚本。我主要用到了urllib.request
库。
就是先获取生成随机数那个页面的http头。然后把自己的Cookie加上去。(具体内容百度去~)
然后请求这个页面,得到字符串,将其拼接在提交页面的url上。
再请求提交页面的http头,并添加自己的Cookie,最后请求即可。
Warning:
这个网站在国外,但是打开一个页面就要1秒多。所以国内跑这个脚本肯定超时。这时候你就需要一台国外服务器来跑这个脚本。至于哪里来的服务器,骚年你加油!
Enlightment
这题呢,一开始看到三片的二进制,有点头晕。。
但是再一看题目,说是要看到光?(光=白光?)
再看二进制,分为红绿蓝三个部分(三原色?)
那么,就猜想说,这三原色的叠加部分就是白光。那么只要我们将三部分二进制叠加起来即可。
话说,怎么叠加呢?
我是用JPK这个工具的OR(或)功能,将三部分二进制依次或运算,最后结果转成ASCII就得到了flag。
这题还有第二关。给出了三种不同颜色的二进制。抱着上一关的思想,在尝试了依次XOR(异或)之后,得到了flag。
Guesswork
这题。。。。呵呵呵。。。我猜不出来。。。
好吧,看了下别人的题解,说是:
这个账号名字是wechall,同时它又是个机器人(bot)
所以,密码就是,wechallbot。。。
呵呵呵呵呵。。。。
No Escape
这题是Mysql中的Update注入。
通过查看源代码发现,代码过滤了很多符号,但是有一个’`’这个符号没过滤(好像是叫做重音符?)
那么就简单地这样:
vote_for=barack`=111%23
就可以使得barack的票数达到111票,从而得到flag。
Training: Regex
这题是正则表达式的练习。正则表达式30分钟入门教程
第一关:
匹配一个空字符串。那么我们的表达式可以这样:/^$/(记住表达式两边要加'/',不然运行不了)
第二关:
要求我们匹配`wechall`这个字符串。
结合第一关,我们只要在其中添加字符即可:`/^wechall$/`
第三关:
要求我们匹配特定的图片文件+特定的后缀。
同时,还不能用**捕获分组**。(非捕获分组:(?:exp))
那么表达式就是这样:`/^wechall4?\.(?:jpg|gif|bmp|png|tiff)$`
第四关:
更进一步,要求匹配第三关列出的文件,但是只返回文件名而不返回后缀。
那么我们就给**文件名部分加个分组**即可:`/^(wechall4?)\.(?:jpg|gif|bmp|png|tiff)$/`
Training: PHP LFI
这题考察的是PHP的文件包含。
通过题意可得知我们要构造的url是index.php?file=xxxxx.php
。
接着,还告知我们flag在solution.php
里面。(要向前跳目录(使用../))
这样就是只要包含这个文件即可。
可是,当我们构造index.php?file=../../solution.php
时,返回php出错。
再看一眼源码,说是会将文件强制加一个.html
后缀。
为了绕过这个限制,我们经行00截断,构造:index.php?file=../../solution.php%00
,就可以通关。
PHP 0817
这题也是文件包含漏洞。
仔细看看源码,比上一题简单很多。
只要构造:index.php?which=solution
就可以了
至于为啥,看源码去!
Training: Crypto – Transposition I
换位密码,百度百科看去。解出来也很简单,慢慢尝试吧~(我才不会和你说我是百度的)
Training: Crypto – Substitution I
又是解密码,推荐一个网站quipqiup,这个网站解文字密码炒鸡有用!
把这串密码扔进去,然后点solve就跑出来了。
Training: Crypto – Caesar II
这个就是凯撒增强版。理念一样,只是上下限变了一下而已。很简单。
Training: MySQL I
这题很简单。关键看源码这句话:
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
只要用注释将后半句AND语句注释掉,就可以过了。
username=admin%27%23&password=&login=Login
Training: MySQL II
这题比上一题多了一个密码的单独验证。一看上去貌似这题可以通过注入来查询管理员密码来做。但是,这题其实可以使用我们常用的union select来直接登陆。
username=-1' union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'%23&password=123456&login=Login
这句话首先通过username=-1
将原语句报错。因此返回的将会是第二条语句产生的信息。
而我们union select
的是直接构造了用户名为admin,密码为123456的md5值。这样就可以让程序误认为我们构造的信息就是它从数据库里面提取得到的信息。这样就可以直接登陆了。
Training: Register Globals
这题的大意是使用全局变量覆盖,将某些变量的值覆盖为我们所需要的。
在这里,程序会将GET等语句得到的变量注册成为全局变量,就可以覆盖掉源代码中的变量值。
if (strtolower($login[0]) === 'admin')
{
$chall->onChallengeSolved(GWF_Session::getUserID());
}
从这句话我们可以看到,判断是否挑战成功的依据就是这个login[0]
是否为admin
。
联想到上文的变量覆盖。那么就很容易想出,只要我们将login[0]
这个变量覆盖为我们需要的值(admin
)那不就可以直接通关,绕过登陆验证了?
globals.php?login[0]=admin
就酱,过了~
Training: Baconian
这题就是培根密码。其中大写对应A,小写对应B(也可能反过来),然后培根解密即可。
其中,培根有两套密码表,所以两套都要试试,就可以得到密文了。
Training: LSB
图片最低有效位隐写。将图片扔到Stegsolve.exe里面,一会就可以找到了。
Limited Access
这题是使用了.htaccess
做了访问限制。当我们访问这个网址的时候,就会弹窗让我们输入用户名和密码:
http://www.wechall.net/challenge/wannabe7331/limited_access/protected/protected.php
在题目页面可以查看源码发现是GET
方法做了限制。那么我们就不用GET试试别的。
我在查资料的时候,发现,php会将TO
方法给解析成GET
方法。那么我们就可以抓包,改为TO
之后,发包,就可以访问了。
Limited Access Too
同上。
Training: RegexMini
这题是一个正则匹配题。成功的要求是输入一个长度>16位的一个用户名,并成功注册。
但是,它使用了正则:
/^[a-zA-Z]{1,16}$/
过滤了16个字符以上的用户名。
在这里,我们需要知道一件事情。
在php的正则里面,^$
的意思是匹配前一个换行符之后,下一个换行符之前,这中间一段的字符。所以,我们只需要输入16个a,再加上一个换行符(%0A)就可以了。
Are you serial
这一题呢,出问题的在insecure.inc.php
。当然,从名字就可以看出来这不安全233。
这个文件的意思呢,是当找不到某个类的时候,就会去当前目录下去自动包含php文件,来查找这个类。
再看看SERIAL_Solution.php
,这里面写的就是通关所需要的函数。
从code.php
文件来看,本身是不会去包含这个Solution
文件的。而且,这里的数据传输采用了序列化Cookie的方式。
所以呢,这里我们可以在修改Cookie,让它去调用SERIAL_Solution
这个类。当这个类找不到时,自动包含程序就会去目录下寻找包含,这样也就达到了运行SERIAL_Solution的条件,也就通关了。
O:15:"SERIAL_Solution":0:{}
Training: Warchall – The Beginning
这里面有5题,都是对于Linux的基础运用。
首先,他说发邮件给你,嗯,这邮件是不会发出的- -所以,只要你更改了密码,就能用他给你的地址登陆服务器。
level 0: bitwarrior:
level 1: LameStartup: 通过find找到solution
level 2: HiddenIsConfig: 通过.bash_history找到
level 3: RepeatingHistory: 仍然是在.bash_history中找到
level 4: AndIknowchown: 一个没有权限的文件,但有改权限的权限
level 5: OhRightThePerms: 仍然是改权限的小游戏
Py-Tong
这题,挺简单的。使用的是WarChall的服务器。
查看Python源代码,可以发现,该程序会读取一个你指定的文件两次。
如果第一次读取成功之后,第二次尝试读取失败,那么就算通关。
如果第一次和第二次读取得到的内容不一样,那么也算通关。
这样,知道了这些之后,我们就可以写一个文件,去和这个程序进行竞争。
i=0;
while(1):
f=open('1','w');
f.write(str(i));
f.close()
这样的一个程序,反复读取。只要将这个程序和pytong同时运行即可。
Py-Tong2
这算是个隐藏关卡?反正用上面的程序,多跑几次也就出来了。
PHP 0819
这一题呢,和ZJPC-CTF的某一题很像。嗯,某人承认是抄的了233
怎么说呢,这题是要让你构造一个语句,然后运行,使得$spaceone==='1337'
即可。
这里,需要用到一个东西叫做heredoc。
使用heredoc就可以成功过关了。
Host Me
这题呢,首先是改http头的Host。这点很简单,但是有个问题就是,他内网有一台机器也叫做localhost
。这就导致了如果是简简单单地访问localhost
的话,其实访问的是那台机器而非我们做题的机器。
为了避免这个问题,我们就要使用绝对路径的URL,就是GET 后面的网址补全,然后Host再写成localhost
就可以了。
Auth Me
这题呢,就是一个SSL加密传输的问题。难点在于怎么去找这个证书。
其实,你观察下它apache.conf的网址,会发现叫做find_me的文件夹。你直接访问就可以找到证书了。
Connect The Dots
这题- -Google了下,发现是盲文。。。
Stegano Woman
这个啊- -信息隐藏在rar注释里面,而不是图片。rar注释最后一行拿去十六进制下查看,就可以发现一串类似二进制的东西。转成二进制,再转ASCII即可。
impossible n’est pas françaisi
这一题是让你分解一个炒鸡炒鸡炒鸡大的数的质因数。
然而,其实基本是不能在6s内用程序跑出来的- -除非你是天河
但是,只要我们尝试提交一次之后,就可以发现它会返回一个正确的解。
既然如此,我们只要先提交一次,然后程序读取它返回的正确数字串,再提交就可以了。推荐使用Python的requests。
PHP 0815
这一题,是要提交一个修复脚本中可能存在的SQL注入漏洞。
而且要求我们能找到最短的修复方法并提交。
想了很多,然而貌似都太长了- –
最后Google得,-0
就是答案。
这里的-0
的意思是将输入的$show
强制转换为数字,就可以防止注入。
Stegano Attachment
这一题啊- -就是简单地rar文件藏在jpg里面罢了- -改后缀吧(连修复头都不用
Zebra
这匹斑马身上的是条形码。。。ps扣出来,拿去网上解码就可以了。
Pimitive Encryption
妈蛋,这题,我就**了!
首先,Magic Word是吧,可以通过异或得出前四位的密钥。嗯,是3.14
。
那么看起来就是用pi
来当作密钥的咯?但是是几位的pi
呢?
一开始我比较年轻,too young too naive。尝试了3到20位的pi,都失败了。。
最后一怒之下,上网找了个20W位的pi来当密钥。
吐血解密成功!
Stop us
这题又是一个新的知识点,以前从未接触过的。
关键在于这句话
'ignore_user_abort' => false
这句话所造成的后果就是,一个脚本当用户断开连接(关闭窗口之类的),这个脚本就会被强行终止。
再看看php脚本,可以发现它是先给我们添加了一个域名,之后才扣费的。
所以我们只要在扣费前关掉页面即可。
PHP 0818
这一题呢,貌似又是PHP的弱类型匹配的锅。
return $number == "3735929054";
就是这句话。它前面过滤了所有的1~9的数字,但是我们只要用十六进制就可以绕过了。
(PHP真是世界上最好的语言啊
eXtract Me
这一题给了个zip压缩包。假如你是去老老实实地解压的话,会发现永远解压不完(我会告诉你我解压了18W次吗?!)
但是,你会发现只要解压一次,解压出来的文件和源文件大小相差很大。通过十六进制查看我们可以发现这货是两个压缩包拼接在一起的。所以我们只要把后面的压缩包扣出来即可。
然而,还是解压,出来一个xar文件- -通过7zip解压,出来一个又一个奇葩文件。。但是,在解压途中会发现有一个rar的注释是有东西的。拷贝出来,用这数据新建一个rar文件,发现需要密码- -好吧,只要其他的包继续解压就能到最后拿到密码了- -。。
bill for Bill
这一题,先下载到SAM和system文件,用彩虹表去跑出密码,得到CVV提交就可以进入第二关了。第二关半社工吧- -毕竟只需要百度到Bill Gates的一些信息就可以改密码了。然后进去删除邮件即可。
htmlspecialchars
这个呢,是我写过的第一份xss
。具体的思路就是因为htmlspecialchars
函数默认不会过滤单引号,所以可以直接xss
。
'onmousemove='alert(1)
至于修补方法,只需要在htmlspecialchars
里面加一个参数就行了(自行百度)
PHP 0816
这题的漏洞,我还是第一次见,嗯,毕竟见识太少。
具体就是foreach
的时候,它是按照赋值顺序来foreach
的。而且,主要几个函数的顺序是不固定的。所以我们只要改变GET的参数的顺序,就可以在白名单过滤之前显示出我们的文件。