安全基础

配置靶场

DVWA

php_dest/php.ini

;包含路径,删除注释

extension=gd

allow_url_fopen=On
allow_url_include=On

DVWA/config/config.inc.php

$_DVWA[ 'db_user' ]     = 'dvwa';
$_DVWA[ 'db_password' ] = 'toor';

$_DVWA[ 'recaptcha_public_key' ]  = '6LejsJMaAAAAABhdAwAlYxNVJJC6xDEfN6qpWm4Y';
$_DVWA[ 'recaptcha_private_key' ] = '6LejsJMaAAAAAOh9Twp7x6CMgRBD0AfmzzeykYrs';

QA

mysql setup:创建同名数据库和用户,赋予用户全部权限

php_gd:apt install php-gd

PHP Study 卸载phpstudy后80端口仍存在:使用everything搜索phpstudy,删除‘D_Dev_Tools'开头两个文件

C:\Users\QY_Kyana\AppData\Local\Packages\Microsoft.Windows.Search_cw5n1h2txyewy\LocalState\AppIconCache\150

适用于win10_20h2最新版

隐写知识

常用加密:base64、base32、MD5、字符串搜索解压密码

音频隐写

  • 观察频谱图
  • 放大波形,高位为1低位为0,转换ASCII
  • MP3stego
  • LSB(最低位有效)
  • 摩斯电码

图片隐写

  1. 查看属性

  2. 检查标志(用hxd等文本编辑器打开),如果不正确修改恢复图像,未完全显示时候修改图像宽高使图像恢复完全;图像结束标志后加入数据

  3. 检查是否是多张图,binwalk

  4. 不影响图像效果情况下,修改像素数据,加入信息

  5. 利用隐写算法(F5、Guess等),只限于jpg

    # png
    89 50 4E 47 0D 0A 1A 0A:文件头标志
    00 00 00 0D:表示IHDR头块长13
    49 48 44 52:IHDR标识,ASCII码为IDHR
    XX XX XX XX:图像宽度,单位像素
    XX XX XX XX:图像高度,单位像素
    XX:图像色深,XX:颜色类型
    00 00 00 XX XX XX:CRC校验位
    00 00 00 00 49 45 4E 44 AE 42 60 82:文件尾标志
    
    # gif
    47 49 46 38 37/39 61:header入口,前三个是GIF,后三个是版本87a/89a
    00 3B:文件尾标志,XX XX XX XX:图像渲染区域和宽高
    XX:压缩字节,XX:背景色在全局颜色表索引,XX像素宽高比,多数0
    P.S.需要分帧查看各帧组合数据是不是
    
    # jpg
    FF D8 FF:文件头标志
    FF D9:文件尾标志
    
    # rar
    52 61 72 21 1A 07 00:文件头标志
    
    # zip
    ## 压缩源文件数据区
    

50 4B 03 04:文件头标识
14 00:解压所需pkware版本
00 00:全局方位标记(有无加密),只有第二个数字为奇数时候加密
08 00:压缩方式
XX XX:文件最后修改时间
XX XX:文件最后修改日期
XX XX XX XX:CRC32校验

压缩源文件目录区

