一次弱鸡的docker复现失误经历
一次弱鸡的docker复现失误经历先是用windterm传复现文件
来到dockerfile的目录下
1docker build -t escerror .
1docker run -d -p 10085:80 escerror
这个docker也是很常规的给我返回了一个容器id,说明容器启动成功
但是无论是物理机,还是虚拟机本身都访问不到
于是,查看报错日志
1docker logs b659ea360966
里面发现有一个,run文件写入的权限问题,于是在虚拟机里给那整个文件夹777权限
因为之前也遇到过这个问题
1chmod -R 777 esc-error
但是问题依旧
有新建了个容器,不出所料的依旧(省略中间很多解决错误方式)
那就进容器
1docker exec -it 0cb8f9a1bf0e /bin/bash
看了容器里面/run的权限,并给了777
12ls -ld /runchmod 777 /run
依旧没解决
还是在容器里,没辙了,看一下端口,容器里没有netstat命令,用ss替代
1ss -tuln
他妈的,发现
123Netid ...
preg_replace与代码执行categories - 常见漏洞
preg_replace与代码执行案例
就是 preg_replace 使用了 /e 模式,导致可以代码执行,而且该函数的第一个和第三个参数都是我们可以控制的。我们都知道, preg_replace 函数在匹配到符号正则的字符串时,会将替换字符串(也就是上图 preg_replace 函数的第二个参数)当做代码来执行,然而这里的第二个参数却固定为 ‘strtolower(“\1”)’ 字符串,相当于 eval(‘strtolower(“\\1”);’) 结果
12345strtolower("\\1") 是 PHP 中的一个函数调用,目的是将匹配的字符串内容转换为小写形式strtolower() 是 PHP 的一个函数,用于将字符串中的所有字符转换为小写\\1 表示正则表达式中的反向引用,即对匹配到的第一个捕获组的引用在正则表达式替换中,\\1 会被替换成正则表达式中第一个括号捕获到的内容strtolower("\\1") 的作用是将第一个捕获组中的内容全部转换为小写字母
然后是W3Cschool里的解释
反向引用
对一个正则表达式 ...
escapeshellarg绕过与参数注入漏洞
escapeshellarg绕过与参数注入漏洞参数注入漏洞在执行命令的时候,用户控制了命令中的某个参数,并通过一些危险的参数功能,达成攻击的目的。
举例gitlist 0.6.0远程命令执行漏洞
在用户对仓库中代码进行搜索的时候,gitlist将调用git grep命令
123456789101112<?phppublic function searchTree($query, $branch){ if (empty($query)) { return null; } $query = escapeshellarg($query); try { $results = $this->getClient()->run($this, "grep -i --line-number {$query} $branch"); } catch (\RuntimeException $e) { return fals ...
初入免杀
测试环境微步云沙箱
1.静态分析(详情去看云沙箱)
放本地虚拟机环境
火绒(静态分析强)->360->天擎->卡巴斯基
ps.mimikatz
查看病毒名称
被前缀匹配到优先更改特征码,改一些字节什么的,暂时不需要混淆行为
杀软的查杀方式静态分析
特征码查杀,库存匹配
360QVM技术,测木马最好不联网
virtest定位特征码,修改样本
strings查找可识别字符串(未被混淆的)
pestudio看熵值混淆程度高不高
studyPE+
动态分析
检测目标环境有没有微信,有微信就不是沙箱
API hook 技术为主要对抗焦点,unhook,不要被杀毒软件监视
主要规避后两项
行为分析
杀软致盲模拟杀毒软件绕过 defender,让杀毒软件致盲
wsc
QVM对抗
其他分析
bp抓request请求
在脚本头部写
12345678proxies = { "http": 'http://127.0.0.1:8080', "https": 'http://127.0.0.1:8080'}requests_request = partial(requests.request, proxies=proxies, verify=False, allow_redirects=False)url="https://www.baidu.com"headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0'}respnse = requests_request('GET',url,headers=headers)
设置就是上面这么设置,具体链接端口 ...
无参数RCE
无参数读文件首先print_r(scandir(“.”))可以看当前目录所有文件名。但是既然我们要让他没有参数,那么我们就得把里面的.号,用函数替换掉。有一个函数的返回值第一项为.号,localeconv()。但是我们要只读.号,那我们就找一些只读第一位的函数
发现有这些
1234localeconv() 函数返回一包含本地数字及货币格式信息的数组。current() 函数返回数组中的当前元素(单元),默认取第一个值,pos() 同 current() ,是current()的别名reset() 函数返回数组第一个单元的值,如果数组为空则返回 FALSE
那么,就可以构造出这些
123print_r(scandir(current(localeconv())));print_r(scandir(pos(localeconv())));print_r(scandir(reset(localeconv())));
无参数rce1getallheaders()返回所有的 HTTP 头信息,但是要注意的一点是这个函数返回的是一个数组,而 eval() 要求的参数是一个字符串,所以这里不能直 ...
php弱类型
弱类型int转string12$a =1;$stra=(string)$a;
或者
1$stra=strval($a);
string转int1intval("1");
PS.遇到无法转换的直接返回0松散比较
小总结
弱类型应用MD5()值不同却MD5相同,弱类型绕过
0e215962017
0e291242476940776845150308577824
如果加到===,可以通过传入数组让md5()函数报错,产生null,null===null,就绕过了
json_decode()
a={“key”:0}
MD5有个特点是:如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等
原型链污染
原型链污染定义原型链污染是一种针对javascript运行时的注入攻击。通过原型链污染,攻击者可能控制对象属性的默认值。这允许攻击者篡改应用程序的逻辑,还可能导致拒绝服务,或者在极端情况下远程执行代码
prototype原型
原型链污染原理
什么情况下原型链会被污染找找能控制数组(对象)的键名的操作就可以
比如对象merge
1234567891011function merge(target, source) { for (let key in source) { if (key in target && key in source) { // 如果目标对象和源对象中都有相同的键 merge(target[key], source[key]); } else { // 如果目标对象中没有该键,则直接添加 target[key] = source[key]; } ...
Web源码泄露
源码泄露以及利用工具包:https://github.com/Introspelliam/tools
.hg源码泄漏原因在使用 Mercurial( hg)进行版本控制时,hg init 命令会初始化一个新的 Mercurial 仓库。执行 hg init 后,Mercurial 会在当前目录中生成一个名为 .hg 的隐藏目录,这个目录是 Mercurial 用来存储版本控制信息的地方。
利用工具:dvcs-ripper
使用:
1rip-hg.pl -v -u http://www.am0s.com/.hg/
.git源码泄漏原因在运行git init初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录等等。在发布代码的时候,把.git这个目录没有删除,直接发布了。使用这个文件,可以用来恢复源代码。
利用工具:githack和githacker
.DS_Store文件泄漏原因在发布代码时未删除文件夹中隐藏的.DS_store,被发现后,获取了敏感的文件名等信息
利用工具:ds_store_exp
1python ds_store_exp.py ht ...
复活通知
将于明天把前期大部分笔记post上来,重启博客使用