pwnable.kr memcpy
源码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121// compiled with : gcc -o memcpy memcpy.c -m32 -lm#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include <unistd.h>#include <sys/mman.h>#include <math.h>unsigned lon ...
pwnable.kr coin1
nc连上去看看
一个找假硬币游戏,大概意思为:
N是硬币个数,C是输入次数,输入相应的硬币下标会给你硬币的重量(图中输入0代表第一个硬币,10是一个真硬币的重量,输入0,1返回20,代表两个真硬币的重量)
当次数用完时,需要输入假硬币对应的下标,
整理完过后就是一个题目考察我们的二分查找能力,就是写代码能力,但是这个代码我调试了一会儿。。(太菜了)😔
exp脚本里面用到了正则表达式来提取字符串中的数字,参考了这篇文章(链接)
因为链接的端口只开放一分钟,我这儿网速有限,就在pwnable.kr的服务器上去运行代码了
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849from pwn import *import redef MakeFlat(low, high): Flat = '' mid = (low + high) // 2 for i in range(low, mid): Flat += ...
pwnable.kr input2
read函数从文件描述符指向的管道口读入指定字节的字符串到指定的数组中
write函数从指定的数组中写入指定数量的字节到指定的文件描述符指向的管道口
常见的 三种 0, 1, 2 分别表示标准输入,标准输入,标准错误
pipe函数dup&dup2函数
复制一份相同的文件描述符
fork函数在当前父进程创建一个子进程,子进程返回得fpid == 0
文件描述符
实例1234567891011121314151617181920212223242526272829303132#include <stdio.h>#include <string.h>#include <unistd.h>int main(){ char buffer2[100]; char buffer[] = "Let's study pipe!"; int fd[2]; pid_t fpid; pipe(fd); fpid = fork(); ...
pwnable.kr lotto
利用scp命令从服务器下载源码到本地
1scp -P 2222 -r lotto@pwnable.kr: /home/lotto/ /home/fish
程序源代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>unsigned char submit[6];void play(){ int i; printf("Submit your 6 lotto bytes : "); fflush(stdout); int r; r = read ...
pwnable.kr uaf
源码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879#include <fcntl.h>#include <iostream>#include <cstring>#include <cstdlib>#include <unistd.h>using namespace std;class Human{private: virtual void give_shell(){ system("/bin/sh"); }protected: int age; string name;public: virtual void introduc ...
pwnable.kr cmd1 cmd2
cmd1linuxPATH入门教学linux命令通配符putenv函数讲解
这道题考察的是对于linux中shell的操作,还有PATH环境知识的理解。我参考了上面三篇文章,都写得很不错👍。这里我写两种解决方法
method 1首先ssh登录,查看源码
12345678910111213141516171819#include <stdio.h>#include <string.h>#include <stdlib.h>int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r;}int main(int argc, char* argv[], char** envp){ putenv ...
malloc_chunk结构体
文章参考了了网上的一些师傅文章内容,总结了一些自己的理解。
malloc_chunk结构体成员解析malloc_chunk结构定义
1234567891011121314151617/* This struct declaration is misleading (but accurate and necessary). It declares a "view" into memory allowing access to necessary fields at known offsets from a given base. See explanation below.*/struct malloc_chunk { INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */ INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */ struct malloc_ch ...
angr-1
ctf_angr一个用于练习angr的ctf题库,从入门到进阶,同时配套全英文ppt,从符号执行到angr详细使用方式,一站式入门👍
GitHub下载地址[链接]
00_angr_findida分析伪代码非常简单,执行流程为:输入->加密->比较->输出,分支少,所以遍历起来速度很快
伪代码易读,数据的字符串经过complex_function函数加密过后比较。
如果按照传统的方法,需要逆加密算法然后写出解密算法,但是angr不需要这些繁琐的操作,只需要告诉其实地址和目标地址,angr就会进行所有遍历,对符号进行约束,从而得出结果。
angr遍历求解首先贴出全代码以及运行结果,最后打印的值就是对符号不断约束求解得到的结果
12345678910111213141516import angrimport sysfilepath = '/home/fish/桌面/00_angr_find'project = angr.Project(filepath)initial_state = project.factory.entry_state() ...