<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fanghuapyk的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fanghuapyk</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fanghuapyk]]></copyright><item><title><![CDATA[windows 平台shellcode编写]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/117132257</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/117132257</guid><author>fanghuapyk</author><pubDate>Fri, 21 May 2021 19:57:23 +0800</pubDate><description><![CDATA[0x00、介绍
比方说你手头上有一个IE或FlashPlayer现成的漏洞利用代码，但它只能够打开计算器calc.exe。但是这实际上并没有什么卵用，不是吗?你真正想要的是可以执行一些远程命令或实现其他有用的功能。
在这种情况下，你可能想要利用已有的标准shellcode，比如来自Shell Storm数据库或由Metasploit的msfvenom工具生成。不过，你必须先理解编写shellcode的基本原则，才可以在自己的漏洞利用代码中有效地使用它们。对于不熟悉这个术语的同学们，可以参考一下维基百科：
在]]></description><category></category></item><item><title><![CDATA[Windows系统禁止自动更新配置]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/116093835</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/116093835</guid><author>fanghuapyk</author><pubDate>Sat, 24 Apr 2021 16:04:55 +0800</pubDate><description><![CDATA[1关闭系统自动更新服务
首先win+r输入services.msc打开服务管理界面，然后找到windows update，双击打开设置，把启动类型改为禁止，服务状态改为停止。

然后在上面的恢复菜单栏里面，把重新启动服务改为无操作，点击确定

2. 配置本地策略组，使配置生效
打开运行界面输入gpedit.msc打开本地策略组，依次打开windows组件，然后找到配置自动更新，双击配置为已禁用，这样就能禁止系统更新啦！QAQ



...]]></description><category></category></item><item><title><![CDATA[Double free（hows2heap）]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/116069677</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/116069677</guid><author>fanghuapyk</author><pubDate>Fri, 23 Apr 2021 22:02:46 +0800</pubDate><description><![CDATA[1.fastbin_dup
fast bin
fast bin主要是用来存放一些小的内存，使用fastbin可以提高小内存的分配效率，在默认情况下，对于SIZE_SZ为4B（32位）的平台，小于64B（字节）的chunk分配请求，和对于SIZE_SZ为8B（64位）的平台，小于128B的chunk分配请求首先会在fast bin中查找是否有所需大小的chunk存在，如果存在，就会直接返回内存资源，如果不存在，才会到其他bins中去查找。
fastbins 可以看成一个后进先出的栈，使用单链表来实现，通过 f]]></description><category></category></item><item><title><![CDATA[how2heap-first_fit]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/116063003</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/116063003</guid><author>fanghuapyk</author><pubDate>Fri, 23 Apr 2021 18:28:28 +0800</pubDate><description><![CDATA[标题1.first_fit (unsorted bin)
first-fit是一个glibc堆管理策略，当程序在分配内存时，malloc会现在first bin或者unsorted bin中查找适合的chunk，如果有适合的chunk，就会直接分配给程序使用，如果没有找到合适的chunk，就会把unsorted bin中的所有chunk放到所属的bins链中去，然后再从这些bins中查找合适的chunk分配给程序，
下面是网上基于64位的程序来做的一个展示，代码如下：
#include &lt;stdio.]]></description><category></category></item><item><title><![CDATA[堆 overlapping和漏洞利用]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/114978645</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/114978645</guid><author>fanghuapyk</author><pubDate>Sat, 20 Mar 2021 10:14:29 +0800</pubDate><description><![CDATA[堆 overlapping
首先给出源码：

```bash

```c
 /*
 
 A simple tale of overlapping chunk.
  This technique is taken from
  http://www.contextis.com/documents/120/Glibc_Adventures-The_Forgotten_Chunks.pdf
 */
  #include &lt;stdio.h&gt;
 #include &lt;stdlib.h&gt;
 #in]]></description><category></category></item><item><title><![CDATA[攻防世界 dice_game栈溢出+随机数]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115013926</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115013926</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 19:16:01 +0800</pubDate><description><![CDATA[攻防世界 dice_game栈溢出+随机数
检查保护

发现是64位程序，并且开启了NX保护和地址随机化
上ida

发现flag敏感字符，追踪发现sub_B28函数里面可以直接得到flag
这里解释一下
Fopen函数：
FILE *fopen(char *filename, char *mode);

filename为文件名（包括文件路径），mode为打开方式，它们都是字符串。
Fget函数：
函数原型
char *fgets(char *str, int n, FILE *stream);

参数：]]></description><category></category></item><item><title><![CDATA[ROP-Ret2Libc概述和利用]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115013089</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115013089</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 18:53:11 +0800</pubDate><description><![CDATA[ret2libc简介
ret2libc就是控制函数的执行libc中的函数，通常是返回至某个函数的 plt 处或者函数的具体位置 (即函数对应的 got 表项的内容)。一般情况下，我们会选择执行 system("/bin/sh")，因此我们通常需要找到 system 函数的地址
ret2libc通常可以分为下面这几类：

程序中自身就含有system函数和"/bin/sh"字符串
程序中自身就有system函数，但是没有"/bin/sh"字符串
程序中自身就没有system函数和"/bin/sh"字符串，但给]]></description><category></category></item><item><title><![CDATA[利用ROP-Ret2Syscall突破NX保护]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012944</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012944</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 18:20:18 +0800</pubDate><description><![CDATA[利用ROP-Ret2Syscall突破NX保护
Ret2text依赖的是系统中有system函数，但是有的程序里面没有system，并且有的程序开启了NX保护，这是就不能使用ret2shellcode自定义shellcode代码，因此，我们就要用ret2Syscall帮忙实现。
Gadgets
是指在程序中的指令片段，有时我们为了达到我们执行命令的目的，我们需要用到多个Gadgets来完成我们的功能。Gadgets最后一班都有ret，因为要将程序控制权交给下一个Gadget。
利用ROP-Ret2Sysca]]></description><category></category></item><item><title><![CDATA[Rop-Ret2Shellcode-64位实例]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012733</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012733</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 18:12:36 +0800</pubDate><description><![CDATA[Rop-Ret2Shellcode-64位实例
前面写过了32位的shellcode，这次继续64位shellcode，当我们的64位程序中没有system函数，并且开启了NX保护时，这时我们需要用到64位的shellcode来执行execve（“/bin/sh”,null,null）;
如何编写shellcode呢？
①想办法调用execve("/binsh" , null, null);
②借助栈来传入字符串/bin/sh
③系统调用execve
rax = 0x3b(64bit)
rdi = bin_]]></description><category></category></item><item><title><![CDATA[手动制作shellcode]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012561</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012561</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 17:59:14 +0800</pubDate><description><![CDATA[概括：
我们要将自己生成的shellcode汇编文件，编译为.o文件，然后再编译为可执行文件，然后将可执行文件中的有用的代码段单独复制出来，最后我们利用python脚本将我们的这一个文件发送到测试的程序中去
一：准备shellcode文件
1将汇编代码文件shellcode_32.Asm中代码编译为shellcode_32.o文件
命令为：nasm -f elf32 -o shellcode_32.o shellcode_32.asm
push 0x68
push 0x732f2f2f
push 0x6e6]]></description><category></category></item><item><title><![CDATA[Ret2shellcode和NX保护机制]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012170</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115012170</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 17:54:55 +0800</pubDate><description><![CDATA[Ret2shellcode和NX保护机制
ret2text漏洞利用依赖于程序中存在执行system(“/bin/sh”)的函数，如果没有这个函数，怎么办呢?
没有执行shell的函数，没有开启NX保护
我们需要传入自定义shellcode，这就利用方式就是ret2shellcode
Shellcode是黑客编写的用于实行特定功能的汇编代码，通常是开启一个shell
例如：(linux系统下)
Execve（“/bin/sh”,null,null）;
汇编代码展示
push 0x68
push 0x73f2f]]></description><category></category></item><item><title><![CDATA[gdb调试64位程序]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115011731</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115011731</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 17:39:56 +0800</pubDate><description><![CDATA[首先看一下程序源码，要是我们的程序调用system函数
#include &lt;stdio.h&gt;
void exploit(){
system("/bin/sh");
}
void main(){
char buf[20];
gets(buf);
}

我们会用到两个窗口，一个调试，另一个运行脚本
首先看一下保护模式，什么都没有开启

1，先用objdump –d –M intel ./test 命令查看所有的汇编代码

我们要执行的程序在这里，我们要运行的函数是system函数，并且带参数bin/]]></description><category></category></item><item><title><![CDATA[如何利用printf漏洞突破canary保护]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/115011304</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/115011304</guid><author>fanghuapyk</author><pubDate>Fri, 19 Mar 2021 17:29:55 +0800</pubDate><description><![CDATA[如何利用printf漏洞突破canary保护
原理：
1、 在所有函数调用发生时，向栈帧内压入一个额外的随机 DWORD，这个随机数被称作
“canary”，用 IDA 反汇编时，又被称作“Security Cookie”。
2、 canary 位于 EBP 之前，系统还会在.data 的内存区域中存放一个 canary 的副本。
3、 当栈中发生溢出时，canary 将被首先淹没，之后才是 EBP 和返回地址。
4、 在函数返回之前，系统将执行一个额外的安全验证操作，称作 Security Check。 ]]></description><category></category></item><item><title><![CDATA[攻防世界stack2  and ida动态调试]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/107552938</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/107552938</guid><author>fanghuapyk</author><pubDate>Fri, 24 Jul 2020 10:28:47 +0800</pubDate><description><![CDATA[首先按照常规，检查程序保护机制，发现除了pie，都开启了，并且使32位程序。

上ida调试，查看伪代码，分析程序，发现程序的功能就是一个字符数组的展示，增加，修改，还有就是求平均值

伪代码如下

程序的第三个功能就是字符串的修改，这里发现漏洞，这里可以发现在对v13赋值时，程序并没有进行边界检查，这就给了我们栈溢出的机会，我们可以利用栈溢出构造ROP，达到劫持程序的效果。

搜索字符串，发现敏感字符，跟进发现后门函数
，
利用思路：
我们利用栈溢出漏洞将返回地址修改为我们的后门函数地址，实现程序劫持。
]]></description><category></category></item><item><title><![CDATA[格式化字符串漏洞简介]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/103518117</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/103518117</guid><author>fanghuapyk</author><pubDate>Thu, 23 Jul 2020 18:29:55 +0800</pubDate><description><![CDATA[格式化字符串简介：
这里先介绍一下c语言中格式化字符串：
在c语言中的printf，fprintf，sprintf，snprintf等printf函数经常会用到类似%形式的一个或者多个说明符，例如：
#include  &lt;stdio.h&gt;
int main (void) {
char a[100];
printf("my name is %s",panghu);
return 0;
}...]]></description><category></category></item><item><title><![CDATA[pwnable.tw -  hacknote（uaf漏洞利用）]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/103436565</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/103436565</guid><author>fanghuapyk</author><pubDate>Sat, 07 Dec 2019 22:01:18 +0800</pubDate><description><![CDATA[pwnable.tw -hacknote
前言：
看了几个大佬写的pwnable.tw-hacknote ,自己也尝试写一下;
程序分析：
首先运行一下程序
发现这里有add_note ,delete_note ,print_note三个功能，我们看一下main函数，add_note，和delete_note 函数,
main函数：
add_note函数：
可以看到首先为ptr+note_offs...]]></description><category></category></item><item><title><![CDATA[pwn  hacknote学习（UAF漏洞利用）]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/103337444</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/103337444</guid><author>fanghuapyk</author><pubDate>Sun, 01 Dec 2019 18:26:53 +0800</pubDate><description><![CDATA[hacknote：
uaf漏洞通常就是内存块被释放后，其对应的指针没有被置为NULL，然后在下一次使用前，有相应的代码对这块内存进行了修改，当程序再次使用相同的内存空间的时候，我们就能覆盖原来的地址，从而返回我们想要执行的函数的地址。
我们通常称释放后没有被置为NULL 指针为dangling pointer。
这里贴出源码：
#include &lt;stdio.h&gt;
#include &...]]></description><category></category></item><item><title><![CDATA[Ubuntu16.4汇编代码的编写- NASM的安装和使用]]></title><link>https://blog.youkuaiyun.com/fanghuapyk/article/details/102934958</link><guid>https://blog.youkuaiyun.com/fanghuapyk/article/details/102934958</guid><author>fanghuapyk</author><pubDate>Wed, 06 Nov 2019 15:29:13 +0800</pubDate><description><![CDATA[一：nasm安装
1：下载：
http://www.nasm.us/pub/nasm/releasebuilds/2.13/
2：解压 tar zxvf xxx.tar.gz
进入解压目录：执行./configure
make
sudo make install
3:通过apr源：
sudo apt-get install nasm
安装完成，nasm -v 查看安装版本，有版本信息则安装完成
二...]]></description><category></category></item></channel></rss>