整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

服务器防黑加固丨Linux提权的4种方式,你知道几个?

你在攻击受害者的电脑时即使你拥有了一个shell,依然可能会有一些拒绝执行指令的限制。

为了获得目标主机的完整控制权限,你需要在未授权的地方绕过权限控制。

这些权限可以删除文件,浏览私人信息,或者安装并非受害者希望的软件例如计算机病毒。

Metasploit 拥有各种使用不同技术的exploits在受害者电脑上尝试获取系统级权限。

除此之外,这里还有一些在linux下使用的脚本。当你尝试在目标机器上提升权限时可能会很有用。

通常它们的目的是枚举系统信息而不是给出具体的vulnerabilities/exploits。

这种类型的脚本将会为你节省很多时间。

在Linux下使用payload并且开启反向连接的multi/handler,一旦你侵入了受害者的电脑马上使用下列脚本提升权限。

LinEnum

可以列举系统设置并且高度总结的linux本地枚举和权限提升检测脚本

隐私访问:判断当前用户是否能够用空口令使用sudo命令,root用户的家目录能否访问。

系统信息:主机名,网络详情,当前IP等等。

用户信息:当前用户,列出所有包含uid/gid的用户信息,列出有root权限的用户,检查密码hash是否保存在/etc/passwd。

内核和发行版详细信息

1Git clone https://github.com/rebootuser/LinEnum.git

悬镜-防黑加固

一旦你从上面的链接下载了这个脚本,你就可以在终端中简单的通过./LinEnum.sh来运行它。

随后它将存储所有获取的数据和系统详细信息。

悬镜-防黑加固

Linuxprivchecker

枚举系统设置和执行一些提升权限的检查。它由python实现,用来对被控制的系统提供建议的exploits。

在下面的链接下载

http://www.securitysift.com/download/linuxprivchecker.py

下载完后在终端中只需要使用 python linuxprivchecke.py 命令就可以使用,它将会枚举文件和目录的权限和内容。

这个脚本和LinEnum工作方式一样而且在关于系统网络和用户方面搜寻的很详细。

悬镜-防黑加固

Linux Exploit Suggester

它基于操作系统的内核版本号。这个程序会执行“uname -r”来得到系统内核版本号。

然后返回一个包含了可能exploits的列表。

另外它还可以使用“-k”参数手工#指定内核版本。

它是一个不同于以上工具的Perl脚本。

使用下列命令下载这个脚本。

1 git clone https://github.com/PenturaLabs/Linux_Exploit_Suggester.git

悬镜-防黑加固

如果你知道内核版本号就可以在终端中直接使用下列命令:

1./Linux_Exploit_Suggester.pl -k 3.5

如果不知道就输入./LinuxExploitSuggester.pl uname –r 来获得内核版本号然后使用上面的命令并把版本号替换成你自己的。

然后它就会给出建议的exploits列表。

悬镜-防黑加固

Unix-Privesc-checker

在UNIX系统上检测权限提升向量的shell脚本。它可以在UNIX和Linux系统上运行。

寻找那些错误的配置可以用来允许未授权用户提升对其他用户或者本地应用的权限。

它被编写为单个shell脚本所以可以很容易上传和执行。它可以被普通用户或者root用户执行。

当它发现一个组可写(group-writable)的文件或目录时,它只标记一个问题如果这个组包含了超过一个的非root成员。

使用下列命令下载

1Git clone https://github.com/pentestmonkey/unix-privesc-check.git

把它解压然后执行

1unix-privesc-check standard

悬镜服务器

你可以通过我提供的这些图片来更好的学习我是如何使用这些工具的。也可以使用另一个命令达到相同的目的。

1unix-privesc-check detailed

01

以上信息来源:安全客

原文链接地址:http://bobao.360.cn/learning/detail/3230.html


置顶悬镜安全实验室公众号,给你最新,最有料的资讯,安全技术干货。

有料丨有趣丨行业丨观点丨

Razon语法

使用@符号后接C#或VB.NET语句的方式。

基本规则

1)变量

@后直接变量即可

2)代码块

为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中

3)“+”

对于加号连接的两个字符串变量或属性,使用小括号将他们括起来

4)插入HTML或文字

每一行前面加上“@:”

5)使用注释

使用@*和*@将要注释的部分包起来

6)用@@在页面上显示@

@using

