2017 美亚柏科邀请赛 writeup

一个辣鸡随手写的writeup

Posted by Les1ie on December 27, 2017

拿flag是不可能的了,这辈子都不可能拿flag的。 题目又不会,只能看看各位神仙师傅的wp才能勉强说是我是搞安全的。 逛大佬的博客就像是回了家一样,这里的师傅都好有才,说话又好听,我超喜欢这里的。

web2

题目

login as webmaster

打开是一个登录框

看起来像是一个爆破或者登录绕过。

拿出了1w的字典,php万能密码爆破许久,试过了root, admin,administartor, webmaster, manager等用户均无法登录,登录的结果给出的回显包括

bad request. 
login failed

或者

login failed
login failed
bad request. 
login failed

一些师傅说的会有法语的报错,我没看到

后来问了隔壁的师傅,他们说payload 是数组绕过

emmm mdzz

payload

user[]=admin&pass[]=a&submit=submit

web4

题目

你能找得到flag吗

打开提示 你会sql注入吗, 还有中文的验证码

试了下验证码是没有验证的

过滤了空格

回显放到了cookie里面。

具体参考厦大的神仙们的wp

web5

打开提示需要接收四个参数

Hello hacker! Do you want the flag?<br>
<!--
	$k1=$_GET['key1'];
	$k2=$_GET['key2'];
	if(file_get_contents($k1)==="Hello hacker!"){
		echo 'welcome! Hacker!<br>';
	}
-->
<!--
		if(md5($k2)>666666*666666)
		{
			include('ctf.php'); 
		}
-->
<!--
		$k3=$_GET['key3'];
		$k4=$_GET['key4'];
		if(intval($k3)<666)
		{
			if($k3==666)
			{
				echo 'Come on, flag is coming<br>';
				if($k4>0)
				{
					if(intval($k3+$k4)<666)
						echo $flag;
				}
			}
		}
-->

每次修改传参,循序渐进即可拿到flag, 花式绕过php的各种限制 首先需要满足key1, key1 会使用file_get_contents()函数去取网页的内容,注意到Headers是这个样子的

HTTP/1.1 200 OK
Date: Sat, 23 Dec 2017 08:21:16 GMT
Server: Apache
luck: hellohacker.php
Content-Length: 545
Connection: close
Content-Type: text/html

里面有一行luck: hellohacker.php, 打开看就是他需要file_get_contents获取到的文本的内容,最开始包含这个文件,始终不行,看下源码可以知道后面还有一个注释233333, 那么可以试试文件包含暴力把需要的文本放进去,直接用data:text/plain传过去,因为有符号之类的会比较麻烦,所以base64之后传进去, 过key1的payload如下

/index.php?key1=data:text/plain;base64,SGVsbG8gaGFja2VyIQ==

厦大的师傅们用的php://input传字符串进去

根据回显可以得知需要传key2了,要求是key2的md5的值要大于666666*666666,我的思路是 那么直接找一个字符串,散列值全是数字的即可,写一个python脚本跑了一下, 找到了1518375, md5散列值为93240121540327474319550261818423 传进去即可。厦大的师傅们用了字符串skwerl11, 他的md5值是1e21ff98693770b768e4a1a4a704811b, 1e是科学计数法,php在比较字符串和数字的时候会把字符串转化为数字,直到遇到不是0-9的值就会停止,所以这里会转化成1e21也就是 1*10^21,要找到这个字符串只有php能最快搞定, py是不懂php的黑了

key2 的payload如下

/index.php?key1=data:text/plain;base64,SGVsbG8gaGFja2VyIQ==&key2=1518375

下面是key3, 他是需要key3的值转换成int之后小于666, 同时需要原始的值等于666, 自然想到了精度绕过,于是传了个665.99999记不清有多少个9了,由于的传的9不够,所以没过,厦大师傅是用的精度绕过,传值665.99999999999999

机智的misc手说可以用16进制,然后输入了0x29a,搞定key3

key3的payload如下

/index.php?key1=data:text/plain;base64,SGVsbG8gaGFja2VyIQ==&key2=1518375&key3=0x29a

最后一个是key4, 之前在文档看到了intval的表达范围是有限制的,取决于操作系统,所以用了溢出,溢出的结果参考这里

所以最终payload如下

/index.php?key1=data:text/plain;base64,SGVsbG8gaGFja2VyIQ==&key2=1518375&key3=0x29a&key4=999999999999999999999999999999999999999999999999996666

