pikachu sql-lnject 部分冲关过程

本文基于pikachu sql-lnject

  1. 搜索性注入

你说了,你能搜索部分对吧,pika

这不得试试搜个%(只要你没过滤%)

没有过滤%就将会输出所以字符

  1. http heard 注入

先看提示

我们登录一下吧

好家伙,直接把我登录信息记下来了

看看提示

话不多说,我们去看看源代码,看看http头部注入是什么原因造成的


//直接获取前端过来的头信息,没人任何处理,留下安全隐患
$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);

我们保守点再去看看execute是什么操作

//判断一下操作是否成功,如果错误返回bool值,如果成功,则返回结果集
function execute($link,$query){
	$result=mysqli_query($link,$query);
	if(mysqli_errno($link)){//最近一次操作的错误编码,没错误返回0,没有输出
		exit(mysqli_error($link));//有错误,返回编码,为true,则打印报错信息
	}
	return $result;
}

execute只是个普通的提交操作

可能会问为何不通过用户名密码注入,不着急,我们再看看源代码

if(isset($_POST['submit'])){
    if($_POST['username']!=null && $_POST['password']!=null){
        //转义,防注入
        $username=escape($link, $_POST['username']);
        $password=escape($link, $_POST['password']);
        $query="select * from users where username='$username' and password=md5('$password')";
        $result=execute($link, $query);
        if(mysqli_num_rows($result)==1){
            $data=mysqli_fetch_assoc($result);
            setcookie('ant[uname]',$_POST['username'],time()+36000);
            setcookie('ant[pw]',sha1(md5($_POST['password'])),time()+36000);
            //登录时,生成cookie,10个小时有效期,供其他页面判断
            header("location:sqli_header.php");
        }else{
            $html.=("<p>登录失败,请重新登录</p>");
        }
    }
}

啊,有个叫escap的转义函数

不着急,我们再找找

//转义,避免fuck
function escape($link,$data){
    if(is_string($data)){
        return mysqli_real_escape_string($link,$data);
    }
    if(is_array($data)){
        foreach ($data as $key=>$val){
            $data[$key]=escape($link,$val);
        }
    }
    return $data;
}

看来user和password都加密了,只能从这个什么都没干的http信息下手了

那么问题来了,怎么对这些信息下手?那就需要抓包了.

这就要用到Burp Suite这个软件了

我们设置好代理(啥?你问我为啥不介绍软件怎么用?网上教程太多了,大都很详细的,我在这里主要是讲思路,并非是操作)

提交密码后

加入这些语句试试(很经典的报错注入语句)

' and extractvalue(1,concat(0x7e,(database()))) and '1'='1

提交上之后,我们可以看到直接返回了错误

这就是http头部注入,开发者为了获取http头部信息,然后将信息注入到数据库,忽于http信息的检测从而导致了这个问题的出现


  1. "delete"注入

我们删除一个抓下包看看

是不是很熟悉,但是php却隐藏了起来

好了,让我们直接利用GET注入的方式进行

id=-1+and+extractvalue(1,concat('~',(select+database())))

  1. insert/update 注入

没啥好说的

基于POST传输信息,官方提醒都是自己看着办

我之前也讲个就不说啥了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值