CTF web学习打卡 1

我觉得学习不能光学,还是要实践和总结才能更好的理解和记忆,但是没有什么条件去实践,那么只好多多总结。

又做了几天的web题,看了那些大佬的writeup感觉学到了很多东西

  • 过滤问题
    一般的sql注入的题目都会过滤或者waf掉一些字符(我觉得这个主要是考你知识的广度,总有一些不会被过滤掉),这时候你就要先弄清楚过滤的规则,一般来说有些符号被过滤掉了基本上不可能实现注入了,那么他一定不会直接过滤那个符号,而是把那个符号和空格之类的组合一起过滤掉或者只过滤一次。比如这几天就碰到了把select和空格一起过滤的,or和空格一起过滤的,还有之前的双写oorr或者大小写Or绕过的。当select函数被过滤掉的时候就只能猜解本表类的字段,比如一个用户表,虽然你查的是username但是password可以不用select就可以获取到,可以直接当初判断条件。当length过滤掉的时候,猜解字段本来长度就不是必须的,设置为大一点(一般为50),然后有一轮一个字符都没有匹配到的时候,就匹配完成了。
  • 一些函数的问题
    • 最近做一个web题的时候,碰到了一个题,注释符全部去掉了,因此只能闭合,然后因为前面是一个select语句,后面只能用where来闭合,然后我select database() where ‘1’=’1怎么样都不能成功,后来我才发现database()后面是不能用where的,但是可以直接接”,比如select database() ” 。。。有点坑。
    • 等于号的替代
      有时候会出现等于号被过滤或者waf的情况,那么这时就可以用regexp和like来代替。regexp默认是不分大小写的,数据库也不区分大小写,但是flag分大小写,这时可以在regexp后面加个binary关键字,就可以区分大小写了。
    • 字符串截取函数
      需要猜解表名的时候,往往会用到字符串截取函数,字符串截取函数 除了mid(),substr()(sql里的substr和php里不一样,它的第一位是1不是0)还有left()和right(),一个从左边开始取,一个从右边开始取。
    • 基于时间盲注的几个函数
      基于报错的盲注主要是你符合条件后会有提示,基于时间的盲注的函数主要是sleep,当没有头绪或者输入之后没有提示的时候不妨在后面加个and sleep(5)(union使用的情况是在网页上出现条类似记录的东西的时候),实验吧里有一题就是怎么输入都没有反应最后使用sleep有反应了。为了提高盲注的效率,sleep函数经常和if函数一起使用,if(表达式,为真,为假),比如if((select length(database()) >10),1,sleep(5)),如果数据库名的长度大于10,就返回1,否则返回延迟5秒。当逗号不能用的时候这句话可以换为
      and case when((select length(database()))>10) then sleep(10) else sleep(0) end.
      在python脚本里使用time.time()函数来判断盲注的时间延迟。
    • limit,schema_name,table_schema
      limit函数是用来限制查询的记录数的,除了用offset来定位之外,它本身也可以定位,比如limit 0,1表示的就是从第一个数据开始取一条,前面表示定位后面是记录的条数。
      schema_name和table_schema都表示的是数据库名称只不过使用的情况不一样。schema_name使用在查数据库名字的时候,比如有一个web题,它把括号禁用了,这个时候就不能使用database()函数了,可以直接select schema_name from information_schema.schemata。这样就能查出所有的数据库的名字。当知道数据库名之后查表就是这样查,select table_name from information_schma.tables where table_schema=database()。
  • 事出反常必有妖
    有时候做题会出现一些特别的提示,这些提示一般都是有用的,虽然有时候也会用一些数字来迷惑你。比如出现使用vim编辑器的时候,就要注意vim编辑器的临时文件问题,在使用vim编辑器的时候如果中间异常中断,比如强行关机,就会出现临时文件,访问方式是.文件名.swp。一般题目里出现vim编辑器都会存在临时文件。

    做web题或者网站渗透首先就要尝试弱口令,windows下就测admin和1,linux下就测试root,有时候你输入admin的时候就会出现和输入其他东西不同的结果。

    用burpsuite抓包类的题目,除了要注意包里面本身的特殊字段之外,还要注意16进制里可能隐藏这一些东西,有时候flag就直接在里面,或者查看302跳转的网页,一般存在300开头的响应号,里面都会有一些信息或者flag。
    吐槽一下,实验吧里的一个题,题目要你通过邮箱找密码,尝试注入,输入自己的邮箱都没用,然后抓包,发现16进制里面有管理员邮箱,然后输入管理员邮箱,出现了”这是管理员邮箱”,与其他的输出不同,并没有太在意,然后看源代码,发现了提交地址submit.php 然后访问,出现了”你不是管理员”,这其实也是一个提示,但我也没有注意。。。最后去看别人的题解,先是通过包里面有vim字段找到了vim临时文件,看到了源码,然后再通过管理员邮箱成功进入。。。这时候才发现,所有特殊的提示都是有用的。还有hpf是分割注入的提示(原谅我英语不好),就是两个注入点,一边使用/另外一边使用/闭合,找注入点也很关键,大部分人都会觉得注入点再username那里,有的题它就是出现在password那里,或者一边过滤一点东西逼你用分割注入,
    username=’ or updatexml/&password=/(1,concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema regexp database())),1) or ‘。。。其实吧,CTF有些题就是脑洞题,还有一个题直接输入网址上面的名字就行了,我还抓包,注入,看源码搞了半天。

  • insert,delete,update函数的注入问题
    因为这些函数是没有回显的,所以注入这些函数,我现在只知道两种,盲注或者报错注入。
    拿insert()函数举例,insert into xxx values(‘1’ or if((select length(database()) >10),1,sleep(5)))。注入这几个函数必须使用or连接,and不行,之前就掉这个坑里了。
    当存在报错显示的时候,可以使用通过报错的注入,可以先测试一下有没有报错,比如说你加一个 or a(),由于没有a这个函数,就会报错,如果有显示你就可以使用报错函数来注入。报错函数有
    floor、ExtractValue、UpdateXml、GeometryCollection、polygon、multipoint、multlinestring、multpolygon、linestring
    name_const exp
    一般使用updatexml,使用方式updatexml(0,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema=database() limit 0,1)),0),然后就会爆出相应的结果出来。

  • web题的一些知识点
    QNKCDZO
    240610708
    aabC9RqS
    md5之后是科学计数法为0的字符串

    User-Agent :IE,.NET CLR 9.9
    Accept-Language: en-gb,q=0.8
    使用ie浏览器,.NET框架9.9,英格兰语言来访问网站。

    sessionid在cookie里,session为空(需要打一个空格),服务端调用的session及它的索引也为空也为空

    伪静态技术 http://ctf10.shiyanbar.com:8888/indirection/index.php/index.php只会解析第一个后面的会被当作参数处理
    http://ctf5.shiyanbar.com/indirection/index.php/user/index.php

    web题也可以和渗透网站一样,先扫一波后台。。。

    python get 和post的数据,一个在params里,一个在data里。

猜你喜欢

转载自blog.csdn.net/chaootis1/article/details/79186685
今日推荐