misc3 什么也看不到

感谢同济大学的神仙们提供的思路

打开是一个图片,丢进HxD看到尾部有一段字符串,把FF D9之后的部分复制出来

KA2DAMBQGAYDATRVGAYDCMBQGAYTAMBQGAYDAMBQGA3DANJQJ42DANJRGAZVCUZSHA4DSNKPGAYTCU2SGEYDGUKTGI4DQOJVJ4YDCMKTKIYTAM2RKMZDQOBRHEZTAOBUKAZTAMBYGEYDAMJQGAYDAMBQGAYDAMBQGAZDAMCOGA2DOOBXGQ3VEMRXGYYTMUBWGY3DAMBQGAYDAMBQGAYDAMBQGAYDEMBQGAYDAMBQGAYDAMBQGAYDIMRQGA4DAMBQGAYDAMBWGIYDAMBQGAYDMMSPGJHE6OCRHA2E6NBRGNITOOJVGAYDQMBQGA4TAMBQGQYTAMCTGEZDAMJQJ42DANJRGBHDMUJQKE4FCMBTHEZDSMRVGM2VAMBSGVIFAM2RGM4VANCQHAZE6MZQGUZVENCRGRHDINJTG4ZTIM2SGQ3DGMJTGQZVCNCQGQ3U6NRTKNHFANBZGRHVATZUGQ3TQNZUG5JDENZWGE3FANRWGYYDAMBQGAYDQMBQGAYDAMBQGYZDAMBQGAYDANRSJ4ZE4TZYKE4DITZUGEZVCNZZGUYDAOBQGAYDAMBQGA2DCNBQGMYE6NBQGU======

base32 decode之后

P4000000N500100010000000006050O405103QS28895O011SR103QS28895O011SR103QS288193084P30081001000000000000200N0478747R27616P6660000000000000002000000000000004200800000006200000062O2NO8Q84O413Q79500800090004100S12010O40510N6Q0Q8Q039292535P025PP3Q39P4P82O3053R4Q4N4537343R4631343Q4P47O63SNP494OPO4478747R27616P666000000800000006200000062O2NO8Q84O413Q7950080000000414030O405

这是一个看起来是有很多的0的但是有NOPQRS这种是不应该出现在16进制字符串的东西,同济大学的神仙们把NOPQRS替换成了ABCDEF,现在他就是一个十六进制字符串了

C4000000A500100010000000006050B405103DF28895B011FE103DF28895B011FE103DF288193084C30081001000000000000200A0478747E27616C6660000000000000002000000000000004200800000006200000062B2AB8D84B413D79500800090004100F12010B40510A6D0D8D039292535C025CC3D39C4C82B3053E4D4A4537343E4631343D4C47B63FAC494BCB4478747E27616C666000000800000006200000062B2AB8D84B413D7950080000000414030B405

这还没完,神仙们还注意到这个是B405结尾的,于是反序一下

504B0304140000000800597D314B48D8BA2B260000002600000008000000666C61672E7478744BCB494CAF36B74C4D3431364E3437354A4D4E3503B28C4C93D3CC520C535292930D8D0D6A01504B01021F00140009000800597D314B48D8BA2B2600000026000000080024000000000000002000000000000000666C61672E7478740A00200000000000010018003C480391882FD301EF110B59882FD301EF110B59882FD301504B050600000000010001005A0000004C

这个是一个肉眼可见的zip压缩包的十六进制了,于是写入一个二进制文件,解压提示有密码

然后修改14 00 09 0014 00 00 00 解压即可得到flag

flag{79ea433a752ece633a25cf6d1ddcc130}

misc4 Misc_Flow

解压提示可以看到一个rar和一个Hint.txt, 压缩包是有密码的,Hint.txt内容如下

Blasting code???
No No No!
There is another txt file.

自然想到了交换数据流,用工具查看但是始终找不到哪里有附加流,Hint.txt后面没有, flag.rar后面也没有,flag.rar里面有个flag.png, 但是需要解压密码,于是猜想需要搞定这个rar,然后在flag.png里面查看交换流。

比赛结束后请教了下复旦的师傅,师傅说交换流是在最外层的压缩包,就是主办方给的题目打包后面,用7z打开就能看到…..2333333

我和我们的misc手都默认第一层是打包题目用的,压缩包的里面某个文件放着交换数据流文件,解压的时候我都是直接右键,选择解压到xxx, 所以自然看不到藏在后面的东西。

