西电2017网信实验班选拔

本文转载http://pupiles.com/shiyanbanwirteup.html

Web01

第一题先看源码,得到发现可以用常规思路万能密码绕过
构造
username=’ or ‘1’=’1’#
Password随便即可绕过
即可构造出select * from users where name = ‘’ or ‘1’=’1’#andxxxxx
因为#是注释所以注释掉了后面语句

得到flag
flag{justForTestL0g1n}

WEB7

第二题可以构造后台语句
Username=0 union select 1,2,md5(1)#
Password=1
绕过,得到flag
这里可以先猜测数据库有3列,id,username,password,然后通过联合查询使password字段为1的md5值
这样通过输入password=1可以实现经过后台逻辑判断可以绕过。
flag{Second2@16L0g1n}

WEB05

上御剑

访问robots.txt

访问flag.txt

Web04

这题一开始没啥思路,上御剑扫目录
结果发现一个.index.php.swp源码泄露
先贴一下源码

     
     
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
     
     
<?php
if ( "POST" == $_SERVER[ 'REQUEST_METHOD'])
{
$password = $_POST[ 'password'];
if ( 0 >= preg_match( '/^[[:graph:]]{16,}$/', $password))
{
echo '鐪熺殑鍚楋紒锛 '; exit;
}
while ( TRUE)
{
$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/';
if ( 6 > preg_match_all($reg, $password, $arr))
break;
$c = 0;
$ps = array( 'punct', 'digit', 'upper', 'lower');
foreach ($ps as $pt)
{
if (preg_match( "/[[:$pt:]]+/", $password))
$c += 1;
}
if ($c < 3) break; if ( "2017" == $password)
{
include_once( "flag.php");
echo $flag;
}
else echo 'Duang锛侊紒锛 '; exit; } }
?>

审计源码,这里我不知道graph是啥意思(后来知道了是除(空格键与[TAB]键)之外的所有按键) )。只好fuzz,fuzz了半天发现原来是要输入超过16位,而且必须结果等于2017,这里我当时想到了俩个思路一个是0x7E1另外一个是2017.0000000000000000001
后面有说必须要有标点,大小写,数字一大堆的,了解了原理,本地搭建一个环境进行fuzz一下


结果发现本地fuzz出一个,结果弄进去不给我过ORZ

     
     
1
     
     
0x7E1&111111111111

继续fuzz半天发现了一个发现2017.0000000000是等于2017然而缺少字母,想到了eN等于10的N次方
所以最后的payload

     
     
1
     
     
20170.000000000000000000000e-1

web02 抽奖

这题没毛病,以前打陕西省网络空间安全的时候做的题,这次再做的时候莫名其妙找不到JSFuck了,晕,幸好本地正好直接有当时的wp,随手试了试了一下当时的flag发现直接可以过,(吐槽一下出题人真是懒,flag都没改)这里贴一个链接,感兴趣的小伙伴可以去看一下http://blog.csdn.net/qq_35078631/article/details/70256502

Web03

这题没撸了好长没弄出来,就先说一下思路吧,首先御剑扫到了一个flag.php,所以我们尝试读取flag.php,但是好像做了黑名单检测,就是读不了,这里我尝试了一下../发现貌似会被替换为空,然而放在tes../t.txt文件就不存在了,ORZ。然后00截断啥的尝试了一下也没啥用就放弃了。。

cipher0x

第一题提示放射密码,直接用上学期老胡布置的作业的完整版本程序跑一下就好了,源码如下

     
     
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
122
123
124
125
126
127
128
     
     
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
void sttub(int t,int s);
void sttuben();
void sttuban();
char p[ 1000],str[ 1000]={ 0},q[ 1000]={ 0};
int count[ 26]={ 0},k1[ 12]={ 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25};
int k2,k3,c,i,n,t,s,ch;
int main()
{
printf( "选择一种模式:1—>加密,2—>解密,3—>暴力破解,4—>字频破解\n");
scanf( "%d",&c);
switch(c)
{
case 1:
{
system( "color E");
printf( "请输入明文\n");
fflush( stdin);
gets(p);
ch= strlen(p);
printf( "请输入密钥\n");
scanf( "%d,%d",&t,&s);
for(n= 0;n<ch;n++)
{
if((p[n]>= 'A')&&(p[n]<= 'Z'))
str[n]=(t*(p[n]- 'A'+s))% 26+ 'A';
else if((p[n]>= 'a')&&(p[n]<= 'z'))
str[n]=(t*(p[n]- 'a'+s))% 26+ 'a';
else
str[n]=p[n];
}
printf( "密文:%s\n",str);
} break;
case 2:
{
system( "color A");
printf( "请输入密文\n");
fflush( stdin);
gets(p);
ch= strlen(p);
printf( "请输入密钥\n");
scanf( "%d,%d",&t,&s);
sttub(t,s);
printf( "%s\n",str);
} break;
case 3:
{
system( "color C");
fflush( stdin);
printf( "请输入需要破解的密文\n");
gets(p);
ch= strlen(p);
sttuben();
} break;
case 4:
{
system( "color E");
printf( "请输入需要破解的密文\n");
fflush( stdin);
sttuban();
}
}
}
void sttub(int t,int s)
{
for(k3= 0;k3< 1000;k3++)
if((t*k3)% 26== 1)
break;
for(n= 0;n<ch;n++)
{
if((p[n]>= 'A')&&(p[n]<= 'Z'))
str[n]=(k3*(p[n]- 'A'-s)+ 2600000)% 26+ 'A';
else if((p[n]>= 'a')&&(p[n]<= 'z'))
str[n]=(k3*(p[n]- 'a'-s)+ 2600000)% 26+ 'a';
else
str[n]=p[n];
}
}
void sttuben()
{
for(i= 0;i< 12;i++)
for(k2= 0;k2< 26;k2++)
{
sttub(k1[i],k2);
if( strstr(str, "FLAG")|| strstr(str, "flag"))
printf( "该句含FLAG: { %s }\n",str);
else
printf( "%s ",str);
}
}
void sttuban()
{
int x,y;
int max= 0,min= 100000;
gets(p);
ch= strlen(p);
for(i= 0;i<ch;i++)
q[i]= toupper(p[i]);
for(i= 0;i<ch;i++)
if((q[i]>= 'A')&&(q[i]<= 'Z'))
count[q[i]- 'A']++;
for(i= 0;i< 26;i++)
{
if(count[i]>max)
{
max=count[i];x=i;
}
if(count[i]<min)
{
min=count[i];y=i;
}
}
for(i= 0;i< 12;i++)
for(k2= 0;k2< 26;k2++)
if((x==((k1[i]*( 'E'- 'A')+k2)% 26))&&((y==((k1[i]*( 'Z'- 'A')+k2)% 26))))
{
t=k1[i];s=k2;
printf( "%d %d\n",t,s);
break;
}
sttub(t,s);
printf( "%s\n",str);
for(i= 0;i< 26;i++)
printf( "%c-->%d\n",i+ 'A',count[i]);
}

网信 007

这题用wireshark追踪一下tcp流,在发现传输了一个hello.txt和secret.png的图片,在20流左右发现了png的16进制右键以原始数据流的形式提取出来,打开发现flag

真有这么难?

这题真的不记得了,下载下来发现有个zip,好像flag.txt藏在其中一个文件夹里面

编程小练习

只能说这题太恶心了,最后一次机会才试出来,差点给跪,原来要加flag{Akye}

     
     
1
2
3
     
     
str = 'balabalabalabala'
print str[ 98]+str[ 300]+str[ 1200]+str[ 1332]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值