50 4B 01 02:目录中文件头标记
3F 00:解压文件所需pkware版本
00 00:全局方式位标记(有无加密),真加密两个都是0900、假加密文件目录0900、不加密0000

   
   ## 常见套路
   
   
   
   ### strings工具使用
   
   获取的编码通常需要base64等解码
   
   ```bash
   -a # 扫描整个文件
   -f # 显示字符串前先打印文件名
   -t # 输出字符位置,odx
   -e #选择字符大小和排列顺序

binwalk或者winhex16提取zip

binwalk file -e

选中头到尾,复制选块到新文件

MP3Stego

encode -E hidden_text.txt -P pass origin_sound output_sound.mp3
decode -X -P pass hidden_sound.mp3

常见文件头标志

文件名 头标志
JPG FF D8 FF E0 00/FF D8 FF FE 00
GIF 47 49 46 38 39 61/47 49 46 38 37 61
BMP 42 4D
ZIP 50 4B 03 04/05
GZ 1F 8B 08
ICO 00 00 01 00 00/100
PDF 25 50 44 46 2D 31 2E
JAR 5F 27 A8 89
HTML1 3C 68 74 6D 6C 3E
HTML2 3C 48 54 4D 4C 3E
HTML3 3C 21 44 4F 43 54
MIDI 4D 54 68 64
MPEG 00 00 01 B3/BA
PNG 89 50 4E 47 0D 0A
RAR 52 61 72 21
RPM ED AB EE DB
XML 3C 3F 78 6D 6C
TIFF 49 49 2A 00
PSD 38 42 50 53
RTF 7B 5C 72 74 66
DocXls D0 CF 11 E0
WAV 57 41 56 45
AVI 41 56 49 20
MOV 4D 54 68 64
DWG 41 43 31 30

一点外挂

01|CheatEngine PVZ 0cd

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
add dword ptr [edi+24],10000
mov eax,[edi+24]

exit:
jmp returnhere

"PVZ原版启动程序.exe"+8728C:
jmp newmem
nop 2
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PVZ原版启动程序.exe"+8728C:
add dword ptr [edi+24],01
mov eax,[edi+24]
//Alt: db 83 47 24 01 8B 47 24

<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="38">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"No description"</Description>
      <LastState Value="0" RealAddress="1566453C"/>
      <VariableType>4 Bytes</VariableType>
      <Address>1566453C</Address>
    </CheatEntry>
    <CheatEntry>
      <ID>1</ID>
      <Description>"0cd script"</Description>
      <LastState Activated="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
add dword ptr [edi+24],10000
mov eax,[edi+24]

exit:
jmp returnhere

"PVZ原版启动程序.exe"+8728C:
jmp newmem
nop 2
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PVZ原版启动程序.exe"+8728C:
add dword ptr [edi+24],01
mov eax,[edi+24]
//Alt: db 83 47 24 01 8B 47 24
</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>

02|CCL反软件查杀

multiCCL定位原理图示
        by niu-cow in NE365
         2996-04-22
1.假设一种比较极端的情况:
  某杀毒软件针对某样本
  抽取了如下 a  b  c  d  e 的五个特征码片段
  而其中的任何一个单独的片段都不构成完整的特征码
    更极端的情况是可能有两套这样的组合。

  却以其中任何两处来识别。(见 图1)

这样,如果用原来的CCL就很难定位了,就算能定位,操作也
   变得很复杂。
(图1)
..............................aaaaaaaaa........................
...............................................................
.............bbbbbbb.........ccc...............................
...............................................................
...................ddddddddd...............eeeee...............

2.针对这种情况
    有个思路是从一端开始盖零(考虑到PE文件文件头的重要性
  multiCCL选择了从尾端开始往前盖)。

  直到如图2所示时,杀毒软件才不能识别
     (b片段被破坏了一个字节)
    这样b尾端就出来了。

(图2)
..............................aaaaaaaaa.........................
................................................................
.............bbbbbb000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

------------------------------------------------------------------
下面是定b片段的头端了
     看看图3 图4 图5 ,注意看b片段中间那个字节的零的移动

(图3)
..............................aaaaaaaaa.........................
................................................................
.............bbbb0bbb0000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

----------------------------------
(图4)
..............................aaaaaaaaa.........................
................................................................
.............0bbbbbb00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

----------------------------------------------------------------------

(图5)
..............................aaaaaaaaa.........................
................................................................
............0bbbbbbb00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000

--------------上图的a 和 b 两个片段都暴露了--------------------------
   图5 中,暴露出完整的a b 两个片段,这下又被杀毒软件认出来了

这样就定位出b段了。
接下来把b希用0盖掉作为新的样本,用杀毒软件检测一下是否被杀,还杀就
重复前面的步骤定 c 段,如图6

(图6)
..............................aaaaaaaaa........................
...............................................................
.............0000000.........ccc...............................
...............................................................
...................ddddddddd...............eeeee...............

-----------------------------------------------------------------------
如果定好c段盖掉后还是被杀就再定 d 段
  如图7

(图7)
..............................aaaaaaaaa........................
...............................................................
.............0000000.........000...............................
...............................................................
...................ddddddddd...............eeeee...............

-----------------------------------------------------------------------
这样重复,直到片段d e ……都被找出盖掉后,杀毒软件再也不认了

-----------------------------------
    一个字节一个字节来显然太费时间,效率很低的,一次性
生成上千个文件也是不现实的。
  所以考虑先用二分法粗定。到范围小时再逐字节替换。
-----------------------------------
从尾端开始数,以1.2.4.6.8……的大小往前盖
      即取2的指数阶 , 2^n <  文件尺寸就行了。
         一次生成20个左右的样本文件,用杀毒软件检测
以例图说明吧(见 图8图9)
下面这个盖了128 bytes 的还被识别

(图8)
..............................aaaaaaaaa........................
...............................................................
.............bbbbbbb.........ccc...............................
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000

-----------上面这个盖了128 bytes的还被识别-------------
--------------下面这个盖了256 bytes 的不被识别了--------------------

(图9)
..............................aaaaaaaaa........................
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000

--------------------------------------------------------------------
那就说明距文件末尾256--128之间有个特征码片段,
下一步就以图8为样本,
       定位的范围是 图10 中经XXXX标记的区域

(图10)
..............................aaaaaaaaa........................
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
---------------------------------
如此反复,当范围缩小到32字节或更小,二分法就显得效率低下了,
  改用逐字节替换法,一次生成最多32个文件。

-----------
另外,
图8 图9 图10 之外,还有一种情况,
         就是某次用二分法生成的所有文件
     杀毒软件都不识别,那就说明特征码集中在最大盖0范围之前
   即图9中 未盖0的区域,这时只要以图9为样本,
     定位图11中以YYYY标记的区域

(图11)
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000



------------

尾端定出后,再用 图3图4图5 所示的方法把0还字节前移,一次生成32个
文件用杀毒软件检测,如果32个全不被杀时,就取这32个字节作为定位结果
对于这种大尺寸的片段,没必要完全定位出片段的头端。
    (因为一个片段中只要修改一个字节就够了)


----------------------------------
==================================
----------------------------------
  基本原理就如上面所述,其实就什么简单。

  不管杀毒软件用几套组合,用复合还是单一特征码,都照样搞定它。
当然,以后杀毒软件使出什么新招就说不准。~~~~~~~~~~~~~~~~~

  (本文仅作思路上的探讨,若有人因应用本文的思路带来某些后果,均与
本文作者无关。)


           若有不当之处,请各位指正,谢谢
----------------------------------------------------------
补充说明:

2006-04-24 :
      刚刚发现有的杀毒软件开始用检测文件的某几处是否被填充0来反定位了,
        一旦被检测到某几处被盖0 ,就把位置更先前的干扰码激活。这时就算
     牺牲效率一直往前盖,也只能定位出干扰码(假的特征码)。
      现在暂时可用随机数据串填充应付,不知道以后还会有什么招。
   另外,NDD32的特征码用的是代码与输入表关联,对付这种特征码的方法是,
      先普通定位,然后把找到的输入表上的特征码片段保护起来再定位,
       这样就能找到代码里的特征码片段了。
2005-05-22 :
     通过实际测试发现等分法比二分法效率更高,于是又改用等分法了。

病毒免杀技术

  • 加花指令:添加一段不影响程序运行的指令,使特征码偏移
  • 加壳:先运行壳,再由壳运行程序
  • 修改特征码:病毒库匹配不到
posted @ 2025-01-06 15:30  Kyana  阅读(48)  评论(0)    收藏  举报