$ notepad Misc_Flow:password.txt

打开就是rar的密码,

c1d6159d94cc00dfeafde4f5ff7639ade491f7639ade4f5ff7639ade491feaf5ff7639ad

解压可得flag

misc5

打开是一个pcapng 数据包,能看到里面有大量的tls数据包和icmp数据包

icmp数据包有明显的人为成分, 里面有自定义的大量的aaaaaa字符串

请教了复旦大学的师傅们,师傅说根据每个icmp包的a的数量,依次记下来,然后转成ascii, 再凯撒就搞定了

太麻烦了,眼花, 没有去做一遍了

神仙的思考方式和我这个凡人就是不一样

音频

MISC手au打开,一段音频,然后放弃

参考厦大师傅推荐的wp

反正本辣鸡看不懂

树莓派

扫一波,开了三个端口 21,22, 3xxxx,顺手一个admin admin进了ftp, 下载了一个server可执行文件下来,然后用admin admin登录进去了ssh, history一下,有一个sudo su -, 然后调用摄像头拍照的命令

自己试了下,发现没在sudo组里面,意思是需要pwn掉这个server, 我们队伍没有pwn手,所以弃疗

比赛结束问了隔壁的师傅,师傅说登进去,下载下来,pwn掉,就是root权限了

师傅们一帆风顺的走过了我们的拦路虎哈哈哈哈

wp 没有,再见

干货

第二天的分享会,企业的工作人员给我们分享了一些过防火墙的一些经验,值得注意得是,安全狗是他们公司的产品,所以狗有没有这些bug是很明显的了

安全狗: 听说你们想过我?

下面是分享的内容:

  1. 找源ip
    • 找历史解析地址
    • github源码
    • 子站ssrf
  2. 资源限制
    • 大的post包只检查前面几个字节
  3. 协议绕过 使用form-data上传而不是x-www-form-urlencode 一般不会检测前者
  4. 协议解析不一致 文件名包含换行符, 绕过waf 多个comtent waf会检测第一个,服务器会解析所有
    • http允许上传多个文件, waf只会检测第一个文件,可以把自己的payload放到后面的包
    • 空文件名
    • http协议要求文件名 filename=”xxx” 但是tomcat和apache兼容没闭合的,可以绕过waf
    • 空白符绕过,使用正则的waf 的\S mysql 的正则不同,mysql兼容%3c等
    • waf里面用正则的可以考虑用正则回溯拖垮waf
    • 文件包含绕过
    • 相对../检测,waf会检测连续的../,可以用不连续../ 比如插入./绕过
    • 绝对路径文件包含 /etc/././passwd
    • 根据访问频率绕过,使用代理

  • 自己太菜,好好学习

  • 见识到神仙们的厉害了, 以后就吹自己和打过defcon的师傅们同台竞技过

  • 比赛结束的时候天枢的师傅们互相击掌祝贺,我们给各位师傅鼓掌啦啦啦

  • 这次比赛的逆向有点恼火, 我们的re手说: 师傅们都在分享自己如何遇到坑如何爬起来,我们只能分享如何遇到坑并且爬不出来 哈哈哈哈

  • 某师傅说,工控题目,打开了msf, search了一下,然后use, set rhost, 不知道为什么flag就弹回来了,他自己都不知道发生了什么, 大佬们都是随手拿flag的,不得不膜, msf打ctf也是6666

  • 做工控题目的时候扫了1-65535, 没一个端口开了(现在想想,我个zz,忘记加 -P 和 -sU了),当时一脸懵逼, 以为是网络层的题目
  • 搞树莓派的题目的时候,扫了下C段,发现很多题目中没有的ip, 当时以为是题目的一部分,打开下载了一些东西下来,后来放题了发现是我刚刚扫出来的题目 然而并没有什么用,vegatable is still vegatable

  • 请教厦大的师傅web2的时候,师傅说手快一血,我……emmmm

  • 武大的师傅说,要给队友一个肯定的眼神

  • 拿flag是不可能的了,这辈子都不可能拿flag的。 题目又不会,只能看看各位神仙师傅的wp才能勉强说是我是搞安全的。 和神仙们一起打ctf就像是回了家一样,这里的师傅都好有才,说话又好听,我超喜欢这里的。
  • 比赛时间 2017.12.23 , 厦门风景真好,还比成都暖和,厦大也好大呀

以上

2017-12-27 01:13:13