scrapy 浅分析(一)

0x00.前言

相信大家都用过python的scrapy框架写给爬虫。然后就想看看这个框架的简单执行流程。

0x01.大体架构

官方架构图如下

architecture

图大体架构很清晰,实际以例子来看看,一般我们的爬虫以如下代码开始运行(命令行是一样的)

1
2
3
from scrapy import cmdline

cmdline.execute("scrapy crawl xxx".split())

flask v0.1源码简单分析

0x00.前言

想学习python的flask,看了《FlaskWeb开发:基于Python的Web应用开发实战》这本书,觉得很OK👌。之前彭师兄分析过flask v0.1的源码,听说代码不长,加之网上解释甚多,所以自己也想看看,就其本身,本文无意义,有错误更是可能,只是记录而已。

0x01.获取

第一步获取git clone https://github.com/pallets/flask.git,这是最新版本的

第二步 git tag看版本

第三步git reset --hard xx回退到对应版本

最后是这样

54

主要内容在flask.py文件里面

无题(一)

这次没有主题,只是记录一下最近看到的,所以文章会很短。2018,先从胡说八道开始…

0x00 一次惊叹 linux中的通配符

关于linux的通配符有好几种

1
2
3
4
5
6
7
8
通配符
它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通配符有几下几种:
*:匹配任意多个字符
?:匹配任意一个字符
[...]:匹配中括号内出现的任意一个字符
[!...]:不匹配中括号内出现的任意一个字符

一般出现在要shell命令或脚本中,匹配特定的文件名

上次有提到过*,这里是?,linux中的通配符可以用于匹配相应的任意字符,所以可以用此在命令执行中绕过被pass的字符。

0x01 一次实验 UNLINK与file_Put_Contents

几个星期前新测的,来源于某圈主提的一个问题,一开始有人回答了Linux下的,所以就没测,实际上windows下还有几种。比如截断,并加上通配符等…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
//windows环境
$filename=__DIR__.'///4.php';
$filename1=__DIR__.'/5.php/.';
echo $filename."</br>".$filename1;
$data='<?php phpinfo(); ?>';
file_put_contents($filename,$data);
//可以加入$data到文件中
file_put_contents($filename1,$data);
//可以加入$data到文件中
if(file_exists($filename)){
//file_exists判断为是
unlink($filname);//不执行删除操作,参数无效
}
if(file_exists($filename1)){
//file_exists判断为否
unlink($filname1);//不执行
}
?>

0x02一段 jsfuck

1
JSFuck is an esoteric and educational programming style based on the atomic parts of JavaScript. It uses only six different characters to write and execute code.

有时候在浏览器的控制台执行jsfcuk 得不到想要的结果,不妨将最后的()改为toString().

0x03 一个开源项目

http://itchat.readthedocs.io/zh/latest/

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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 10 16:08:13 2018

