HTB Obscurity靶机实战
信息收集这里可以先设置一下hosts文件
10.10.10.168 obscure.htb
扫描端口发现开放了 8080 的web端口
页面提示有一个源码泄露
Message to server devs: the current source code for the web server is in 'SuperSecureServer.py' in the secret development directory
那我们就需要爆破目录了
使用 wfuzz
sudo wfuzz -c -z file,common.txt -u http://10.10.10.168:8080/FUZZ/SuperSecureServer.py
得到源码:
import socketimport threadingfrom datetime import datetimeimport sysimport osimport mimetypesimport urllib.parseimport subprocessrespTemplate = """HTTP/1.1 { ...
docker基本使用指南
docker 遇到的坑运行的时候不能直接用 ./ 指定当前的文件,需要 $PWD
一次性清理所有的已经关闭的容器 docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
:ro 表示只读
访问受到限制
此时目录下的文件权限
重新运行了一下
看来是文件权限的问题,也就是说docker会默认将文件权限直接复制过来,由于我之前的那个用户是pxy,而docker环境中并没有这个用户,导致就变成了1000
移除镜像docker image rm xxxx
–link 参数自动添加了环境变量
还有这个
/etc/hosts 也会更新
神奇。。运行nginx和php-fpmdocker run --name myphp-fpm -v $PWD/www:/www -d php:5.6-fpm
$ docker run --name runoob-php-nginx -p 8083:80 -d \ -v $PWD/www:/usr/share ...
汇编从入门到入土二
内存intel的CPU是采用的小端法来存储数据
在查看内存的时候,我更愿意按照这样的方式,我认为0号应该代表第一根横线,也就是认为是第一个存储单元的开始,也就是说我觉得 0~1 这个单元存放着 20H,因为这样在后续分析栈的时候比较有用
字单元:存放一个字节型数据的内存单元,也就是两个字节16位,高位放高地址,低位放低地址
数据段数据段寄存器默认为 ds
所以我们要操作内存数据的时候只需要指定偏移即可
CPU不支持直接将数据送入到段寄存器,需要有寄存器作为中转
mov bx,1000Hmov ds,bxmov [0],al
上述代码的含义:先设置ds寄存器为1000H,然后将al中的数据送往这个内存单元(所以我们要移动数据到内存的时候是需要先设置数据段的基地址的)
mov指令mov 段寄存器,寄存器mov 寄存器,段寄存器mov 内存单元,寄存器mov 寄存器,内存单元mov 段寄存器,内存单元mov 内存单元,段寄存器
但是 add 指令不能直接操作段寄存器和寄存器
数据段
AX=0,BX=0
mov ax,1mov ds,axmov ax,[0000] ;AX = ...
汇编从入门到入土一
第一、二章基础知识一个存储单元一般存储 1个字节,也就是8个二进制位
一个字为两个字节
地址总线:用来寻址,由于一根地址总线只能表示2个状态,所以一个CPU有N根地址线,则可以说这个CPU的地址总线宽度为N,这样的CPU最多可以寻找 $2^{N}$ 个内存单元
数据总线:数据总线的宽度意味着CPU一次能传输多少位数据
控制总线:控制总线的宽度决定了CPU对外部器件的控制能力
寄存器通用寄存器中,AX可以拆分为 AH和AL,如果单独使用AH或者AL,则应该看成一个独立的8位寄存器来使用,AH和AL此时是不相关的
如何寻址?
注意此时并不是操作系统中学到的分段,只是这么用罢了
一个 ‘段’ 的偏移占16位,那么一个段的长度最大为64KB
不同的段地址和偏移地址可以形成同一个物理地址
CS:IP 指向的内容就是将要执行的指令(但是CPU是怎么知道指令的长度的呢,x86是变长的,而MIPS是等长的,这个坑之后说)
基础指令 mov,add,jmp
mov指令设置寄存器的内容值,add执行加法,jmp设置cs和ip的值
四条指令完成计算2的4次方
mov ax,2add ax,axadd ax, ...
代码审计初尝
任意文件删除文件删除函数只考虑到了白名单路径,但是没有想到 ../
function del_file(){ $path = post('path'); $path = str_replace('../','',$path); $dir[0] = 'data/backup/'; $dir[1] = 'images/'; $dir[2] = 'resource/'; $flag = false; for($i = 0; $i < count($dir); $i ++) { if(substr($path,0,strlen($dir[$i])) == $dir[$i]) { $flag = true; } } if($flag) { if(unlink($path)) { $result = 1; } } echo isset($result) ? $result : 0;}
根目录新建 aaaa.txt然后发送请求
成功删除文件
后台注入延时注入or if(le ...
每天一个Linux命令-xxd
xxd基本选项
-a : 它的作用是自动跳过空白内容,默认是关闭的
-c : 它的后面加上数字表示每行显示多少字节的十六进制数,默认是16字节。
-g : 设定以几个字节为一块,默认为2字节。
-l : 显示多少字节的内容。
-s : 后面接【+-】和address.加号表示从地址处开始的内容,减号表示距末尾address开始的内容。
-ps: output in postscript plain hexdump style
xxd 是有单位的,如
和
很显然其中一个 0x100 是 256个字节,也就是16行咯
-g 选项的含义默认是两个字节一组
$ xxd -s -100 -l 0x20 monster.jpg00002601: eeae ee33 b2ae ae9b b979 0eb8 e171 a040 ...3.....y...q.@00002611: 2146 78f7 d5a0 fef0 79e7 5135 fbf5 7f48 !Fx.....y.Q5...H
通过 -g 变为一个字节一组
$ xxd -s -100 -l 0x20 -g 1 monste ...
safeharbor靶机渗透
信息收集端口扫描:
80端口运行了一个web,万能密码直接登陆
查看URL类似文件包含
测试的时候发现包含文件的时候不需要加php,似乎有一个白名单的限制,因为包含 /etc/passwd 没有成功
包含了 account.php 找到了数据库的用户和密码
<?phpsession_start();if(is_null($_SESSION["loggedin"])){ header("Location: /");}$dbServer = mysqli_connect('mysql','root','TestPass123!', 'HarborBankUsers');$user = $_SESSION["username"];if($_POST['x']){ $oldPass = mysqli_real_escape_string($dbServer, $_POST['oldpass']); $newPass = mysqli_real_escape_string($dbServer, $_POST['newpass'] ...
upload-lab做题笔记
Pass-20这个算是逻辑漏洞了reset 函数重置当前指针, end指向最后一个元素,这个最后并不是指最后的,而是最后加入数组的元素
php > $a = array(1,2,3,4,5);php > current($a);php > echo current($a);1php > echo next($a);2php > echo current($a);2php > echo end($a);5php > echo current($a);5php > echo reset($a);1php > echo current($a);
于是这样就可以理解了
关键就在于用户可以控制这个文件名
$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];if (!is_array($file)) { $file = explode('.', strtolower($file));}var ...