在一个View中引入此页所需程序集的命名空间。

还可以在web.config中配置命名空间,不过将对所有的View起作用。

<system.web.webPages.razor>
 <pages pageBaseType="System.Web.Mvc.WebViewPage">
 <namespaces >
 <add namespace="System.Web.Mvc"/>
 <add namespace="WebApplication.Models"/>
 </namespaces>
 </pages>
</system.web.webPages.razor>

@model

指定页面所用模型的类型。

@help

使用自定义函数。这种方法有可能将一部分数据处理逻辑放到了页面中,所以尽量不用。

例子:

定义函数

@helper CheckHelp(int i1,int i2)
 {
 if (i1 > i2)
 {
 @i1
 }
 else
 {
 @i2 
 }
	}

使用函数

<h3>@CheckHelp(10,1111)</h3>

@functions

定义一个方法供当前页使用,若使用IHtmlString作为方法的返回值,则可将其回传给当前页。

例子:

定义函数

@functions 
 {
 public int CheckFunc(int i1, int i2)
 {
 if (i1 > i2)
 {
 return i1;
 }
 else
 {
 return i2;
 }
 }
	}

使用函数

<h3>@CheckFunc(10, 12111)</h3>

2 HTML辅助方法

使用方式为@后跟辅助方法,注意没有“;”,否则分号也会显示在页面上。

2.1输出超链接

ActionLink

有几个重载方法,选参数最多的一个

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, string protocol, string hostName, string fragment, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes);

linkText:超连接名称

actionName:操作名称

controllerName:控制器名称

protocol:URL 协议,如“http”或“https”。

hostName:URL 的主机名

fragment:URL 片段名称(定位点名称)

routeValues:路由参数

htmlAttributes:HTML 特性

例:

@Html.ActionLink("一个连接", "About")

对应的html代码

<a href="/MVCPointApp/Home/About">一个连接</a>

RouteLink

有几个重载方法,选参数最多的一个

public static MvcHtmlString RouteLink(this HtmlHelper htmlHelper, string linkText, string routeName, string protocol, string hostName, string fragment, RouteValueDictionary routeValues, IDictionary<string, object> htmlAttributes);

routeName:路由名称

其他参数同ActionLink

2.2输出表单

还可以使用强类型的辅助方法,一般是以For结尾。

例子

1)显示属性验证信息

控制器

public ActionResult TestViewData(ModelF mf)
 {
 ViewData.Model = new ModelF { Field = mf.Field, Field2 = mf.Field2 };
 return View("Index");
 }

模型

public class ModelF
 {
 public string Field { get; set; }
 [Range(typeof(DateTime), "1/1/2018", "1/1/2019")]
 public DateTime Field2 { get; set; }
	}

视图Index.cshtml

@using (Html.BeginForm("TestViewData", "Home"))
 {
 @Html.ValidationSummary()
 <input id="filed" name="Field2" type="text" placeholder="请输入" value="" />
 <input type="submit" value="提交" />
	}

测试,输入1/1/2020,执行结果为:

为了能显示字段的中文名称使用DisplayName

public class ModelF
 {
 public string Field { get; set; }
 [Range(typeof(DateTime), "1/1/2018", "1/1/2019")]
 [DisplayName("[这个字段]")]
 public DateTime Field2 { get; set; }
	}

执行结果为

2)设置标签特性值

由于class是C#保留关键字,因此设置class特性时要使用@

@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { @class = "loginForm" }))
{ }

HTML辅助方法会将下划线渲染为连字符,因此要表达含有连字符的特性,那么使用下划线

Html.BeginForm("Login", "Account", FormMethod.Post, new { vla_input=true})

2.3加载分部视图

3 Url辅助方法

返回URI字符串

4 视图定位

· 视图放在Views文件夹下

· Views文件夹的子文件夹名称为控制器名称

· 视图名称可以是控制器操作方法名称也可以不是,若不是控制器操作方法名称,控制器返回视图时要指定视图名。

· Views文件夹下的Shared保存多个控制器共享的视图

视图定位规则是,先在Views文件夹中找对应控制器及控制器方法的视图,没有找到就到Shared文件夹下找。

5页面布局

· Views文件夹下_ViewStart.cshtml文件指定默认的模板,这个视图先于任何试图运行。

· 使用WebPageBase.Layout加载布局模板

· 使用@Html.Partial帮助方法加载部分视图

