西电2017网信实验班选拔

2019-04-13 13:16发布

本文转载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源码泄露
先贴一下源码
12345678910111213141516171819202122232425262728293031 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

第一题提示放射密码,直接用上学期老胡布置的作业的完整版本程序跑一下就好了,源码如下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 #include#include#include#includevoid 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—>字频破解 "); scanf("%d",&c); switch(c) { case 1: { system("color E"); printf("请输入明文 "); fflush(stdin); gets(p); ch=strlen(p); printf("请输入密钥 "); scanf("%d,%d",&t,&s); for(n=0;nif
((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 ",str); }break; case 2: { system("color A"); printf("请输入密文 "); fflush(stdin); gets(p); ch=strlen(p); printf("请输入密钥 "); scanf("%d,%d",&t,&s); sttub(t,s); printf("%s ",str); }break; case 3: { system("color C"); fflush(stdin); printf("请输入需要破解的密文 "); gets(p); ch=strlen(p); sttuben(); }break; case 4: { system("color E"); printf("请输入需要破解的密文 "); fflush(stdin); sttuban(); } }}void sttub(int t,int s){ for(k3=0;k3<1000;k3++) if((t*k3)%26==1) break; for(n=0;nif((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 } ",str); else printf("%s ",str); }}void sttuban(){ int x,y; int max=0,min=100000; gets(p); ch=strlen(p); for(i=0;itoupper(p[i]); for(i=0;iif((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]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 ",t,s); break; } sttub(t,s); printf("%s ",str); for(i=0;i<26;i++) printf("%c-->%d ",i+'A',count[i]);}

网信 007

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

真有这么难?

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

编程小练习

只能说这题太恶心了,最后一次机会才试出来,差点给跪,原来要加flag{Akye}
123 str = 'balabalabalabala'print str[98]+str[300]+str[1200]+str[1332]