代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计QQ 


- 挖掘方法

代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_02- 数据库操作性 函数 写到配置环境 (暂时忽略)


代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_03


PHP mysql_real_escape_string() 函数

  • 转义 SQL 语句中使用的字符串中的特殊字符
  • 下列字符受影响:

\x00
\n
\r
\

"
\x1a

  • 如果成功,则该函数返回被转义的字符串。
    如果失败,则返回 false。
    代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_04

PHP addslashes() 函数

  • ——返回在 预定义字符 之前 添加反斜杠 的 字符串。
  • 预定义字符是:

单引号(’)
双引号(")
反斜杠(\)
NULL

提示:
可用于 为存储 在 数据库 中的 字符串以及数据库查询语句 准备字符串。

注释:
PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。
所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。
遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。 代码审计——sql注入漏洞常规挖掘分析/实战_sql_05


PHP htmlentities() 函数

  • ——把字符转换为 HTML 实体。
    提示:
    要把 HTML 实体转换回字符,请使用 html_entity_decode() 函数。
    请使用 get_html_translation_table() 函数 来返回 htmlentities() 使用的翻译表。代码审计——sql注入漏洞常规挖掘分析/实战_sql_06代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_07代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_08

PHP htmlspecialchars() 函数

  • ——把一些预定义的字符转换为 HTML 实体
预定义的字符是:

& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 &lt;
> (大于) 成为 &gt;

代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_09

代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_10代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_11代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_12


PHP strip_tags() 函数

  • ——剥去字符串中的 HTML、XML 以及 PHP 的标签。

注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。

注释:该函数是二进制安全的。

代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_13
代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_14


PHP md5() 函数

  • ——md5() 函数计算字符串的 MD5 散列。

  • ——md5() 函数使用 RSA 数据安全,包括 MD5 报文摘要算法。

代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_15代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_16


PHP sha1() 函数

  • ——sha1() 函数计算字符串的 SHA-1 散列。

  • ——sha1() 函数使用美国 Secure Hash 算法 1

代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_17代码审计——sql注入漏洞常规挖掘分析/实战_sql_18

PHP intval() 函数

  • ——函数用于获取变量的整数值。

  • ——通过使用指定的进制 base 转换(默认是十进制)
    返回变量 var 的 integer 数值。

  • —— intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。

代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_19代码审计——sql注入漏洞常规挖掘分析/实战_sql_20

# 适用人群

  • 安全开发
  • 程序员
  • 渗透测试人员
    代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_21代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_22代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_23代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_24代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_25
  • id=1 写死
  • 可操控 $_POST 接收
    代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_26
  • 安全函数 查看是否严谨
  • 注入 是否进行限制
  • 来判断 sql注入漏洞 在这个地方 是否存在

# 数据库监控

  • 监控插件 监控sql操作语句词型
  • 访问 网站特殊地址 查看数据库操作语句 执行在 哪个地方
  • 追寻代码 文件地址
  • 跟踪 代码是否可控 绕过
    代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_27代码审计——sql注入漏洞常规挖掘分析/实战_sql_28代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_29代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_30
  • 分析 哪个语句 跟当前 访问页面 参数相关
  • 尝试 更改参数 追加确认

代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_31

  • 作为全局搜索代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_32
  • 如果不确定 就打开一个 注释下
    代码审计——sql注入漏洞常规挖掘分析/实战_sql_33
  • 更改参数 查看页面状态

代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_34

  • 语句注释 后 页面报错
  • 确认是 当前页面 代码文件

代码审计——sql注入漏洞常规挖掘分析/实战_sql_35

  • 注意传值方法
  • 追踪该方法有没有相关 绕过 过滤 条件
  • 若没有 可能存在注入点

#实战挖掘#

代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_36代码审计——sql注入漏洞常规挖掘分析/实战_sql_37代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_38代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_39

  • 变量全局 搜索代码审计——sql注入漏洞常规挖掘分析/实战_sql_40代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_41代码审计——sql注入漏洞常规挖掘分析/实战_sql_42
  • 访问相关文件代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_43代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_44
  • 传入 验证绕过 所需 参数
  • 并且开启 数据库监控
  • 补足 验证条件
    代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_45
    代码审计——sql注入漏洞常规挖掘分析/实战_sql_46代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_47代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_48代码审计——sql注入漏洞常规挖掘分析/实战_sql_49代码审计——sql注入漏洞常规挖掘分析/实战_sql_50
  • 构造 ?id=1 order = 1 &u …

代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_51

  • %23 -----> #
    代码审计——sql注入漏洞常规挖掘分析/实战_sql_52

  • 盲注测试

代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_53代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_54

  • 构造 ?id=1 union select 1,2,3 &u …代码审计——sql注入漏洞常规挖掘分析/实战_sql_55
  • 页面 注入 测试
    代码审计——sql注入漏洞常规挖掘分析/实战_php代码审计_56
  • 联合注入 失败
  • 测试盲注

代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_57代码审计——sql注入漏洞常规挖掘分析/实战_渗透测试_58

  • 0.5 ---->延时2s

  • 一般延时注入 要比 联合注入 通用性好

# 总结

  • 访问敏感页面

  • 监控数据库

  • 查找执行出处函数 方法

  • 监控 出处 处 变量

  • 追踪变量 是否过滤

  • sql是否存在

  • 关键字搜索 ——任何漏洞挖掘 比较常用

  • 数据库监控—— 类似于 SQL注入这种相应