· 使用@section定义指定内容的节,然后使用WebPageBase.RenderSection加载指定的节,使用public HelperResult RenderSection(string name, bool required);required=true,那么节必须已经定义,否则抛异常。

· @Styles.Render和@Scripts.Render捆绑和压缩css、js

捆绑和压缩css与js

App_Start文件夹下BundleConfig类中

public static void RegisterBundles(BundleCollection bundles)
{
//多个文件用逗号分隔
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
 "~/Scripts/jquery.cookie.js",
 "~/Scripts/jquery.hoverDelay.js",
 "~/Scripts/jquery.pagination.js",
 "~/Scripts/jquery.form.js",
 "~/Scripts/json2.js",
 "~/Scripts/hydss.js",
	 "~/Scripts/hydss.utility.js"));
	
bundles.Add(new StyleBundle("~/Content/css/base").Include(
 "~/Content/css/common.css",
 "~/Content/css/dev.css"));
}

页面中使用已经捆绑并压缩的css和js,使用规则是:css文件置顶、js文件置地

@Styles.Render("~/Content/css/base")
@Scripts.Render("~/bundles/jqueryval")

覆盖默认布局模板

使用WebPageBase.Layout加载模板覆盖_ViewStart.cshtml文件指定默认的模板

例如:

_ViewStart.cshtml文件如下

@{
 Layout = "~/Views/Shared/_Layout.cshtml";
}

Index.cshtml文件如下

@{
 ViewBag.Title = "Home Page";
 Layout = "~/Views/Shared/_LayoutOther.cshtml";
}
<div class="jumbotron">
	@*具体内容*@
</div>

如果没有Layout = "~/Views/Shared/_LayoutOther.cshtml";这行代码,那么此视图文件将使用_ViewStart.cshtml中的_Layout.cshtml这个模板,但这里Index.cshtml文件使用的是另一个模板_LayoutOther.cshtml

使用实例

实际项目中可能会有不止一种布局,针对多种布局,既能满足这种需求要能尽可能地代码复用。

创建父模板_Layout.cshtml

<!DOCTYPE html>
<html>
<head>
 <title>@ViewBag.Title</title>
 <link rel="icon" href="~/favicon.ico" />
 <link rel="shortcut Icon" href="~/favicon.ico" />
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta http-equiv="imagetoolbar" content="no" />
 <meta name="apple-mobile-web-app-capable" content="yes" />
 <meta name="keywords" content="词1 词2" />
 <meta name="description" content="网站的主题" />
 @Styles.Render("~/Content/css/base")
	@Scripts.Render("~/bundles/jquery")
	@*加载HeaderSection节*@
 @RenderSection("HeaderSection", false)
</head>
<body>
 @*加载主体*@
 @RenderBody()
 <img id="loading" style="display:none;position:fixed;top:50%;left:50%;" src="@Url.Content("~/Content/images/loading.gif")" title="加载中..." alt="加载中..." />
 <a href="javascript:void(0);" id="backToTop" title="回到顶部"></a>
 @*加载脚本*@
 @Scripts.Render("~/bundles/jqueryval")
 @*加载FooterSection节*@
	@RenderSection("FooterSection", false)
</body>
</html>

创建子模板_LayoutOther.cshtml

@{
 Layout = "~/Views/Shared/_Layout.cshtml";
}
@*定义HeaderSection节*@
@section HeaderSection{
 @RenderSection("HeaderSection", false)
}
@*加载页头*@
@Html.Partial("_header")
@*加载主体*@
@RenderBody()
@*加载页脚*@
@Html.Partial("_footer")
@*定义FooterSection节*@
@section FooterSection{
 @RenderSection("FooterSection", false)
}

分析

_LayoutOther.cshtml视图使用了_Layout.cshtml视图文件,_Layout.cshtml中@RenderSection来加载FooterSection和HeaderSection节,而这个节定义在_LayoutOther.cshtml中,不过没有具体内容;_LayoutOther.cshtml中定义的FooterSection和HeaderSection又各自加载其他也面定义的FooterSection和HeaderSection节,所以可以在使用_LayoutOther.cshtml中灵活定义FooterSection和HeaderSection节,可以想象这样一个场景,每个页面都需要加载js文件,而他们既有共用的js文件,又有非共用的js文件,那么可以在使用_LayoutOther.cshtml的视图中定义section 节来加载只有此页面使用的js文件,而把公共的js文件放在_Layout.cshtml视图文件中

