![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
安全实践
内容包括:Web安全、密码学、流量分析、隐写术、法律法规、杂项、逆向工程、二进制漏洞挖掘与利用等
小龙在山东
本博客为个人整理的技术笔记,仅用于学习。
展开
-
基于detours的Windows Hook
Detours是一个用于在Windows上监视和检测API调用的软件包。Detours 是一个由 Microsoft Research 开发的库,它允许开发人员在运行时动态地拦截(或“钩子”)Windows API 函数调用。这对于诸如调试、日志记录、模拟、扩展或修改应用程序行为等任务特别有用。通过使用 Detours,开发者可以透明地替换任何已存在的函数,同时保持其原始功能(如果需要)的可用性。原创 2024-06-19 23:45:00 · 421 阅读 · 0 评论 -
基于minhook的Windows HOOK
MinHook是一个基于微软Detours技术的可移植Hook库,它允许开发者在运行时更改函数定义,而无需修改原始函数代码。原创 2024-06-18 23:00:00 · 477 阅读 · 0 评论 -
Windows下基于Frida查看内存基址和修改寄存器
使用Frida能够方便地获取到DLL基址,还能修改寄存器值。首先要通过任务管理器获得进程的PID,然后写Python脚本把Frida附加到这个PID进程,根据IDA分析出来的函数地址,HOOK到目标函数,修改寄存器的值,最终实现控制进程逻辑。原创 2024-06-12 23:45:00 · 458 阅读 · 0 评论 -
JavaScript实现MD5、AES-CBC加密解密
CryptoJS是用JavaScript编写的加解密包,支持生成哈希、AES加密解密、多种编码方式。原创 2023-07-13 20:29:43 · 1233 阅读 · 0 评论 -
Go实现国密算法SM2、SM3、SM4
遵循的SM2标准号为: GM/T 0003.1-2012、GM/T 0003.2-2012、GM/T 0003.3-2012、GM/T 0003.4-2012、GM/T 0003.5-2012、GM/T 0009-2012、GM/T 0010-2012。SM3密码杂凑算法 - SM3 cryptographic hash algorithm。遵循的SM3标准号为: GM/T 0004-2012。遵循的SM4标准号为: GM/T 0002-2012。原创 2023-07-12 20:15:00 · 2518 阅读 · 0 评论 -
Python实现国家商用密码算法sm2/sm3/sm4/sm9(国密)
2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1 和 SM7 的算法不公开,其余算法都已成为 ISO/IEC 国际标准。目前应用较多的是SM2、SM3和SM4算法,这三者用法不一。原创 2023-07-12 20:00:00 · 7717 阅读 · 2 评论 -
网络安全等级保护等级保护对象的安全保护等级
2017年6月1号,《中华人民共和国网络安全法》出台,国家实行等级安全保护制度,也就是“等保2.0”。网络安全等级保护是指对网络(含信息系统、数据等)实施分等级保护、分等级监督,对网络中发生的安全事件分等级响应、处置。原创 2023-05-17 11:07:49 · 1341 阅读 · 0 评论 -
用于Windows或Unix-like hook进程的Python库
winappdbg:用于 Windows 调试和分析的高级 Python 库。PyDbgEng:这是一个用 Python 编写的调试工具,可以用于调试 Windows 进程。pydbg:另一个用于 Windows 调试的库,可以用于追踪某些恶意程序的行为。ptrace:可以允许你在 Unix-like 系统上 trace 进程的行为。这些库都可以用于 hook 进程,但是具体使用还需要根据你的需求进行选择。frida:可以用于动态地 hook 进程,进行调试或安全评估等操作。原创 2023-05-15 18:26:40 · 693 阅读 · 0 评论 -
PHP序列化:eval
解题思路通过传入d参数,参数是序列化后的字符串,用来调用魔术方法__destruct,然后调用evil的action,进而可以执行eval。原创 2022-07-29 23:00:00 · 212 阅读 · 0 评论 -
IDA常用快捷键使用说明
IDA常用快捷键使用说明编号快捷键功能说明01Enter跟进函数实现,查看标号对应的地址02Esc返回跟进处03A解释光标处的地址为一个字符串的首地址04B十六进制数和二进制数转换05C解释光标处的地址为一条指令06D解释光标处的地址为数据,每按一次将会转换这个地址的数据长度07G快速查找到对应地址08H十六进制数与十进制数转换09K将数据解释为栈变量10;添加注释11M解释为枚举原创 2022-03-21 16:25:59 · 1089 阅读 · 0 评论 -
Iphone越狱
https://www.i4.cn/https://unc0ver.dev/http://www.cydiaimpactor.com/https://checkra.in/原创 2022-02-08 16:23:13 · 1353 阅读 · 0 评论 -
Apache Log4j 漏洞(JNDI注入 CVE-2021-44228)
影响范围2.0 <= Apache log4j <= 2.14.1利用import org.apache.log4j.Logger;import java.io.*;import java.sql.SQLException;import java.util.*;public class VulnerableLog4jExampleHandler implements HttpHandler { static Logger log = Logger.getLogger(l原创 2021-12-10 18:24:34 · 34782 阅读 · 24 评论 -
常见扩展名文件头
常见扩展名文件头使用 php 获取 magic bytes、 Mime类型。原创 2021-11-03 10:26:13 · 681 阅读 · 0 评论 -
MySQL延时盲注:绕过逗号
MySQL延时盲注:绕过逗号原创 2021-10-24 11:38:33 · 377 阅读 · 0 评论 -
MySQL union ascii order盲注
源码<?php $dbhost = "localhost"; $dbuser = "root"; $dbpass = "123"; $db = "ctf"; $conn = mysqli_connect($dbhost,$dbuser,$dbpass,$db); mysqli_set_charset($conn,"utf8"); /* sql create table `admin` ( `id` int(10) not null prim原创 2021-10-21 17:05:20 · 198 阅读 · 0 评论 -
一句话Base64:Base64+Unescape+Hex+Unicode+RegExp+Decimal+HTML Entity+URLDecode
这道题用到了:Base64+Unescape+Hex+Unicode+Decimal+HTML Entity+URLDecode。Base64解码Unescape string十六进制从十六进制转换为Unicode:Unescape Unicode CharactersUnicode转码为10进制:十进制Replace input with output,留下String.fromCharCode()里的内容,然后十进制转换为HTML实体编码:HTML实体转换两次HTML实体解原创 2021-10-15 10:26:40 · 233 阅读 · 0 评论 -
Hash长度扩展攻击
<?phperror_reporting(0);$flag=file_get_contents('/flag');if(isset($_GET["md5"]) && isset($_GET["i"]) && isset($_GET["s"])){ $fl4g = substr_replace($flag, $_GET["s"], $_GET["i"], 1); echo $_GET["md5"] === md5($fl4g);}else{原创 2021-10-14 15:43:54 · 648 阅读 · 0 评论 -
PHP反序列化+魔法函数__string+绕过扩展名
php源码<?phphighlight_file(__FILE__);class OhYouFindIt{ public $content = "Hello Hacker.<br>"; function __destruct(){ echo $this->content; }}class writeshell{ public $filename; public $content; function __toSt原创 2021-10-14 15:12:45 · 670 阅读 · 4 评论 -
Create_Flag.exe死循环读取flag+Base85 IPV6解密
死循环获取flagimport oswhile 1: if os.path.exists('flag'): with open('flag') as f: print(f.read())先跑起来,然后再运行Create_Flag.exe:得到加密的数据:GBYqTW;8QqHZoyjH92HBIb}FFGcsW@IWc20F*0Q~。解密用CyberChef工具Base85 IPV6解密:参考:https://github.com/gchq/原创 2021-10-14 14:43:11 · 429 阅读 · 0 评论 -
Fastbin 堆溢出 Use After Free
shell 地址#-*- coding: utf-8 -*-from pwn import *elf = ELF('./fastbin')sh = process('./fastbin')getshell = 0x80487c6def Add(num): sh.sendafter('choice:\n', '1') sh.sendafter('id:\n', str(num))def Del(num): sh.sendafter('choice:\n', '2') sh.se原创 2021-10-01 20:57:35 · 181 阅读 · 0 评论 -
peda、Pwngdb、pwndbg的安装及避坑指南
环境Ubuntu 16.04 LTS安装在根目录下下载:git clone https://github.com/longld/peda.gitgit clone https://github.com/scwuaptx/Pwngdb.gitgit clone https://github.com/pwndbg/pwndbg.git安装配置pwndbg:cd ~/pwndbg./setup.sh报错:ERROR: pip's dependency resolver does not原创 2021-10-01 20:08:54 · 4821 阅读 · 0 评论 -
ROP缓冲区溢出利用
32位应用32位ELF的参数直接放到栈中。先找到一个EFF程序,用IDA打开F5,发现了fgets缓冲区溢出利用点:溢出长度为:0x28 + 0x4 = 0x2C。Shift+F12查找可以利用的字符串:这俩看着能用:.rodata:08048747 00000008 C /bin/ls.data:0804A030 00000012 C /bin/cat flag.txtusefulString db '/bin/cat flag.txt',0地址0x0804A030,没有被其他函数原创 2021-09-30 18:04:50 · 368 阅读 · 0 评论 -
cyclic查看缓冲区溢出长度
read、gets等C函数对输入没有限制,如果有可以溢出的堆栈,就有缓冲区溢出漏洞。方法一:方法二:使用pwntools的cyclic:安装$ apt-get update$ apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential$ pip install --upgrade pip$ pip install --upgrade pwntools测试cyclic原创 2021-09-29 17:55:28 · 2290 阅读 · 0 评论 -
IDA Linux远程调试
IDA:main函数F5反编译:配置IDA远程调试监听调试服务拷贝截图文件到Kali:开启调试F2下断点:F8单步调试:双击check变量:选中第一个字符N,点击a:原创 2021-09-28 13:50:33 · 1708 阅读 · 0 评论 -
Ollydbg查看内存数据并修改
IDE:Intel CPU是小端序首先通过搜索目标字符串,双击定位到,F2下断点。原创 2021-09-28 13:37:17 · 1644 阅读 · 0 评论 -
Angr 内存符号化 05_angr_symbolic_memory
说明通过查看下面的源码或IDA汇编,可知此例需要输入4个密码,给每个密码赋值给了user_input数组这块已经开辟的内存空间,我们可以监测user_input在内存中的值来获取最终的密码。随机生成的源码#include <stdio.h>#include <stdlib.h>#include <string.h>#define USERDEF "YZJGNZSQCRTECQLVJKDHBYEFALOWJXHE"char padding0[ 5949916原创 2021-09-18 14:46:05 · 397 阅读 · 0 评论 -
Angr 操作栈的符号执行 04_angr_symbolic_stack
Angr不支持多个输入参数,而参数都存入栈中。我们可以跳过输入,直接操作栈,来遍历出想要的结果。那从哪儿开始执行呢?此例,可以从scanf输入密码结束之后,把我们的密码注入,也就是sanf的栈注销(add esp, 10h)的后面0x08048697。这里我们通过gdb来查看符号执行时,要设置的padding大小:经过complex_function0和complex_function1后,可以计算出padding大小0xffffcf28 - 0xffffcf20:# This challen原创 2021-09-17 11:31:21 · 360 阅读 · 0 评论 -
pwndbg调试搞清楚PLT和GOT
GOT是保存库函数地址的区域,程序运行时,用到的库函数地址会设置到该区域中。PLT是调用库函数时的小型代码集合,程序可以像调用自己的用户函数一样调用这些小型代码。因此,PLT中包含的小型代码基本上与用到的库函数数量相同。简单来说,这些代码知识跳转到GOT中设置的值而已。如果GOT中尚未设置调用函数的地址,就将地址设置到GOT中之后再跳转。但是,库函数地址在程序运行过程中不会改变,因此GOT的值一旦设置就不会再发生变化。因此,调用库函数时没有必要检查GOT是否被设置。glibc用巧妙的方法在调用时避免了原创 2021-09-16 17:13:37 · 1069 阅读 · 0 评论 -
C语言与64位汇编对应关系
#include <stdio.h>int global;int func_op(void) { return 0; }void func(void){ unsigned long long val64 = 0; val64 = 0xffffeeeeddddcccc; // 7 global = 0x5555; // 8}#define MAX_WORD 16int main(void){ unsigned int i = 0; char words[MAX原创 2021-09-14 10:48:41 · 233 阅读 · 0 评论 -
gcc /usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory
$ gcc -fno-stack-protector -m32 -o hello hello.cIn file included from hello.c:3:/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory 27 | #include <bits/libc-header-start.h> | ^~~~~~~~~~~~~.原创 2021-09-13 17:09:45 · 862 阅读 · 0 评论 -
Angr 02_angr_find_condition 根据输出状态条件搜索正确输入
explore的find和avoid支持函数作为参数,根据函数返回值来判断是否成功。Angr把状态传入了函数,从而判断成功与否。原创 2021-09-09 17:03:32 · 282 阅读 · 0 评论 -
Angr 01 avoid 忽略的条件
01_angr_avoid无法反编译主函数,模块比较多,加上avoid过滤条件之后,就没那么慢了。import angr原创 2021-09-08 18:56:50 · 142 阅读 · 0 评论 -
Angr 00 基本步骤
环境Kali-Linux-2021.2-vmware-amd64用IDA找到要搜索的位置通过运行ELF文件00_angr_find,有两条路径,一条是错误Try again.,一条是正确并打印Good Job.,我们要找的就是后者,用IDA找到输出的位置,然后交给Angr的模拟器去搜索(explore)输入值,也就是正确的密码。使用ipython执行代码解释import angrimport sys# 加载可执行文件路径path_to_binary = "./00_angr_find原创 2021-09-08 17:46:57 · 238 阅读 · 0 评论 -
Kali支持中文设置
$ sudo apt update 100 ⨯Get:1 http://kali.download/kali kali-rolling InRelease [30.5 kB]Get:2 http://kali.download/kali kali-rolling/main amd64 Packages [17.8 MB]Get:3 http://kali.download/kali kali-roll原创 2021-08-28 12:53:41 · 444 阅读 · 0 评论 -
Kali设置时区
$ sudo dpkg-reconfigure tzdata[sudo] password for kali: Current default time zone: 'Asia/Shanghai'Local time is now: Sat Aug 28 12:43:30 CST 2021.Universal Time is now: Sat Aug 28 04:43:30 UTC 2021.原创 2021-08-28 12:44:04 · 1576 阅读 · 0 评论 -
objdump 二进制文件分析
objdump工具用来显示二进制文件的信息,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。常用参数说明-f 显示文件头信息-D 反汇编所有section (-d反汇编特定section)-h 显示目标文件各个section的头部摘要信息-x 显示所有可用的头信息,包括符号表、重定位入口。-x 等价于 -a -f -h -r -t 同时指定。-i 显示对于 -b 或者 -m 选项可用的架构和目标格式列表。-r 显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反原创 2021-08-26 11:32:18 · 639 阅读 · 0 评论 -
readelf ELF 文件格式分析
这个工具和objdump命令提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件);ELF文件类型ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF是原创 2021-08-26 11:06:58 · 459 阅读 · 0 评论 -
gdb 调试利器
gdb 调试利器GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下工作的c++程序员,gdb是必不可少的工具;启动gdb对C/C++程序的调试,需要在编译前就加上-g选项:$g++ -g hello.cpp -o hello调试可执行文件::$gdb <program>program也就是你的执行文件,一般在当前目录下。调试core文件(core是程序非法执行后core dump后产生的文件):原创 2021-08-26 10:46:08 · 189 阅读 · 0 评论 -
Socat简介
Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版。Socat 的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。Socat 的官方网站:http://www.dest-unreach.org/socat/Socat 安装通过源码转载 2021-08-25 10:54:38 · 1572 阅读 · 0 评论 -
Python unrar解压rar压缩文件
from unrar import rarfile# 源码:https://github.com/matiasb/python-unrar# 下载UnRAR.dll https://www.rarlab.com/rar_add.htm# 配置UnRAR.dll位置# 在系统变量里配置# UNRAR_LIB_PATH = C:\Program Files (x86)\UnrarDLL\x64\UnRAR64.dllfilename = '基础破解.rar'extract_path = 'D:原创 2021-08-12 22:39:31 · 564 阅读 · 0 评论