2018-03-27 强网杯和安恒杯题目总结

经过了两天和小伙伴们的熬夜奋战和艰苦奋斗我们终于

强网杯

web签到

md5第一关

这道题主要是md5的各种绕过首先就是第一题空数组就可以绕过了
param1[]=sdfasdf&param2[]=asdfasdf
所得到的值都是0的md5值所以相等

md5第二关

s878926199a,s155964671a的md5值都是0e开头然后
param1[]=s878926199a&m2[]=s155964671a就好了

md5第三关

if((string)$_GET[‘param1’]!==(string)$_GET[‘param2’] && md5($_GET[‘param1’])===md5($_GET[‘param2’]))
{ die(“success!”);}

找到两个MD5值一样的字符串
https://www.mscs.dal.ca/~selinger/md5collision/
脚本我放博客了,主要按这个来就行

welcome

bmp
offset=20 发现端倪
offset=100:

QWB{W3lc0me}

three hint

这道题先是注册一个age,age一定要是数字型的,

我就想起我最近看过的一道关于二次注入的题目,

猜测他用的php语句是is_number

一直找不到回显=。=其实早就有回显绝望

将语句改成16进制输入到里面就可以得到flag

安恒杯

ping

首先是ping一个服务器,就可以想到一个命令行的执行

就是加上一个%0a 代表着一个换行符

%0a加上ls 就可以读取当前目录下的文件

看到还有一个update,之后就是一个文件上传漏洞中间有一个伪随机数

mt_rand,但是现在已经有一只漏洞


