yaklang / yakit

Cyber Security ALL-IN-ONE Platform

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

【需求】mitm热加载加个beforeRequest函数、以及hijackHTTPResponse类似的方法

n1ec opened this issue · comments

commented

类似hijackHTTPResponse方法

手动劫持后回显返回包,手动修改后通过该方法进行加密发送到测试的客户端或者前端

场景:改包避免超时

函数大概要求

返回数据前手动修改请求包可以做个加密 OR发送请求的时候也可以根据手动劫持的明文做个加密再发包

说明:

比如以下的返回包,这个是就是通过了hijackHTTPResponse方法进行解密了,通过forward回显到手动截至页面

{
  "Code": "200",
  "Msg": "操作成功",
  "Data": "{“id”:"1","usertype":"user"}"
}

image

那么需要有个函数是“允许返回数据包前再做一次处理”
和wenfuzz热加载里面的函数差不多

// beforeRequest 允许发送数据包前再做一次处理,定义为 func(origin []byte) []byte
beforeRequest = func(req) {
}

当使用这个调用函数的时候,可以做个加密然后再返回去 ,比如做完的加密如下,当然这只是调用函数里面对其中一个值进行修改,也可以根据业务进行全部加密,按业务需写,

{
  "Code": "200",
  "Msg": "操作成功",
  "Data": "U2FsdGVkX1/Se0ctyky1T0iIa1skzwzWbCO7r2xVtyzCZlGEgLvcpxEogJQuXLmi5Vm3lLDBgq22f5x4W5kLILNOld6EIOnfiEd2DxwiWAnFCOuuERmq4HupFMGdgN+"
}

你是否正在寻找:

# hijackHTTPRequest 每一个新的 HTTPRequest 将会被这个 HOOK 劫持,劫持后通过 forward(modified) 来把修改后的请求覆盖,如果需要屏蔽该数据包,通过 drop() 来屏蔽
# ATTENTION-DEMO:
#   hijacked = str.ReplaceAll(string(req), "abc", "bcd")
#       1. forward(hijacked):确认转发
#       2. drop() 丢包
#       3. 如果 forward 和 drop 都没有被调用,则使用默认数据流
#       4. 如果 drop 和 forward 在一个劫持中都被调用到了,以 drop 为准
/*
# Demo2 Best In Practice
hijackHTTPRequest = func(isHttps, url, req, forward, drop) {
    if str.Contains(string(req), "/products/plugins/plugin_11") {
        modified = str.ReplaceAll(string(req), "/products/plugins/plugin_11", "/products/plugins/plugin_create")
        forward(poc.FixHTTPResponse(modified))
    } 

    if str.Contains(string(req), "/products/plugins/plugin_12") {
        drop()
    } 
}
*/
hijackHTTPRequest = func(isHttps, url, req, forward /*func(modifiedRequest []byte)*/, drop /*func()*/) {

}
commented

不是