攻防世界做题记录
Pwndice_game
题目来源: XCTF 4th-QCTF-2018
考点:栈溢出、混合编程
基本情况程序实现的是一个具有用户姓名输入的菜随机数程序。
保护措施12345678910111213141516171819202122232425262728293031323334Arch: amd64-64-littleRELRO: Full RELROStack: No canary foundNX: NX enabledPIE: PIE enabled````##### 栈溢出一开始我在纠结是输入数字时使用的是**短整型**,可不可能是整型溢出,这样既能保持低位数字符合要求,又能控制 rip 跳转到后门。一时想不起来是那一条题和这条很相似的,就这样怀疑。最后观察是这里存在栈溢出:```c__int64 __fastcall main(__int64 a1, char **a2, char **a3){ char buf[55]; // [rsp+0h] [rbp-50h] char v5; // [rsp+37h] [r ...
使用ASF在Ubuntu下实现Steam云挂卡
使用ASF在Ubuntu下实现Steam云挂卡我的环境
Ubuntu 18
主机配置为 1C1G
ASF 搭建版本:V4.2.0.1
ASF-Bot 搭建版本:2019.9.12
安装过程下载 ASF从 ASF V3 开始 .Net SDK 不是必须要安装,已经集成,所以直接下载安装 ASF (本文默认在 /root 目录下安装)。最新版下载链接请到这里找。
12345678# 创建文件夹mkdir asf && cd asf# 下载压缩包wget https://github.com/JustArchiNET/ArchiSteamFarm/releases/download/4.2.0.3/ASF-linux-x64.zip# 解压(没有unzip的:apt install unzip -y)unzip ASF-linux-x64.zip# 权限chmod +x ArchiSteamFarm
生成 ASF 程序配置文件使用在线网站生成,选择 ASF 选项并根据下面提示选择性填写内容,可根据个人需求自行调整,各个参数介绍看Wiki。
SteamOwnerID:64 ...
midnight-sun-ctf-2020-quals-writeup
前言第一次做国外 CTF 与国内有差异的,我感觉最明显的是题目会多个方向混合出题,比如说 web 与 pwn 结合出题。从部分题目和结合前几天看的 king of hill 直播,感觉国外 CTF 对 linux 知识也要有一定要求,不能仅仅只会做题的亚子。
admpanel考点:代码能力、linux基操
程序为一个面板,自然有登录功能,帐号密码通过 IDA 看代码得出。登录成功后可以执行命令,但是程序给出提示只能执行 id 。但是使用的判断函数是 strncmp ,只要是子串都可以通过,换句话就是只有含有 id 都能执行。
完整 exp :
1234567891011121314151617181920from pwn import *context.log_level = 'debug'p = remote("admpanel-01.play.midnightsunctf.se",31337)#p = process("./admpanel")p.recvuntil(& ...
第二届BJDCTF Writeup
Misc最简单的misczip 压缩包伪加密,改完标志位,解压得到文件 secret 。winhex 打开发现头部有 IHDR 标志,盲猜一个 PNG 文件,补一个文件头 89504E47 ,改后缀名。
隔壁是作者,重点是下面。十六进制转 Ascii 得到 flag 。
A_Beautiful_Picture下载一个 png ,改高度得到 flag 。
EasyBaBajpg 19.9M 你见过么?反正我没见过。binwalk 一下没有东西,foremost 一下出来一个压缩包,里面还是一个大得出奇的 jpg 。winhex 看了一下 avi 文件,改后缀名,得到一段鬼畜,pr 逐帧查看视频,找到四个二维码,扫码。十六进制转 Ascii 码,转码后调整顺序得到 flag 。
问卷调查认真填写才能获得 flag
小姐姐用 stegdetect 检查 jpeg 文件,发现 jphide 加密。
1stegdetect.exe -s 20 xiaojiejie.jpeg
然后爆破密码?
对,没错想多了。只需要这样:
Real_EasyBaBawinhex 打开文件,仔细看,就能获得 ...
WordPress用户评论和回复评论邮件通知功能
前言目标解决两个问题:
用户在文章中提交评论后,我们无法及时获取用户评论的内容,同时也就没办法及时回复;
从后台发现用户评论,虽然回复了,但是用户已经离开网站,无法接受到您给他的评论回复。
方法一:插件 WordPress Mail SMTPWP 后台直接安装即可,全中文操作。如果使用 qq 邮箱,邮件系统类型选择 other smtp 。stmp 地址填入 smtp.qq.com ,勾选 ssl ,端口 465 。帐号为发件邮箱,密码为 stmp 服务授权码。
方法二:手动修改代码找到你当前使用的主题目录下的 functions.php :
在文件末尾加上下面代码,请自行配置:
1234567891011121314151617181920212223242526272829303132333435363738394041//使用 smtp 发邮件add_action('phpmailer_init', 'fanly_mail_smtp');function fanly_mail_smtp( $phpmai ...
栈迁移学习(新)
栈迁移学习(新)
2020年7月4日 更新:
题目在buu上有实验环境,名字是:gyctf_2020_borrowstack
前面刚总结完的笔记感觉不太完善,然后再做了题后,理解更加透彻,重新整理一下。
介绍当存在栈溢出且可溢出长度不足以容纳 payload 时,可采用栈迁移。一般这种情况下,溢出仅能覆盖 ebp 、 eip 。因为原来的栈空间不足,所以要构建一个新的栈空间放下 payload ,因此称为栈迁移。
大概原理首先栈执行命令是从 esp 开始向 ebp 方向逐条执行,也就是从低地址到高地址逐条执行。触发栈迁移的关键指令:leave|ret,等效于mov esp ebp; pop ebp; ret;,作用是将 ebp 赋值给 esp ,并弹出 ebp 。
正常情况下退出栈时,esp 指向 ebp 所在位置,ebp 指向 ebp 所存储的位置。等同于执行一个 leave ret 的效果。
栈迁移:通过直接控制 ebp 的值,借助 leave 指令,间接控制 esp 的值。从上图可见,正常退出 esp 会指向原 ebp 位置。如果我们覆盖 eip 再次执行 leave 指令 ...
i春秋新春战疫WriteUp
Crypto1. easy_rsa下载附件,内容如下:
123456n = 275609599183856164194862730095945134600443164763378425854635531057018695316983663046376780086027990051816013108169353940030419304455098011965548977815299626163494421360399519117646209991169157419242457889883327661823056358047547980184897930668117410269020119808071578826393138929326536204913546303540604625948658746637739346706189305049258128332020471831664230432648159058534860532553103460304166874307242041774681767625125660551657981724186222687519687939976763 ...
栈迁移学习(旧)
介绍栈迁移可以解决栈溢出后,没有足够空间写入 payload 的情况。主要通过 伪造 ebp ,并利用 leave|ret gadget 劫持栈到预设位置。
leave | ret == mov ebp,esp;pop ebp;ret
HITCON-Training-master lab6题目介绍程序为32 位打开 NX 防护:
运行程序,提示输入,输入后退出程序:
main 函数 read 存在栈溢出,可溢出长度为 0x40 - 0x28 :
1234567891011int __cdecl main(int argc, const char **argv, const char **envp){ char buf; // [esp+0h] [ebp-28h] if ( count != 0x539 ) exit(1); ++count; setvbuf(_bss_start, 0, 2, 0); puts("Try your best :"); return read(0, &buf, 0x40u); //栈溢出 ...
RSA加密笔记
RSA加密笔记
最后更新:2020-03-02 11:23:12
1. RSA 介绍RSA 算法涉及参数有:n、e、d(p、q),其中分为私钥和公钥。公钥为:n、e,私钥为:phi、d。涉及数学基础有:欧拉函数(phi)、欧几里得算法(gcd)、同余。
参数介绍:
n : 两个素数 p 与 q 的乘积。注意:n 将公开,而 p 与 q 不公开。
e :一个素数。满足 1<e<phi ,且 gcd(phi,e)=1(与 phi 最大公约数为 1 ,即互素)。
phi : 欧拉数,计算公式:phi = (p-1)(q-1)。
d : e 模 phi 的逆元,具体关系式:d * e = 1 mod(phi)。
2. 加解密算法c = m^e mod n = pow(m,e,n)
m = c^d mod n = pow(c,d,n)
3. 基础加解密脚本加密脚本
1234567891011121314151617181920212223from Crypto.Util.number import *import gmpy2msg = 'flag is :testflag ...
CTF密码学中python库应用
CTF密码学中python库应用Crypto
取 100 bit 长的随机质数
12from Crypto.Util.number import getPrimegetPrime(100)
bytes 与 int 互换
123from Crypto.Util.number import bytes_to_long, long_to_bytesbytes_to_long(b'this4bytes')long_to_bytes(123456789)
最大公约数
12from Crypto.Util.number import GCDGCD(38,18)
是否为素数
12from Crypto.Util.number import isPrime()isPrime(17)
gmpy2
gmpy2 安装比较麻烦,需要几个额外的运行环境,正常情况下 Ubuntu 没有。详情谷歌百度。
初始化一个大整数
123from gmpy2 import mpzmpz(0x10)mpz(1234)
乘法逆元
12from gmpy2 import invertd = invert( ...