例如Index.cshtml定义@section FooterSection{

@Scripts.Render("~/bundles/index")

}

这个节加载只供Index.cshtml这个页面实用的js,这样其他不需要这个js的页面就不必加载这个js,从而达到减少页面加载文件的目的进而优化了页面。

6加载分部视图

1)控制器返回分部视图

配合@Html.Action方法使用控制器操作返回分部视图

视图中使用@Html.Action("TestPy"),控制器如下

public ActionResult TestFrom()
 {
 return PartialView("TestPy");
 }

或者在视图中使用@{Html.RenderAction("TestPy");},注意这种内联视图和Html.Action使用的区别。

2)使用html帮助方法

使用Html.Partial直接调用部分视图而不是通过控制器操作方法。

@Html.Partial("_header")

7视图向控制器传递数据

1)使用表单向控制器传递数据

视图代码

@using (Html.BeginForm("TestFrom", "Home"))
 {
 <input id="UserName" name="UserName" type="text" placeholder="请输入用户名" value="" />
 <input id="Password" name="Password" type="password" placeholder="请输入密码" value="" />
 <input type="submit" value="提交"/>
	}

控制器代码

public ActionResult TestFrom(FormCollection c)
 {
 var un = c["UserName"];
 var pw = c["Password"];
 ViewBag.Un = un;
 ViewBag.Pw = pw;
 return PartialView("TestPy");
 }

8自定义html辅助方法

返回值类型为IHtmlString,IHtmlString 是一个接口

 public static IHtmlString HYSubString(this HtmlHelper helper, string param)
 {
	//字符串
	String ret =......
 return helper.Raw(ret);
 }

参考:

1. Jess Chadwick/Todd Snyder/Hrusikesh Panda,徐雷/徐扬

译。ASP.NET MVC4 Web编程

2. Jon Galloway/Phil Haack/Brad Wilson/K. Scott Allen,孙远帅/邹权译 ASP.NET MVC4 高级编程(第四版)

3. ASP.NET MVC4开发指南,黄保翕

4. ASP.NET MVC4框架揭秘,蒋金楠

5. https://www.asp.net/mvc

击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。

本文3891字,阅读约需10分钟

Hi,大家好,我是来输送技能的CoCo。Python近年来成为编程领域中的佼佼者,得到了迅猛的发展。作为一门强类型的动态脚本语言,JavaScript与Python其实非常相似,无论是语法思维上还是内置API上,对于有Python基础的我们来说,学习JavaScript非常的友好。


在上一篇JS系列文章,主要对Web基础知识和JS进行了简单的介绍。今天介绍JS的语法,了解JS语法的时候,可以顺带联想一下Python的语法喔~


JavaScript基本语法


JS注释

学习一门语言,一般先学习语言的注释,因为注释是给我们自己看,也是给其他编码伙伴看,添加注释有利于我们以后阅读代码。


(1) 注释的作用

添加注释可以起到以下2种作用:

  • 解释某些语句的作用和功能:使程序更易于理解,通常用于代码的解释说明。
  • 暂时屏蔽某些语句:使浏览器对其暂时忽略,等需要时再取消注释,这些语句就会发挥作用,通常用于代码的调试。

(2) JS注释的分类

  • 单行注释://用于单行注释。
  • 多行注释:/*…*/用于多行注释。多行注释符号分为开始和结束两部分,即在需要注释的内容前输入/*,同时在注释内容结束后输入*/表示注释结束。

编写如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS基本语法-ITester软件测试小栈</title>
</head>
<body>
<script type="text/javascript">
     // 我是一个单行注释
    alert('HelloWorld!')
    /*
    我是一个多行注释
   */
   /*
    注释的代码不会执行
    alert('我是一个弹出层')
    alert('我是一个弹出层')
    */
    alert('ITester软件测试小栈')
</script>
</body>
</html>


在浏览器打开页面,效果如下所示:


JS执行顺序

JavaScript程序按照在HTML文件中出现的顺序逐行执行,如果需要在整个HTML文件中执行(如函数、全局变量等),最好将其放在HTML文件的<head>…</head>标记中。

