在数据库中查询参数ID对应的内容,然后将该内容输出到页面。由于是将数据输出到页面上的,所以可以使用Union注入,且通过order by查询结果,得到字段数为5,Union注入的语句如下: union select 1,2,3,4,5 如图4-18所示,可以看到页面成功执行,但没有返回union select的结果,这是由于代码只返回第一条结果,所以union se...
二次注入中double1.php页面的代码如下所示,实现了简单的用户注册功能,程序先获取GET参数“username”和参数“password”,然后将“username”和“password”拼接到SQL语句中,最后使用insert语句将参数“username”和“password”插入数据库。由于参数“username”使用addslashes函数进行了转义(转义了单引号,导致单引号无法闭合)...
Boolean注入代码分析 在Boolean注入页面,程序先获取GET参数ID,通过preg_match判断其中是否存在union/sleep/benchmark等危险字符。然后将参数ID拼接到SQL语句中,在数据库中查询,如果有结果,则返回yes,否则返回no。当访问该页面时,代码根据数据库查询结果返回yes或no,而不返回数据库中的任何数据,所以页面上只会显示yes或n...
接着,使用Union注入方法完成此次注入。 XFF注入代码分析 PHP中的getenv()函数用于获取一个环境变量的值,类似于$_SERVER或$_ENV,返回环境变量对应的值,如果环境变量不存在,则返回FALSE。 使用以下代码即可获取客户端IP地址。程序先判断是否存在HTTP头部参数HTTP_CLIENT_IP,如果存在,则赋给$ip;如果不存在,则判断是否...
Base64注入攻击 Base64注入攻击的测试地址在本书第2章。 从URL中可以看出,参数ID经过Base64编码(“%3d”是“=”的URL编码格式),解码后发现ID为1,尝试加上一个单引号并一起转成Base64编码,如图4-64所示。 图4-64 当访问id=1'编码后的网址时(/4.3/base64.php?id=MSc%3d),页面返回错误。1 and 1=1和...
宽字节注入代码分析 在宽字节注入页面中,程序获取GET参数ID,并对参数ID使用addslashes()转义,然后拼接到SQL语句中,进行查询,代码如下: <?php $con=mysqli_connect("localhost","root","123456","test"); if (mysqli_connect_errno()) { echo "连接失败: " . mysqli_connect_error(); } mysqli_query(...
报错注入攻击 报错注入攻击的测试地址在本书第2章。 先访问error.php?username=1',因为参数username的值是1'。在数据库中执行SQL时,会因为多了一个单引号而报错,输出到页面的结果如图4-35所示。 图4-35 通过页面返回结果可以看出,程序直接将错误信息输出到了页面上,所以此处可以利用报错注入获取数据。报错注入有...
堆叠查询注入攻击 堆叠查询注入攻击的测试地址在本书第2章。 堆叠查询可以执行多条语句,多语句之间以分号隔开。堆叠查询注入就是利用这个特点,在第二个SQL语句中构造自己要执行的语句。首先访问id=1',页面返回MySQL错误,再访问id=1'%23,页面返回正常结果。这里可以使用Boolean注入、时间注入,也可以使用另一种注入方式...
时间注入攻击的测试地址在本书第2章。 访问该网址时,页面返回yes;在网址的后面加上一个单引号,即可再次访问,最后页面返回no。这个结果与Boolean注入非常相似,本节将介绍遇到这种情况时的另外一种注入方法——时间注入。它与Boolean注入的不同之处在于,时间注入是利用sleep()或benchmark()等函数让MySQL的执行时间变长...