@author: myndtt
"""
import itchat
import requests
def get_response(msg):
apiurl='http://www.tuling123.com/openapi/api'
data={
'key':'db4c3be6c40f43cb9e4f33120f302547',
'info':msg,
'useid':'myndtt',
}
try:
r=requests.post(apiurl,data=data).json()
return r.get('text')
except:
return
@itchat.msg_register(itchat.content.TEXT)
def print_content(msg):
return get_response(msg['Text'])
#@itchat.msg_register([itchat.content.TEXT],isGroupChat=True)
#def print_content(msg):
# return get_response(msg['Text'])
itchat.auto_login(True)
itchat.run()

测试的时候很尴尬 要小心 机器人可没节操 东西很简单 权当娱乐

0X04 一本书

https://yeasy.gitbooks.io/docker_practice/content/

前段时间的比赛用到了docker 以往知道docker 但是只知道大概 没好好用过 这次将彭 李等师兄的完美架构好好学习了一番 深入颇多。这本书写的很全,入门到实践docker 可以一看

php的session反序列化

0x00.打字机

简单扯一下,大家都知道,几乎所有的编程语言都有(反)序列化这种机制,可以将一些对象,数组等通过某种方式变成可以便捷传输和存储(后面将提到)的形式,如字符串。当然php也不例外。

43

同时在php有一个这样有意思的设置–>php默认的SESSION会话机制 存储在文件系统的会话数据的内容是已经序列化后的内容,程序执行session_start()后PHP会自动读取文件并unserialize反序列化成数组赋值给超全局变量$_SESSION (这句话是没错的)。

44

(session_register这个函数功能即是可以在全部变量中session定义一个新的变量)

parse_url

0x00.前言

又是一道关于parse_url的题目,上次也说了一道http://myndtt.com/2017/10/22/url%E4%B8%AD%E7%9A%84%E4%B8%8B%E5%88%92%E7%BA%BF/

0x01.开门见山

题目都没什么稀奇的,题目链接:http://solveme.safflower.kr/prob/url_filtering/

代码:

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
<?php
error_reporting(0);
require __DIR__."/lib.php";

$url = urldecode($_SERVER['REQUEST_URI']);
$url_query = parse_url($url, PHP_URL_QUERY);

$params = explode("&", $url_query);
foreach($params as $param){

$idx_equal = strpos($param, "=");
if($idx_equal === false){
$key = $param;
$value = "";
}else{
$key = substr($param, 0, $idx_equal);
$value = substr($param, $idx_equal + 1);
}

if(strpos($key, "do_you_want_flag") !== false || strpos($value, "yes") !== false){
die("no hack");
}
}

if(isset($_GET['do_you_want_flag']) && $_GET['do_you_want_flag'] == "yes"){
die($flag);
}

highlight_file(__FILE__);

problem&solution

0x00.前言

这完全是一篇水文,只是记录了一下平时遇到的一些问题及查找到的解决方法。

0x01.琴声悠悠

一.echo “{${phpinfo()}}”可以输出php环境

这个问题很早以前就有人提出来了,但是一直都没什么人解答,我其实也不知道真实的情况具体是什么,只是根据测试去推测可能是什么。

1.phpinfo()

首先phpinfo()函数是php的内置函数,函数原型是

36

solveme.kr-iamsowly

0x00.一波

题目链接 http://iamslowly.thinkout.rf.gd

这是solveme.kr中最后一道题目,是一道web方面的题(本文没有图片,全是文字!)

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
<?php
// It's 'I am slowly' problem of 'Solve Me'.
error_reporting(0);
require __DIR__.'/lib.php';

$table = 'iamslowly_'.ip2long($_SERVER['REMOTE_ADDR']);
$answer = $_GET['answer'];

if(isset($answer)){
$con = mysqli_connect($sql_host, $sql_username, $sql_password, $sql_dbname)
or die('SQL server down');

$result = mysqli_fetch_array(
mysqli_query($con, "SELECT `count` FROM `{$table}`;")
);
if(!isset($result)){
mysqli_query($con, "CREATE TABLE IF NOT EXISTS `{$table}` (`answer` char(32) NOT NULL, `count` int(4) NOT NULL);");
$new_answer = md5(sha1('iamslowly_'.mt_rand().'_'.mt_rand().'_'.mt_rand()));
mysqli_query($con, "INSERT INTO `{$table}` (`answer`,`count`) VALUES ('{$new_answer}',1);");

}elseif($result['count'] === '12'){
mysqli_query($con, "DROP TABLE `{$table}`;");
echo 'Game over';
goto quit;
}

从一道anti sql题讲起

0x00.前言

题目链接 http://antisqli.thinkout.rf.gd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// It's 'Anti SQLi' problem of 'Solve Me'.
error_reporting(0);
$con = mysqli_connect("127.0.0.1", "root", "root","mytest")
or die('SQL server down');

$id = $_GET['id'];
$pw = $_GET['pw'];
var_dump($pw);
echo "</br>";
echo $id.','.$pw."</br>";
echo "SELECT * FROM `user` WHERE `id`='{$id}' AND `pwssword`=md5('{$pw}');"."</br>";
if(isset($id, $pw)){
preg_match(
'/\.|\`|"|\'|\\|\xA0|\x0B|0x0C|\t|\r|\n|\0|'.
'=|<|>|\(|\)|@@|\|\||&&|#|\/\*.*\*\/|--[\s\xA0]|'.
'0x[0-9a-f]+|0b[01]+|x\'[0-9a-f]+\'|b\'[01]+\'|'.
'[\s\xA0\'"]+(as|or|and|r*like|regexp)[\s\xA0\'"]+|'.
'union[\s\xA0]+select|[\s\xA0](where|having)|'.
'[\s\xA0](group|order)[\s\xA0]+by|limit[\s\xA0]+\d|'.
'information_schema|procedure\s+analyse\s*/is',
$id.','.$pw
) and die('Hack detected');

sniperoj some web writeup

0x00.前言

今天机缘巧合发现了这个OJ平台,http://www.sniperoj.com/, 就随手做一下,平台十分小清新,web题目还行,有一点收获,记录一下而已。

0x01.记录

1.php-object-injection

提示是一个反序列化题目,像这种什么都没给的,右键源码什么都木有的,不用说,一定是源码泄露了。swp,bak,~都给上去看看有木有。最后是 http://120.24.215.80:10007/.index.php.swp

在ubuntu中复原一下 vim -r index.php.swp 得:

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
class Logger{
private $logFile;
private $initMsg;
private $exitMsg;

function __construct($file){
// initialise variables
$this->initMsg="#--session started--#\n";
$this->exitMsg="#--session end--#\n";
$this->logFile = "/tmp/natas26_" . $file . ".log";

// write initial message
$fd=fopen($this->logFile,"a+");
fwrite($fd,$initMsg);
fclose($fd);
}

function log($msg){
$fd=fopen($this->logFile,"a+");
fwrite($fd,$msg."\n");
fclose($fd);
}

function __destruct(){
// write exit message
$fd=fopen($this->logFile,"a+");
fwrite($fd,$this->exitMsg);
fclose($fd);
}
}