mysql 字符注入_mysql注入新姿势(数字与字符编码注入) hex,conv

0x01 前言

今天看到师傅们发的一篇文章,感觉mysql注入还能这么用,于是自己搭建了一个简单的环境,进行复现.

0x02原理

首先介绍两个mysql函数 hex和conv

conv(N,from_base,to_base) conv函数接收一个数字,进行进制转换

b70a01020b142371de343f6c5ef1c461.png

如上图就是将25从16进制转化成10进制,我们复原的结果同样也证实了这样的猜想

hex(str) 将str转化成16进制

unhex 复原

7a567bc11c8108ebeb2929a8e1b644ae.png

308f0c096c00a0c3298cce44ed5d3fa0.png

所以我们可以通过语句将字符串转换成数字   先将test转换成16进制,再转换成10进制

afbf550e5506b70c7290707a1b3845ac.png

70d3993a75692066ebb9119cf822c992.png

由于Mysql的特性 导致输入的字符串的最大长度为8个字节,超过会导致不能成功解码

83afcf73f39284eb97ba9bea57142b32.png

这时候我们可以用substr来截取

cb02bf3a12107125af76b4b8a598c72c.png

0x03 复现

demo1

1 <?php2 $id= $_GET['x'];3 $conn = mysql_connect('127.0.0.1','root','root');4 mysql_select_db('flag',$conn);5 $sql = "select name from flag where id=$id";6 $result = mysql_query($sql);7 while($row = mysql_fetch_array($result)){8 echo $row['name'];9 }10 mysql_close($conn);11 echo "


";12 echo $sql

13 ?>

4dbfe3e3c0fd17c3d2a4ff8dbee314eb.png

一个简单的sql注入

68ff25df3533d33ded74b2022cd977d6.png

98de10d0879f7dd2e13f350101445621.png

自己在本地编写好payload代码

eaae763bd8f40948ace9528fe5f1b75f.png

51722f05a50cf3869359913877fab726.png

38e6213fe5c98325f5c930682ecedacf.png

成功利用

demo2 update注入中关闭显错

1

2 <?php3 $conn = mysql_connect("localhost","root","root")or die("error".mysql_error());4 $db = mysql_select_db("test");5 mysql_query("set name utf8");6 $id = @$_GET['id'];7 $username = @$_GET['username'];8 $sql1 = "update users set username='$username' where id ='$id'";9 $sql2 = "select * from users where id = '$id'";10 mysql_query($sql1);11 if($result = mysql_query($sql2)){12 $row = mysql_fetch_array($result);13 echo "ID".$id."的用户变为".$row['username'];14 mysql_close();15 }16 else{17 var_dump(mysql_error());18 }19 ?>

f45fe24b6298fdde29bba6ebc4f5c76e.png

在mysql开启报错的时候,可以使用几种报错函数得到结果 payload之一

:?id=1&username=wakakaka' or extractvalue(1,concat(0x7e,database())) or'

就可以得到数据。

如果开启了报错可以用conv hex来得到数据

516f56bca1d8b81904e555512773ffe2.png

479b3208021073e4b9f83bba30772d15.png

Mysql注入博大精深,以后还有很多姿势需要学习

感谢作者提供的思路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值