感谢最后来自逆向队友的助攻,侥幸拿了第54名,Web狗看逆向很是头大
Basic01 Wheel Cipher 50
身为二战时期的密码专家,你截获了通信员身上的一段密文、密钥序列和加密列表。你能看懂吗?
由提示Wheel Cipher可知是转轮密码
谷歌一下
解密方法:
将加密表根据密匙的数字顺序排序。
每一行相当于一个滚轮,字母是环形首尾相接排列的,按照密文将加密表每一行重新排列,使第一个字母符合密文,排列时当作一个环进行排列。
排好后按列读出,看看哪列成句子。
1 | 2: < N ACZDTRXMJQOYHGVS FUWIKPBEL < |
得到flag FIREINTHEHOLE
Basic02 100
这题先爆破出密码BIT然后打开文件base64解码一下得到flag
Basic03 100
下载下来得到一串数字。。。感觉有点像16进制,但转码得不到什么实质性的东西,突然发现开头是504B,是.zip的头,估计就是文件的16进制
保存为zip格式,结果有密码,爆破吧
得到flag:daczcasdqwdcsdzasd
Basic04 你猜猜 100
16进制先转字符串得到文件头PK可知是zip文件,所以直接用hex新建一个文件把16进制导入然后生成一个zip文件由题目提示”你猜猜”猜解压密码为弱口令,123456
flag daczcasdqwdcsdzasd
Basic05 神秘图片 100
下载得到一张图片hex查看无果,binwalk一下发现是双图提取出另一个png
猪圈密码解一下
flag goodluck
Basic06 告诉你个秘密 100
提示简单加密
给了2行16进制
16进制分别解密为字符串得到1
2cjV5RyBscDlJIEJqTSB0RmhC
VDZ1aCB5N2lKIFFzWiBiaE0g
然后base64解密一下1
2r5yG lp9I BjM tFhB
T6uh y7iJ QsZ bhM
然后键盘密码得知
flag TONGYUAN
Basic07 php_encrypt_1
加密脚本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function encrypt($data,$key)
{
$key = md5('ISCC');
$x = 0;
$len = strlen($data);
$klen = strlen($key);
for ($i=0; $i < $len; $i++) {
if ($x == $klen)
{
$x = 0;
}
$char .= $key[$x];
$x+=1;
}
for ($i=0; $i < $len; $i++) {
$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
}
return base64_encode($str);
}
直接根据加密写解密脚本即可1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function decrypt($data)
{
base64_decode($data)
$key = md5('ISCC');
$x = 0;
$len = strlen($data);
$klen = strlen($key);
for ($i=0; $i < $len; $i++) {
if ($x == $klen)
{
$x = 0;
}
$char .= $key[$x];
$x+=1;
}
for ($i=0; $i < $len; $i++) {
$str .= chr((ord($data[$i]) - ord($char[$i]) + 128) % 128);
}
echo $str;
}
decrypt('fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=');
Basic08 二维码 150
扫出来1
The password of the router is our flag
binwalk提取出zip不贴图了
然后弱口令爆破,过程与前面一题差不多就不贴图了
flag ISCC16BA
Web签到题,来和我换flag啊! 100
http://139.129.108.53:3190/web-02/右键查看源码发现有一个hiddenflag,同时提交f1ag发现说不够诚意
然后就懵逼了半天,结果fuzzing半天还有个FLAG参数,报警了。。。,再提交FLAG=f1ag可在响应头中得到flag
Welcome to MySQL! SQL inject? 150
这题题目坑了我好久题目说是sql注入结果是文件上传
首先用php5绕过文件上传上传一个一句话然后用菜刀连接,在上级目录下发现存在一个base.php1
2
3
4
5
6
7
$servername="localhost";
$username="iscc2017";
$password="iscc2017";
$db="flag";
$tb="flag";
然后获得数据库账号和密码,然后直接用菜刀右键连接数据库可在数据库中得到flag1
Flag:{Iscc_1s_Fun_4nd_php_iS_Easy}
where is your flag 150
扫目录发现一个flag.php页面
访问得到thisisflag
然后返回index.php进行注入发现有宽字节注入,sqlmap加tamper应该也是能跑的,但是我习惯手工注入了,所以直接构造payload
得到flag:{441b7fa1617307be9632263a4497871e}
我们一起来日站 150
先用御剑扫目录得到robots然后再用御剑扫后台地址1
http://139.129.108.53:5090/web-04/21232f297a57a5a743894a0e4a801fc3/admin.php
然后在密码处用万能密码登陆1
123' or '1'='1
得到flag1
Flag:{ar32wefafafqw325t4rqfcafas}
I have a jpg,i upload a txt. 200
小明发现,php将上传的jpg文件流写入一个txt中,再重命名后缀为jpg还可以正常读取,于是写了一段上传代码,会不会有什么漏洞呢?
先贴源码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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121<html>
<body>
include 'hanshu.php';
if(isset($_GET['do']))
{
$do=$_GET['do'];
if($do==upload)
{
if(empty($_FILES))
{
$html1=<<<HTML1
<form action="index.php?do=upload" method="post" enctype="multipart/form-data">
<input type="file" name="filename">
<input type="submit" value="upload">
</form>
HTML1;
echo $html1;
}
else
{ $file=@file_get_contents($_FILES["filename"]["tmp_name"]);
if(empty($file))
{
die('do you upload a file?');
}
else
{
if((strpos($file,'<?')>-1)||(strpos($file,'?>')>-1)||(stripos($file,'php')>-1)||(stripos($file,'<script')>-1)||(stripos($file,'</script')>-1))
{
die('you can\' upload this!');
}
else
{
$rand=mt_rand();
$path='/var/www/html/web-03/uploads/'.$rand.'.txt';
file_put_contents($path, $file);
echo 'your upload success!./uploads/'.$rand.'.txt';
}
}
}
}
elseif($do==rename)
{
if(isset($_GET['re']))
{
$re=$_GET['re'];
$re2=@unserialize(base64_decode(unKaIsA($re,6)));
if(is_array($re2))
{
if(count($re2)==2)
{
$rename='txt';
$rand=mt_rand();
$fp=fopen('./uploads/'.$rand.'.txt','w');
foreach($re2 as $key=>$value)
{
if($key==0)
{
$rename=$value;
}
else
{
if(file_exists('./uploads/'.$value.'.txt')&&is_numeric($value))
{
$file=file_get_contents('./uploads/'.$value.'.txt');
fwrite($fp,$file);
}
}
}
fclose($fp);
waf($rand,$rename);
rename('./uploads/'.$rand.'.txt','./uploads/'.$rand.'.'.$rename);
echo "you success rename!./uploads/$rand.$rename";
}
}
else
{
echo 'please not hack me!';
}
}
elseif(isset($_POST['filetype'])&&isset($_POST['filename']))
{
$filetype=$_POST['filetype'];
$filename=$_POST['filename'];
if((($filetype=='jpg')||($filetype=='png')||($filetype=='gif'))&&is_numeric($filename))
{
$re=KaIsA(base64_encode(serialize(array($filetype,$filename))),6);
header("Location:index.php?do=rename&re=$re");
exit();
}
else
{
echo 'you do something wrong';
}
}
else
{
$html2=<<<HTML2
<form action="index.php?do=rename" method="post">
filetype: <input type="text" name="filetype" /> please input the your file's type
</br>
filename: <input type="text" name="filename" /> please input your file's numeric name,like 12345678
</br>
<input type="submit" />
</form>
HTML2;
echo $html2;
}
}
}
else
{
show_source(__FILE__);
}
</body>
</html>
首先我们可以看到$re=KaIsA(base64_encode(serialize(array($filetype,$filename))),6);
这里我们并不知道KaIsA是怎么加密的,但是根据字面意思可以知道应该是替换,那么写个脚本fuzzing一下就可以发现
大写字母是正常移6位,小写字母是反向移6位,其他不移位。
首先我的考虑是先上传一个txt文件然后重命名为php文件,可是发现一下代码1
if((strpos($file,'<?')>-1)||(strpos($file,'?>')>-1)||(stripos($file,'php')>-1)||(stripos($file,'<script')>-1)||(stripos($file,'</script')>-1))
所以,文件内容检测过滤了标签和php关键字,所以也不能用javascript修改language属性,所以猜想构造
俩个TXT文件再导入一个新的TXT文件里,再把那个TXT重命名为PHP文件,具体如下:
首先根据do=upload1
2
3
4
5
6else{
$rand=mt_rand();
$path='/var/www/html/web-03/uploads/'.$rand.'.txt';
file_put_contents($path, $file);
echo 'your upload success!./uploads/'.$rand.'.txt';
}
进行上传俩个TXT,可以得到俩个TXT文件的随机名
然后再通过
do=rename1
2
3
4
5
6
7
8
9
10
11else{
if(file_exists('./uploads/'.$value.'.txt')&&is_numeric($value)){
$file=file_get_contents('./uploads/'.$value.'.txt');
fwrite($fp,$file);
}
}
}
fclose($fp);
waf($rand,$rename);
rename('./uploads/'.$rand.'.txt','./uploads/'.$rand.'.'.$rename);
echo "you success rename!./uploads/$rand.$rename";
把俩个文件都导入到一个新的文件中,并得到新的文件的随机名,
然后再通过do=rename1
2
3
4fclose($fp);
waf($rand,$rename);
rename('./uploads/'.$rand.'.txt','./uploads/'.$rand.'.'.$rename);
echo "you success rename!./uploads/$rand.$rename";
进行重名名为php即可1
2
3
4POSTDATA:filetype=php&filename=1212
serialize:a:2:{i:0;s:3:"php";i:1;s:4:"1212";}
Base64:YToyOntpOjA7czozOiJwaHAiO2k6MTtzOjQ6IjEyMTIiO30=
KaIsA:EZisUhnjUdG7wtitUcPquNGcU2e6SZntUdW6OdKsSZOcU30=
最后用访问生成的新文件发现存在跳转,用bp抓一下包就得到flag
flag{54a5bd4fe6193580020487b56acff6c5}
simpleSQLinject 200
这题很常见的绕过,后台语句如下1
2
3
4
5
6$query = select * from foobar where username='$_GET[username]'
...
...
if $query['password'] = $_GET['password']{
getflag balabalabala...
}
所以构造payload如下1
2
3username=0' union select md5(1)#
&password=1
&captcha=xxx
captcha爆破代码如下1
2
3
4import hashlib
for i in range(0,10000):
if(hashlib.md5(str(i)).hexdigest().startswith('xxx')):
print i
Web05 自相矛盾 150
给一个链接
http://www.codesec.net/view/489193.html
payload如下:1
iscc={%22bar1%22:%222017e%22,%22bar2%22:[[1],1,2,3,0]}&cat[0]=00isccctf2017&cat[1][]=1111&dog=%00
flag{sfklljljdstuaft}
Misc100 眼见非实
下载一个docx,hex查看发现是一个zip改后缀名为zip,解压后一个个文件文件搜索flag
在document.xml得到flag
flag{F1@g}
Misc 就在其中 150
右键追踪TCP流发现传输的文件,在11流中得到RSA的密文提取出来得到key.txt,在21流得到RSA的密钥提取为1.key,然后放到kali用openssl解密得到flag1
openssl rsautl -decrypt -in key.txt -inkey 1.key -out flag.txt
hi, boys and girls! flag is {haPPy_Use_0penSsI}
Misc 很普通的Disco 250
下载后用Audacity打开
然后分析在开头放大分析频谱,
高位是1低位是0然后每8位转化一下位数然后ascii码得到flag
这题flag忘记是啥了。。尴尬。
Misc 再见李华 200
一开始是一张图片,用binwalk分析发现里面有一个zip压缩包,抠出来解压缩时发现需要密码
一开始真心不知道密码怎么解,想过爆破,不过后来仔细看题还是发现隐藏的hint,说是大于1000字,且落款为LiHua,也就是密码大致为????LiHua这样的话,尝试一下掩码爆破,直接出来
Misc 很普通的数独 300
这题乍一看没思路,再一看发现是一个二维码,用P图工具修一下直接得到flag
flag{y0ud1any1s1}
今晚就到这了太累了,剩下的以后有时间写