渣渣只能膜fish大佬和宋神了,顺便吐槽一下自己的选择题做的是真的垃圾
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
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出一个,结果弄进去不给我过ORZ1
0x7E1&111111111111
继续fuzz半天发现了一个发现2017.0000000000是等于2017然而缺少字母,想到了eN等于10的N次方
所以最后的payload1
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
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
3str = 'balabalabalabala'
print str[98]+str[300]+str[1200]+str[1332]