pwn及计算机原理基础知识
PWN是什么PWN是一个俗语,每次攻破某个服务或者系统就是“pwn进去了”,也就是: 破解、利用成功(二进制漏洞) 攻破(设备、服务器) 控制(设备、服务器) 流程如下: Exploit:用于攻击的脚本和方案 Payload:攻击载荷,也就是构造的恶意数据 Shellcode:调用攻击目标shell的代码 二进制基础C语言编译流程c/c++在整个世界里面就和超级搅屎棍一样,一方面因为他真的很优秀,一方面因为时代局限性,导致有很多含有漏洞的程序在世界各处到处都有。 当我拥有一个c语言程序,例如: 12345#include<stdio.h>int main(){ puts("Helloworld"); return 0;} 我们对他进行编译: 1gcc helloworld.c 就可以得到一个二进制程序a.out a.out的内容如下: 1234567891011@ @@@���uu ���-�=�=X`�-�=�=�8880hhh��S�td8880P�td 44Q�tdR�td�-�=...
pwn基础配置
ubuntu系统和windows系统 做pwn前需要准备的工具: 一些虚拟机配置鼠标拖拽控制 这个服务打开即可 安装软件linux需要在前面加sudo哈 网络环境配置默认主机有clash或其他vpn工具。 允许局域网和端口要记住并且打开,系统代理在你需要打开vpn的时候打开即可。 虚拟机调为NAT连接模式。 在ubuntu的settings中proxy(代理)调整为manual(手动),把http和https的proxy改成相应的URL和Port 端口号就和前面的一样,URL就是vmware给虚拟机的地址,查看方式如图所示: 基础环境配置python312345#首先进入root模式sudo apt updatesudo apt install python3sudo apt install python3-pipalias python='/usr/bin/python3' 一般只需要python3,如果需要python2的话可以看: python2环境 按照这样安装一轮应该就可以了,不要乱删东西。如果不想安装pip可以试下面的第二种办法安装pw...
01 ShellCode
什么是shellcodeshellcode通常是软件漏洞利用过程中使用的一小段机器代码 作用: 1、启动shell进行交互 2、打开服务器端口等待连接 3、反向连接端口 4、。。。。 shellcode编写我们在linux系统写编写一个最简短的c语言程序: 12345678//gcc -m32 -o shell shell.c#include<stdlib.h>#include<unistd.h>void main(){ system("/bin/sh"); exit(0);} 很显然,这样做出来的程序太大了,在题目中我们一般只能输入几十个字节,其次他直接使用了系统函数,但是我们都不知道系统函数是啥(被包装成sytem@plt了): 我们可以通过中断的方法进行系统调用。 系统中断方法调用shellcode触发中断(int 0x80或者syscall),进行系统调用 system(“/bin/sh”)底层调用的是execve(“/bin/sh”,0,0) 我们可...
02 栈溢出介绍及初级栈溢出
栈溢出基础C语言函数调用栈函数调用栈函数调用栈是指程序运行时侯,内存的一段连续的区域。用来保护函数运行时候的状态信息(函数参数,局部变量等)。 称之为“栈”的原因是因为发生函数调用时,调用函数_(caller)_的状态被保存在栈内,被调用函数(callee)的状态压入调用栈的栈顶。 在函数调用结束的时候,栈顶的被调用函数(callee)状态被弹出,栈顶恢复到调用函数(caller)的状态。 调用函数栈在内存中从高地址向低地址生长,所以栈顶对应内存地址在压栈时变小,退栈时候变大。 比如下面这个代码: 1234567#include<stdio.h>int main(){ chat str[]="hello,world"; printf("%s",str); return 0;} 其中,str被保存在main的函数栈区中,当我调用printf的时候,str便会放入到printf函数的栈区中。此时printf就是被调用函数callee,而caller就是调用函数main。 栈帧结构就像我上面说...
ASCII码
二进制 八进制 十进制 十六进制 字符/缩写 解释 0. 0. 0. 0. NUL (NULL) 空字符 1. 1. 1. 1. SOH (Start Of Headling) 标题开始 10. 2. 2. 2. STX (Start Of Text) 正文开始 11. 3. 3. 3. ETX (End Of Text) 正文结束 100. 4. 4. 4. EOT (End Of Transmission) 传输结束 101. 5. 5. 5. ENQ (Enquiry) 请求 110. 6. 6. 6. ACK (Acknowledge) 回应/响应/收到通知 111. 7. 7. 7. BEL (Bell) 响铃 1000. 10. 8. 8. BS (Backspace) 退格 1001. 11. 9. 9. HT (Horizontal Tab) 水平制表符 1010. 12. 10. 0A LF/NL(Line Feed/New Line) 换行键 1011. ...
Linux退出状态码
信号编号 信号名称 信号描述 默认处理方式 Exit code 1. SIGHUP 挂起 终止 1. 2. SIGINT 终端中断 终止 2. 3. SIGQUIT 终端退出 终止、core dump 131. 4. SIGILL 非法指令 终止、core dump 132. 5. SIGTRAP 跟踪 / 断点陷阱 终止、core dump 133. 6. SIGABRT 终止进程 终止、core dump 134. 7. SIGBUS Bus error 终止、core dump 135. 8. SIGFPE 算术异常 终止、core dump 136. 9. SIGKILL 杀死进程(必杀) 终止 9. 10. SIGUSR1 用户自定义信号 1 终止 10. 11. SIGSEGV 段错误 终止、core dump 139. 12. SIGUSR2 用户自定义信号 2 终止 12. 13. SIGPIPE 管道断开 终止 13. 14. SIGALRM 定时器信号 终止 14. 15. SIGT...
syscall调用表32位
Num syscall %eax arg0 (%ebx) arg1 (%ecx) arg2 (%edx) arg3 (%esi) arg4 (%edi) arg5 (%ebp) 0. restart_syscall 0. - - - - - - 1. exit 1. int error_code - - - - - 2. fork 2. - - - - - - 3. read 3. unsigned int fd char *buf size_t count - - - 4. write 4. unsigned int fd const char *buf size_t count - - - 5. open 5. const char *filename int flags umode_t mode - - - 6. close 6. unsigned int fd - - - - 7. waitpid 7. pid_t pid int *stat_addr int options - - - 8. creat 8. const c...
syscall调用表64位
Num syscall %rax %rdi %rsi %rdx %rcx %r8 %r9 0. sys_read 0. unsigned int fd char *buf size_t count 1. sys_write 1. unsigned int fd const char *buf size_t count 2. sys_open 2. const char *filename int flags int mode 3. sys_close 3. unsigned int fd 4. sys_stat 4. const char *filename struct stat *statbuf 5. sys_fstat 5. unsigned int fd struct stat *statbuf 6. sys_lstat 6. fconst char *filename struct stat *statbuf 7. sys_poll 7. struct poll_fd *ufds...










