web361
打开,题目说名字就是考点,试了一下这个的参数是get传参的
所以我们试一下name=49
发现成功,于是我们正常测试
1?name={{().__class__.__base__.__subclasses__()}}
发现没过滤啥东西,于是我们用脚本找到os._wrap_close所在的地方
123456789101112131415161718192021222324import requestsurl = input('请输入 url 链接:')for i in range(500): # ① 记得把 payload 写成字符串模板 payload = "{{().__class__.__base__.__subclasses__()[" + str(i) + "]}}" try: r = requests.get(url, params={"name": ...
1.字符串逃逸减少感觉反序列化一道这里难度增加了不少
先讲点前置知识
在前面字符串没有任何问题的情况下(成员属性数量一致,长度一致,长度一致);}是反序列化结束符,后面的字符串不影响反序列化的结果
一般在数据先经过一次serialize再经过unserialize,在这个中间反序列化的字符串变多或者变少的时候才有可能存在反序列化属性逃逸
看个例子
1234567891011121314<?phpclass A{ public $v1='a'; public $v2="dazhuaang";}class B{ public $v="a\"";}echo serialize(new A());$b = 'O:1:"A":1:{s:2:"v1";s:1:"a";s:2:"v2";N;}';var_dump(unserialize($b)); ...
[NewStarCTF 公开赛赛道]UnserializeOne12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758<?phpclass Start{ public $name; protected $func; public function __destruct( //6.echo 不是字符串 { //destruct的触发反序列化就会自动触发 echo "Welcome to NewStarCTF, " . $this->name; } public function __isset($var) //2.找到把对象当成函数调用的地 ...
uploads-labs第一题和第2题都很基础这里就简单讲述了
pass-01(前端js校验)
就说这个函数限制的,第一种办法我们可以不让他调用,第2种就是上传图片马然后bp抓包再修改为php文件就可以了
pass-02(MIME验证)分析代码发现只对content-type进行了验证,我们只需抓包
修改为这三个中的一个就可以了
pass-03(黑名单验证-特殊后缀)查看源码发现是黑名单,不准上传php等文件,但是只过滤了一点点
在某些特定环境中某些特殊后缀仍会被当作php文件解析 php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml
所以我们写完一句话木马直接上传这些即可,这里我们上传了一个1.phtml文件
Pass-04(.htaccess)打开发现黑名单过滤的更多了
但是.htaccess没有被过滤那这个是什么呢
是什么.htaccess 解析漏洞是 Apache 服务器中因错误配置或允许用户上传自定义 .htaccess 文件导致的 文件解析逻辑绕过 漏洞。攻击者可利用该漏洞将非可执行文件(如图片)强制解析为脚本文件(如 PH ...
kali安装docker也是费尽了9牛2虎之力,不知道之后会不会又突然不能连,反正现在是可以的
先进root权限
然后进入sources.lis重新编辑apt源1vim /etc/apt/sources.list
12345678910111213141516171819202122232425#其他apt源#此处,笔者仅添加中科达和阿里的,其他注释掉 #中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib #阿里云deb http://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib #清华大学#deb http://mirrors ...
web89123456789101112include("flag.php");highlight_file(__FILE__);if(isset($_GET['num'])){ $num = $_GET['num']; if(preg_match("/[0-9]/", $num)){ die("no no no!"); } if(intval($num)){ echo $flag; }}
打开环境,发现检查url参数是否被设置,然后进入到判断条件的代码
然后preg_match是一个函数,用来执行一个正则表达式的匹配操作,在这个代码中是检测是否有0~9的数字
再下面一个函数intval函数是将一个变量转换为整数类型,如果遇到字符串就会转化为0
那问题来了我们该如何构造payload呢,
由于preg_match无法直接匹配数字(他只接受字符串或可被转换为字符串的值), ...
IAT HOOK原理是通过替换IAT表中的函数的原始地址从而实现HOOK的,IAT Hook 需要充分理解PE文件的结构才能完成Hook,这里就简单讲一下代码实现了
[IAT_HOOK]: https://www.cnblogs.com/LyShark/p/11766620.html “ IAT_Hook”[代码实现]: https://github.com/SHangwendada/CodeRepo
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101#include <windows.h>#include <iostream>typedef int(__cdecl* PMemcmp)(const void* buf1, co ...
Linux基础知识VPN 连接这个当时搞了好一会,首先先从hackbox中下载好vpn文件,然后放到kali里面中去
先加好代理
1source proxy.sh
然后进入root权限,再去使用
1openvpn 加上你的文件名
出现这个之后就代表你成功了,然后进行ssh连接
ssh+用户名+@+你的靶机 ssh htb-student@10.10.15.208, 然后再输入密钥就可以连接成功了
这样子就是连接成功了
系统信息12345678910111213141516171819202122232425whoami 显示当前用户名id 返回用户身份hostname 设置或打印当前主机系统的名称pwd 返回工作目录名称ifconfig 实用程序(ip)用于为网络接口分配或查看地址和/或配置网络接口参数ip Ip 是一种用于显示或作路由、网络设备、接口和隧道的实用程序netstat 显示网络状态ss 另一个用于调查套接字的实用程序ps 显示进程状态who 显示登录者env 打印环境或设置并执行命令lsblk 列出阻止设备lsusb ...
InlineHook原理介绍上次打考核赛的时候遇到的一道题,不过当时是全凭做题经验写出来的,现在正好实现一下(都是在32位下的,64位下的没有去实现)
inline hook (内联钩子) 是一种在程序运行时修改函数执行流程的技术。他通过修改函数的原始代码,将目标函数的执行路径重定向到自定义的代码段,从而实现对目标函数的拦截与修改(也就是hook)
那该如何去实现跳转呢
这里有两种方式
第一种就是用jmp,也就是相对地址的方式,
123__NewCode[0] = 0xE9; // jmp 相对偏移DWORD relativeAddr = (DWORD)fun1 - (DWORD)fun2 - 5; //计算相对地址memcpy(&__NewCode[1], &relativeAddr, 4);
也就是相当于
12jmp fun1
这种的话,就需要找合适的地方有5个字节的,如果长了,就会使后面的机器码,去形成指令去配对,从而就会导致后面的内容都会乱掉,所以我们通常使用绝对寻址的方式去实现
1234__NewCode[0] = 0xB8; // ...
题目:Lockesercet点进主函数,发现逻辑很简单
这个init是一个初始化的地方,然后这个decode就是加密的地方了,点进去
发现加密逻辑,这里还先给密钥异或了一下,动调查看dword_C543D8的值,然后写出还原密钥的代码
123456789101112131415161718#include <iostream>#include <bits/stdc++.h>using namespace std;int main() { unsigned char dword_C543D8[8] = { 0x64, 0x96, 0x50, 0x16, 0x69, 0xff, 0xbe, 0x60 }; unsigned char src[] = "IamTheKeyYouKnow"; unsigned char key[18]; for (int i = 0; i < 16; i++) { key[i] = src[i] ^ dword_C543D8[i ...