ARTS:
- Algrothm: leetcode算法题目
- Review: 阅读并且点评一篇英文技术文章
- Tip/Techni: 学习一个技术技巧
- Share: 分享一篇有观点和思考的技术文章
Algorithm
to-lower-case
https://leetcode.com/problems/to-lower-case/
1)problem
Implement function ToLowerCase() that has a string parameter str, and returns the same string in lowercase.
Example 1:
Input: "Hello"
Output: "hello"
Example 2:
Input: "here"
Output: "here"
Example 3:
Input: "LOVELY"
Output: "lovely"
2)answer
声明一个新的字符串变量,对传入的字符串的字符逐个读取,如果是大写字母就取小写与大写之间的差值,得到大写字符对应的小写字母ASCII码存进字符串中。处理完后返回结果。
3)solution
Cpp:
#include <stdio.h>
#include <string>
using std::string;
class Solution {
public:
string toLowerCase(string str) {
string re_val = "";
for (char str_val : str)
{
if (str_val >='A'&& str_val <='Z')
{
// 取小写与大写之间的差值,得到字符对应的小写ASCII码对应是什么存进字符串中
re_val += (str_val + ('a' - 'A'));
}
else
{
// 如果是小写就不处理
re_val += str_val;
}
}
return re_val;
}
};
int main()
{
// 使用内容
Solution nSolution;
nSolution.toLowerCase("hello World?");
return 0;
}
Python:
class Solution(object):
def toLowerCase(self, str):
"""
:type str: str
:rtype: str
"""
ret = ""
for s in str:
if s>='A' and s<='Z':
ret += chr(ord(s)+(ord('a')- ord('A')))
else:
ret +=s
return ret
Review
【漏洞分析】在Windows下利用格式字符串
- 英文原文
> https://osandamalith.com/2018/02/01/exploiting-format-strings-in-windows/
- 译文
在Windows下利用格式字符串
https://xz.aliyun.com/t/2410
1)场景
利用格式字符串的漏洞。
2)问题难点
文中提到的漏洞程序是GITHUB上的一个挑战程序
https://github.com/OsandaMalith/Exploits/blob/master/Challenges/Challenge%20-%201.7z?raw=true
这个演示程序中的printf函数直接调用eax而没有指定任何格式字符串参数,在该函数内部先使用memset用零填充内存,strncpy用于复制填充缓冲区空间内的用户输入。printf直接调用缓冲区的代码。如果覆盖的内容超过了分配的内容就会形成溢出漏洞。
3)解决问题的方法
使用%X格式字符读取堆栈,可以控制程序执行流程。因为溢出的数据是从低往高增长,而堆栈的地址是高往低增长。而进入函数前,已经将返回函数的地址压入栈中。控制溢出的字符覆盖掉返回地址,溢出后跳转到ShellCode地址,就形成了栈溢出漏洞。
4)方法细节
根据作者的思路走,但是原文作者载入程序地址和我虚拟机测试的地址不同。所以只跟着流程测试了一下控制返回地址。加入Shellcode后,控制返回地址到指向ShellCode的地址还没有测试成功。
问题函数代码:
.text:00401000 sub_401000 proc near ; CODE XREF: _main+A4↓p
.text:00401000
.text:00401000 var_7D0 = byte ptr -7D0h
.text:00401000 arg_0 = dword ptr 8
.text:00401000
.text:00401000 push ebp
.text:00401001 mov ebp, esp
.text:00401003 sub esp, 7D0h
.text:00401009 push 7D0h ; size_t
.text:0040100E push 0 ; int
.text:00401010 lea eax, [ebp+var_7D0]
.text:00401016 push eax ; void *
.text:00401017 call _memset
.text:0040101C add esp, 0Ch
.text:0040101F push 7CFh ; size_t
.text:00401024 mov ecx, [ebp+arg_0]
.text:00401027 push ecx ; char *
.text:00401028 lea edx, [ebp+var_7D0]
.text:0040102E push edx ; char *
.text:0040102F call _strncpy
.text:00401034 add esp, 0Ch
.text:00401037 lea eax, [ebp+var_7D0]
.text:0040103D push eax ; char *
.text:0040103E call _printf
.text:00401043 add esp, 4
.text:00401046 mov esp, ebp
.text:00401048 pop ebp
.text:00401049 retn
.text:00401049 sub_401000 endp
控制寄存器Powershell代码:
$Buffer = 'A' * 80
#'%.310744' * 4 可变动
$fmt = '%x' * 69 + '%.310744' * 4 +'%n'
$ret = 'B' * 4
$final = $Buffer + $fmt + $ret
5)总结
strcpy函数分配内存数据是从低往高增长,而堆栈的地址是高往低增长。
Tip
【逆向分析】OD调试OCX
1)场景
该样本是一个自解压文件,自解压的时候会通过regsvr32去加载压缩包里的{5adbaa2b-a73d-4c95-81da-9b8be4179332}.ocx的同时,打开Adobe PDF.pdf文件。
2)问题难点
1、OCX是什么?
2、OD怎么调试?
3)解决思路
1、OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension);是可执行的文件的一种,但不可直接被执行; 是 ocx 控件的扩展名,与 .exe、.dll 同属于PE文件。
2、新建快捷方式,断点LoadLibrary()
得到加载OCX的位置。
C:\Windows\System32\regsvr32.exe /s /i C:\{5adbaa2b-a73d-4c95-81da-9b8be4179332}.ocx
3、断点VirtualAlloc()
得到开辟空间的内存地址。也就是ShellCode注入的位置。
4、查看内存模块,得到十六进制ShellCode,反汇编得到Shellcode行为。
4)方法细节
bp LoadLibrary
bp VirtualAlloc
查看内存模块【M】,代码地址,反汇编得到汇编指令断点调试。
5)总结
大多数加载DLL的技巧都可以这么调试。
海莲花的ShellCode是在PE文件里的资源节里的。
Share
【业务安全】业务安全:不只是跑赢最慢的那个人
https://mp.weixin.qq.com/s/NqsJsC3y5Q-Y0HpMcNFMqw
1)场景
保障业务安全中情报的作用。
2)问题难点
垒砌砖墙的目的不是在于其设计工艺的高端和完美,而在于延缓黑客的攻击。提升黑客攻击的性价比
3)解决问题的方法
情报团队完全可以做到,从一个黑暗面去梳理这个行业的框架,用黑色的视角来比对、梳理这个行业内各家企业的现状与关系。
4)方法细节
一个事件触发后的响应动作中,确认事件是否需要启动响应的一个环节:
- 要查什么;
- 要去哪里查;
- 查询工具是什么;
- 工具的输入是什么;
- 不同情况的输出分别代表什么;
- 每种输出所代表的内容,又对应了什么样的后续动作;
- 结果通过什么形式反馈;
- 结果都需要反馈给谁;
- 事件该如何记录;
- 事件是否需要复盘;
- 是否有可改进的指标;
5)总结
这篇文章讲了一个思路,于是我就翻到了。
MITER ATT&CK™是一个全球可用的基于真实世界观测的对手战术和技术的知识库。ATT和CK知识库被用作私营部门,*以及网络安全产品和服务社区中特定威胁模型和方法的开发基础。