编写如下代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS基本语法-ITester软件测试小栈</title>
</head>
<body>
<p>
JavaScript 能够直接写入 HTML 输出流中:
</p>
<script>
document.write("<h1>标题</h1>");
document.write("<p>这是段落。</p>");
</script>
<p>
只能在 HTML 输出流中使用 <strong>document.write</strong>。
如果您在文档已加载后使用它(比如在函数中),会覆盖整个文档。
</p>
</body>
</html>


在浏览器打开页面,效果如下所示:


空格和换行


在JavaScript中会忽略程序中的空格、换行和制表符,除非这些符号是字符串或正则表达式中的一部分。JavaScript中的换行有“断句”的意思,即换行能判断一个语句是否已经结束。


⚠️:与Java语言不同,JavaScript并不要求必须以分号 ;作为语句的结束标记。最好的代码编写习惯是在每行代码的结尾处加上分号,这样可以保证代码的准确性。


JS输出语句


JavaScript 可以通过不同的方式来输出数据:

window.alert() :弹出警告框。

document.write(): 将内容写到 HTML 文档中。

console.log() :向浏览器的控制台输出。


编写如下代码:

<script>
//控制浏览器弹出一个警告框
window.alert('HelloWorld!');
//向浏览器输出一个内容
document.write('ITester软件测试小栈');
//向控制台输出一个内容
console.log('ITester');
</script>


在浏览器打开页面,效果如下所示:


JS常量和变量

常量:在编程语言中,一般固定值称为常量。如数字(520)、字符串(ITester)。

变量:变量用于存储数据值,JavaScript 使用关键字 var 来定义变量, 使用等号来为变量赋值。


⚠️注意:HTML并不区分大小写,但JavaScript对字母大小写是敏感的,需要严格区分字母大小写。在输入语言的关键字、函数名、变量以及其他标识符时,都必须采用正确的大小写形式。例如,变量username与变量userName是两个不同的变量。


JS标识符、关键字、保留字

JavaScript 关键字用于标识要执行的操作。和其他任何编程语言一样,JavaScript 保留了一些关键字为自己所用。

(1) 标识符

JavaScript 标识符(Identifier)包括变量名、函数名、参数名和属性名。

合法的标识符应该注意以下强制规则:

  • 第一个字符必须是字母、下划线(_)或美元符号($);
  • 不能是数字开头;
  • 除了第一个字符外,其他位置可以使用 Unicode 字符。
  • 不能与 JavaScript 关键字、保留字重名。


(2) 关键字

关键字是JavaScript 语言内部使用的一组名称,用户不能自定义同名的标识符。JavaScript关键字如下所示:

break

delete

if

this

while

case

do

in

throw

with

catch

else

instanceof

try


continue

finally

new

typeof


debugger

for

return

var


default

function

switch

void



(3) 保留字

保留字是 JavaScript 语言内部预备使用的一组名称,是为 JavaScript 升级版本预留备用的。JavaScript保留字如下所示:

abstract

double

goto

native

static

boolean

enum

implement

package

super

byte

export

import

private

synchronized

char

extends

int

protected

throws

class

final

interface

public

transient

const

float

long

short

volatile


JavaScript小实例


实例1


使用JavaScript代码编写一个欢迎访问弹出对话框,同时访问网页时显示当前系统时间。

编写代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS实例-ITester软件测试小栈</title>
</head>
<body>
<script type="text/javascript">
    var now =new Date();  //创建当前的日期对象
    var hour=now.getHours(); //获取小时数
    var min=now.getMinutes(); //获取分钟数
    alert("您好!现在是"+hour+":"+min+"\r欢迎访问ITester软件测试小栈!");
</script>
</body>
</html>


在浏览器打开页面,效果如下所示:


实例2


使用JavaScript代码编写一个欢迎访问弹出对话框,点击按钮显示昵称。

编写代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS实例-ITester软件测试小栈</title>
<body>
<p>点击这个按钮,来调用带参数的函数。</p>
<button onclick="myFunction('CoCo','ITester软件测试小栈!')">点击这里</button>
<script>
function myFunction(name,platform)
{
alert("欢迎" + name + ", 访问 " + platform);
}
</script>
</body>
</head>
</html>

在浏览器打开页面,效果如下所示:


以上就是今天的分享,如果大家想要获取今天以及后续的JS代码,可以在ITester软件测试小栈微信公众号后台回复“JS代码”,持续更新JavaScript系列。


更多系列文章

敬请期待