[hdctf2023]YamiYami
[hdctf2023]YamiYami
开题发现三个连接。
点击Read something页面自动跳转,发现url变成
http://node4.anna.nssctf.cn:28907/read?url=https://baidu.com
非预期
我们可以在这个界面直接读取环境变量文件发现flag
payload:
http://node4.anna.nssctf.cn:28907/read?url=file:///proc/1/environ
预期解
我们尝试读取/app/app.py文件,发现关键字app被过滤,这里尝试url两次编码绕过。
payload:
http://node4.anna.nssctf.cn:28907/read?url=file:///%2561%2570%2570%2F%2561%2570%2570%252E%2570%2579
读取到app.py源文件
#encoding:utf-8import osimport re, random, uuidfrom flask import *from werkzeug.utils import *impo ...
[quine注入]
Quine 技术
在sql注入技术中,Quine是一种使得输入sql语句和输出的sql语句一致的技术。
SQL中的replace()函数
语法:
REPLACE(string_expression , string_pattern , string_replacement)#string_expression是待处理的字符串表达式(字符或二进制数据)#string_pattern是要查找的子字符串(字符或二进制数据,但是不能为空)#string_replacement是用来替换的字符串(字符或二进制数据)
replace(object,search,replace)#把object对象中出现的的search全部替换成replace
案例分析
首先看这个例子。
# object = .# search = char(46)# replace = .select replace(".",char(46),".");# char(46)就是.
+---------------------------+| replace(".", ...
软连接&&getshell
软连接
软连接是linux中一个常用命令, 它的功能是为某一个文件在另外一个位置建立一个同步的链接。软连接类似与c语言中的指针,传递的是文件的地址。简单说,通过软连接将文件a与文件b连接在一起,那么我们对文件a的操作都会转换成对文件b的操作。
[CISCN 2023] unzip
开题,发现文件上传。
随便上传一个文件后发现。
分析一下这个代码
<?phperror_reporting(0);highlight_file(__FILE__);$finfo = finfo_open(FILEINFO_MIME_TYPE);if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){ exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);};//only this! ...
SQL无列名注入
大佬博客
为什么需要无列名注入
我们常用的SQL注入方法是通过infomation_schema这个默认数据库来实现,但是如果过滤了此数据库我们就不能通过这个库来查出表名和列名,不过我们还可以通过两种方法查出表名:
1.InnoDb引擎:
从MYSQL5.5.8开始,InnoDB成为其默认存储引擎。而在MYSQL5.6以上的版本中,inndb增加了innodb_index_stats和innodb_table_stats两张表(mysql.innodb_table_stats),这两张表中都存储了数据库和其数据表的信息,但是没有存储列名。高版本的 mysql 中,还有 INNODB_TABLES 及 INNODB_COLUMNS 中记录着表结构。
select group_concat(table_name) from mysql.innodb_table_stats;
2.sys数据库
在5.7以上的MYSQL中,新增了sys数据库,该库的基础数据来自information_schema和performance_chema,其本身不存储数据。可以通过其中的schema_auto_in ...
RSA Attack
Introduction
开篇介绍RSA应用非常广泛,介绍了RSA加解密和数字签名的实现。
虽然二十年的研究已经导致了一些迷人的攻击,但没有一个是毁灭性的。它们主要说明了不正确使用RSA的危险。事实上,安全地实现RSA是一项重要的任务。
Elementary Attacks
Common Modulus
为了避免为每个用户生成不同的,有些人可能希望一劳永逸的使用同一个,一个中心机构可以给不同的用户提供不同的,,这样用户的公钥对是,私钥对是。
第一感觉这样的系统是安全的,论文给出了一种攻击方法,但是常见的攻击方法是:
假设Alice使用对消息进行加密得到,记作:
同时Bob使用对消息进行加密得到,记作:
那么这时候一般选取素数,所以大概率得到,(后边会遇到,不互素有时也可以)
那么一定有
那么
攻击完毕
举个栗子:
task.py
e = 797n = 1594447543108805328558022979630995606652152010727681796907955091958665053545924254303614336086578073004473302694548 ...
SYMMETRIC CIPHERS
Lazy CBC
题目描述
我是一个很懒的开发者,并且希望我的CBC加密算法能正常运行。什么是初始化向量,听起来不是那么重要。
题目代码
from Crypto.Cipher import AESKEY = ?FLAG = ?@chal.route('/lazy_cbc/encrypt/<plaintext>/')def encrypt(plaintext): plaintext = bytes.fromhex(plaintext) if len(plaintext) % 16 != 0: return {"error": "Data length must be multiple of 16"} cipher = AES.new(KEY, AES.MODE_CBC, KEY) encrypted = cipher.encrypt(plaintext) return {"ciphertext": encrypted.hex ...
[cryptohack] AES2
ECB CBC WTF
题目描述
本题,采用CBC的方式对flag进行加密,但是采用ECB的方式对flag进行解密。
题目代码
from Crypto.Cipher import AESKEY = ?FLAG = ?@chal.route('/ecbcbcwtf/decrypt/<ciphertext>/')def decrypt(ciphertext): ciphertext = bytes.fromhex(ciphertext) cipher = AES.new(KEY, AES.MODE_ECB) try: decrypted = cipher.decrypt(ciphertext) except ValueError as e: return {"error": str(e)} return {"plaintext": decrypted.hex()}@chal.route('/ecbcbcwtf/e ...
[cryptohack] AES
Passwords as Keys
题目描述
在对称加密算法当中,采用随机字节作为密钥而不是其他的可以预测的数据是非常重要的。这个随机密钥应该借助密码学上安全的伪随机数生成算法来实现。如果密钥在一定程度上是可以预测的,那么这个密码的安全程度,就会大打折扣。
但是如果密钥只是在形式上看起来是随机比特,并不代表他就是真正的随机比特。在本题目当中密钥由一些简单的口令的哈希值生成,那么这使得密码是可以被攻击的。
题目代码
from Crypto.Cipher import AESimport hashlibimport random# /usr/share/dict/words from# https://gist.githubusercontent.com/wchargin/8927565/raw/d9783627c731268fb2935a731a618aa8e95cf465/wordswith open("/usr/share/dict/words") as f: words = [w.strip() for w in f.readlines()]keyword ...
CTF-rsa技巧
CTF-RSA 技巧总结
1.直接给出p,q
e = 65537p = 104046835712664064779194734974271185635538927889880611929931939711001301561682270177931622974642789920918902563361293345434055764293612446888383912807143394009019803471816448923969637980671221111117965227402429634935481868701166522350570364727873283332371986860194245739423508566783663380619142431820861051179q = 1401710480741079886057737316710189018139281305824228897977320715297330917038437108592822677637834617382429580986109491203544979879459110211708424575521 ...
[nodejs 参考手册]
Node js
Nodejs基础
简单说Node.js就是运行在服务端的JavaScript。
Node.js是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的v8引擎,v8引擎执行JavaScript的速度非常快,性能非常好。
Nodejs语言的缺点
1.大小写转换中的问题
toUpperCase() 将小写字母的字符转换成大写,如果是其他字符,则字符不变。
在遇到一些特殊字符时,会发生混乱,比如将ı转换成I,将ſ转换成S
toLowerCase() 将大写字母的字符转换成小写,如果是其他字符,则字符不变。
在遇到一些特殊字符时,会发生混乱,比如将İ转换成i,将K转换成k
2.弱类型比较
数字与字符串比较时,会优先将纯数字型字符串转换成数字之后再进行比较,而字符串与字符串比较时,会将字符串的第一个字符转换成ASCII码之后再进行比较,而非数字型字符串与任何数字进行比较都是false。
空数组之间比较永远为false,数组之间比较只比较数组间的第一个值,对第一个值采用 ...