Linux提权汇总
最近在接触渗透,发现提权是一项必不可少的内容,特新建一篇记录使用过的提权方法
使用suid vim.basic文件实现提权要求:vim.basic文件有suid权限
chmod u+s /usr/bin/vim.basic可以设置
先adduser test1一个普通权限用户,开始提权!
通过以下命令可以找到存在suid权限的文件123find / -user root -perm -4000 -print 2>/dev/null #常用find / -perm -u=s -type f 2>/dev/nullfind / -user root -perm -4000 -exec ls -ldb {} \;
可用于提权的文件有
nmapvimfindbashmorelessnanocp
利用vim提权的思路是修改etc/passwd文件,为自己添加一个有root权限的用户
passwd文件用户格式为:用户名:密码:uid:gid:注释:home目录:用户的shell
这边可以看看root用户的格式root:x:0:0:root:/root:/bin/ ...
春秋云境-Hospital
概述在这个场景中,你将扮演一名渗透测试工程师,被派遣去测试某家医院的网络安全性。你的目标是成功获取所有服务器的权限,以评估公司的网络安全状况。该靶场共有 4 个 flag,分布于不同的靶机。
架构
内网地址
Host or FQDN
简要描述
172.30.12.5
Web01
Spring + Shiro
172.30.12.6
Server02
Nacos
172.30.12.236 172.30.54.179
Web03
Fastjson
172.30.54.12
Web04
Grafana + Postgresql
前期信息打点不知道为什么fscan最新版扫不出来8080端口,改成了1.8.2发现可以了
fscan扫描得到如下内容:123456789101112131415161718D:\PenetrationW>.\fscan64 -h 39.99.231.151 ___ _ / _ \ ___ ___ _ __ __ _ ___| | __ / /_\/_ ...
ctfshow-命令执行
补一下这个什么命令执行,看看大佬的wp有什么奇妙的姿势
PS: 带二级标题的姿势是我觉得不错的知识
发这篇博客时,发现只能显示2000行,我以为每篇博客极限就是2000行左右了,再多就显示不了了,就把后面几道题单独放吧(这是一开始的设想)
加了一篇之后发现在原来的地方还是断掉了,没有显示,才发现是因为类似于1`{#IFS}=3`这种会导致博客无法正常显示,可以选择用3个反引号而不是一个来绕过或者将#变成\#
Web29(通配符)1234567891011 <?phperror_reporting(0);if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); } }else{ highlight_file(__FILE__);}
eval(string $code)把字符串$c作为PHP代码执 ...
春秋云境-Initial
写在最前面圈圈表示你太菜了,并反手向你丢了7个沙砾(qwq)
钱队一直说渗透很重要,这次就用这个最简单的靶场来进行正式的入门(希望不会在明年7月留下遗憾)
开始!flag1题目给出了一个ip地址39.101.193.135,我们可以使用nmap来看看他开启了那些端口,命令为1sudo nmap --min-rate 10000 39.101.193.135
这段命令是以最小速率 10000 对全部端口(1-65535)进行扫描,10000 是权衡的结果,数字过大扫描速度快,但容易遗漏端口,数字过小则扫描时间过长,经验表明 10000 就是扫描的合适速度。-p 是端口参数,-p- 表示对所有端口进行扫描。扫描结果如下:1234567891011┌──(root㉿kali)-[~/Desktop]└─# sudo nmap --min-rate 10000 39.101.193.135 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-21 21:49 EDTNmap scan report for 39.101.19 ...
ctfshow-SSRF
继续拿题玩玩我的vps,虽然这些题以前没有vps的时候也做出来了,但是这一次重温还是让我完善了自己的vps配置(Nginx原来要改配置文件才能执行PHP文件),总的来说还是很有收获
开胃小菜SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
相关函数和类
函数
作用
file_get_contents()
将整个文件或一个url所指向的文件读入一个字符串中
readfile()
输出一个文件的内容
fsockopen()
打开一个网络连接或者一个Unix 套接字连接
curl_init()
初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close() 函数使用
fopen()
打开一个文件文件或者URL
PHP原生类SoapClient
在触发反序列化时可导致SSRF
...
ctfshow-文件包含
以前没vps一直不敢做文件包含,一遇到远程就自闭,碰巧发现华为云有超绝性价比服务器,立买,爽打ctf,来老地方继续练手
web78源码:1234567 <?phpif(isset($_GET['file'])){ $file = $_GET['file']; include($file);}else{ highlight_file(__FILE__);}
filter读文件payload: ?file=php://filter/convert.base64-encode/resource=flag.php
web7912345678 <?phpif(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file);}els ...
ctfshow-nodejs
对于javascript和node.js都实在不太懂,因此打算通过看大佬的博客学习相关知识,顺便刷刷这几道题
再看看nodejs官方文档
web334JS 大小写特性题目描述处有源码可以直接下载
user.js12345module.exports = { items: [ {username: 'CTFSHOW', password: '123456'} ]};
login.js123456789101112131415161718192021222324252627282930313233var express = require('express');var router = express.Router();var users = require('../modules/user').items; var findUser = function(name, password){ return users.find(function(ite ...
python原型链污染
这个知识点应用的范围比较小,仅当题目中出现utils的merge或Pydash模块中的set和set_with函数才会用上。dasctf考了好多次,就来学习下
前置知识回顾一下python的类与继承
在Python中,定义类是通过class关键字,class后面紧接着是类名,紧接着是(object),表示该类是从哪个类继承下来的,所有类的本源都是object类
可以自由地给一个实例变量绑定属性,像js
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把类内置的属性绑上
注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身
当我们定义了一个类属性后,这个属性虽然归类所有,但类的所有实例都可以访问到
判断一个变量是否是某个类型可以用isinstance()判断
通过继承关系的利用python的原型链污染和nodejs的原型链污染很像,一样是通过给父类属性赋值使得每一 ...
ctfshow-jwt
开个栏目记录一下ctfshow刷题,毕竟大几百,少做一题都感觉心在滴血,希望能借此走出新手村吧
jwt介绍了解jwt就是json web token,简单来说就是一种登录凭证,基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息(不像传统的session认证)。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利
JWT鉴权的流程是这样的:
用户使用用户名密码来请求服务器
服务器进行验证用户的信息
服务器通过验证发送给用户一个token
客户端存储token,并在每次请求时附送上这个token值
服务端验证token值,并返回数据
这个token必须要在每次请求时传递给服务端,它应该保存在请求头里
构成JWT由三段信息构成,将这三段信息的文本用.连接在一起就成了JWT字符串
另外JWT事实上就是经过base64加密的json,通过base64解密可以直观看到前两段的具体内容,不过还是更推荐官方网站,支持更多操作https://jwt.io
第一部分被称为头部header,头部承载了 ...
反序列化-python向
pickle是python中用来进行序列化和反序列化的模块,pickle.dumps()可以将对象序列化字符串,而pickle.loads()可以将字符串序列化成对象,pickle不仅可以读写字符串,也可以读写文件:只需要采用pickle.dump()和pickle.load()。
常规手段简单利用反序列化漏洞是通过class的reduce方法,这个方法在pickle反序列化的时候会被自动执行,reduce干了这样一件事情:
取当前栈的栈顶记为args,然后把它弹掉。
取当前栈的栈顶记为f,然后把它弹掉。
以args为参数,执行函数f,把结果压进当前栈。
简单说来就是reduce把返回的元组的第一个元素作为函数,第二个元素作为函数的参数来执行这个函数。一种非常流行的攻击方式就是返回一个恶意元组。
12def __reduce__(self): return (os.system,("ls /"))
其底层的编码方法就是利用了R指令码,要么返回一个字符串,要么返回一个元组,后者对我们而言更有用。
reduce函数bypass有一种过滤方式,没有进制R指令码, ...