>[http://download.openwall.net/pub/projects/php_mt_seed/php_mt_seed-3.2.tar.gz](http://download.openwall.net/pub/projects/php_mt_seed/php_mt_seed-3.2.tar.gz)

主要看这个可以下载

就可以找到自己上传的文件执行一句话木马

一直使用%00截断但是找不到那个文件夹

上网查了一下Apache文件解析漏洞

Apache会从文件的最后一个后缀开始解析直到找到认识的就会停止解析,

所以只要构造一个上传文件.php.jpg就可以了

最后我恶作剧了一下=。=

image

还有一题我忘了叫啥

web 100分

主要是lfi漏洞,文件任意读取

需要学习的是Apache的目录=。=看来我要背一背来了

/etc/httpd/conf/httpd.conf 配置文件路径

HGAME正赛writeup

#闲扯一句

这次的HGAME我收获挺大的,认识了好多大佬,

当然也感谢大佬们抬手让了我拿了第一(1000块~),

当然我觉得最主要的原因是性感出题人hammer在线解题,

让我做出来了,真滴非常感谢

这次的比赛学到了很多,让我慢慢想一想

已经过去3天了。题目都关了,我只能想着写writeup。。

#web1

LFI RCE

首先是web1,web1一开始就一个界面看着很像我周末N1ctf做的题目

界面的是index.php,然后我看到登录框和密码框就一直想着用sql中注入来登录,

后来出题的Alias给了我们hint 是LFI,我用了burpsuite抓包发现有一个login,我居然

以为LFI在这里。。然后做不出来了。

直到最后一小时,我做不了别的题目了,开始私聊出题人=。=

出题人真的是非常有意思,开始跟我讲你刚刚进去一个网站,

发现登录框了,你先要干嘛,我想了想毫不犹豫的说sql注入了!

现在想想=。=当然是先注册了,就登陆了registe.php,发现可以注册

注册完之后登录主页面,然后我就看到了LFI的入口,

用php的伪协议可以读取所有的源代码

php://filter/read=convert.base64-encode/resource=upload.php

还好我源代码保存了

继续阅读“HGAME正赛writeup”

HGAME——WEEK4

#前言

突然发现我的week4的writeup没有写,还好我的word(现在发现只有一部分-,-所以有一点图片不好意思。。)

还在-,-于是补补上,明天写一下正赛的writeup

如果我还找的出来的话=。=,web只能说一说,misc还是有文件的=。=

#正经地方

Web

散落的flag(请求头?)

一开始做的时候真的没头脑=。=只能做出第一个三分之一部分

继续阅读“HGAME——WEEK4”

2018-03-19 杭电所有课程爬取的代码 python

一天毛钊岚=。=想让我把杭电所有的课程爬下来,于是经过一天的构思和一天的查资料还是完成了=。=嘻嘻嘻嘻

正在爬取=。=

我所使用的是selenium和re 模块就够了,正好锻炼我re的能力

因为在爬取的时候我发现并不能用request,杭电官网的加载是用JavaScript来做请求的,发现request并不能一键爬取于是上网查找了selemium的资料写出来了=。=

下面是代码=。=,还有就是chromedriver一定要和Chrome的版本对应不然是不能实现的

 

import re
from selenium import webdriver
import time,os

url='http://jxgl.hdu.edu.cn/jxrwcx.aspx'
file=open('kechengmingchen.txt','w')

def openwindow():
    driver = webdriver.Chrome(executable_path='C:\\Users\\assu\\PycharmProjects\\CTF\\学校课程\\chromedriver.exe')
    # driver.maximize_window()
    driver.get(url)
    for i in range(1,50000):
        yemian,yeshu=tiqu(driver.page_source)
        print("第{}页".format(yeshu[0]))
        # print(len(yemian),yemian,sep='\n')
        for j in range(1,len(yemian)):
            file.write(yemian[j][1]+'\n')
        time.sleep(1)
        if i <11:
            xpath='//*[@id="DBGrid"]/tbody/tr[16]/td/a[{}]'.format(i)
        else:
            if i%10==0:
                xpath = '//*[@id="DBGrid"]/tbody/tr[16]/td/a[{}]'.format(11)
            else:
                xpath = '//*[@id="DBGrid"]/tbody/tr[16]/td/a[{}]'.format(i%10+1)
        try:
            select=driver.find_element_by_xpath(xpath=xpath)
            print("要按的页数"+select.text)
            select.click()
        except:
            if yeshu==i+1:
                continue
            print("最后一页为第{}页".format(yeshu[0]))
            break

def tiqu(text):
    regax='<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>'
    all_re=re.findall(regax,text)
    reg='<span>(.*?)</span>'
    arr_1=re.findall(reg,text)
    return all_re,arr_1

openwindow()
file.close()

全部44行=。=还是挺简单的呢

 

结果是这样的=。=

当然如果你要加更多的话也是可以的,看下代码你就知道了=。=
杭电的反爬真的差=。=

后来跟o爷爷聊了一下杭电的所有课程爬取

他也给了我一份代码,他没有用selenium比我的快很多。

比较推荐他的,嘻嘻嘻嘻嘻

import random
import re
import time

import requests
from bs4 import BeautifulSoup

session = requests.Session()
r = requests.get(url)
soup = BeautifulSoup(r.content, "html5lib")

semester = input('第几学期? ')

if semester == '2':
 r = requests.post(
 url,
 data={
 'ddlXY': None, 'ddlJS': None, 'kcmc': None, 'ddlXN': '2017-2018',
 'ddlXQ': semester, 'DropDownList1': 'kcmc', 'TextBox1': None,
 '__LASTFOCUS': None, '__EVENTARGUMENT': None,
 '__EVENTTARGET': 'DBGrid$ctl18$ctl01',
 '__VIEWSTATE': soup.find(id='__VIEWSTATE')['value'],
 '__EVENTVALIDATION': soup.find(id='__EVENTVALIDATION')['value'],
 })
 soup = BeautifulSoup(r.content, "html5lib")

f = open('semester%s.csv' % semester, 'w')
f.write('''"开课状态","课程名称","学分","考核方式","课程性质","任课教师",\
"选课课号","起止周","上课时间","上课地点","开课学院","合班信息"\n''')

first_ten_page = True
first_page = True
page = 1 if semester == '1' else 0
total = 1 if semester == '1' else 0

try:
 while True:
 trs = soup.find('table', id='DBGrid').find_all('tr')[1:-1]
 for tr in trs:
 tds = list(tr.children)[1:-1]
 if first_page and semester == '2':
 print('Changing to semester 2...')
 break
 else:
 f.write('"' + '","'.join([i.text for i in tds]) + '"\n')
 print('[%3d] Got: %s' % (total, tds[1].text))
 total += 1

r = requests.post(
 url,
 data={
 'ddlXY': None, 'ddlJS': None, 'kcmc': None, 'ddlXN': '2017-2018',
 'ddlXQ': semester, 'DropDownList1': 'kcmc', 'TextBox1': None,
 '__LASTFOCUS': None, '__EVENTARGUMENT': None,
 '__EVENTTARGET': 'DBGrid$ctl18$ctl%02d'%page,
 '__VIEWSTATE': soup.find(id='__VIEWSTATE')['value'],
 '__EVENTVALIDATION': soup.find(id='__EVENTVALIDATION')['value'],
 },
 )
 soup = BeautifulSoup(r.content, "html5lib")
 time.sleep(1)
 if (page == 10 and first_ten_page) or page == 11:
 page = 2
 first_ten_page = False
 else:
 page += 1
 first_page = False
 f.flush()

except KeyboardInterrupt as e:
 f.close()
 print("exit now")